栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

程序架构 程序算法 面向对象的编程思想以及程序架构造 STM32标准库 协议栈 RTOS源码(操作系统内核程序设计方法)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

程序架构 程序算法 面向对象的编程思想以及程序架构造 STM32标准库 协议栈 RTOS源码(操作系统内核程序设计方法)

我最近也意识到了程序架构这一点

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《单片机开发项目全局变量太多怎么管理?》, 一起来围观吧
https://blog.csdn.net/weixin_43982452/article/details/121387105

最近有几个小伙伴反映说自己写程序感觉很乱,不知道怎么去规划,想到什么就写什么,全局变量满天飞,代码一多就出现好多问题。

而且如果自己写的程序不加注释的话,过几个月发现看不懂了。

那程序架构到底是什么?

我认为是一种成熟的编程思维,是经验的总结,比如RTOS就是属于一种程序架构,STM32固件库也是一种程序架构。
不同的人,编写出来的程序架构都不一样,有大的有小的,最重要是够用就好。
而全局变量多导致程序乱的问题,就可以用程序架构的模块化编程特点来解决

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《C语言开发单片机为什么大多数都采用全局变量的形式?》, 一起来围观吧
https://blog.csdn.net/weixin_43982452/article/details/119651790

现在想想走弯路付出的时间代价真的是太大了。

很多人可能好奇,C语言开发单片机为什么大多数都采用全局变量的形式。

其实这个说法不完全正确,还是那句话,可能是你接触的代码都是这样子,而更好的代码结构你或许没接触到。

你的思维可能还是处于c语言是面向过程编程的误区,其实在做一些中大型项目的时候,为了保证程序可移植性和可扩展性,都会采用面向对象的编程思维。
最典型的例子就是STM32的固件库。

如果大家研究过固件库那些外设的.c文件,你会发现基本没有全局变量,为什么?

我的理解是这样的:

1.对于一个资深工程师来说,全局变量绝对不允许用来被多个不同的.c文件调用,否则移植性极差,而且程序大了,文件多了,如果全局变量都声明在.h文件里,你怎么保证变量名不会重复?

2.如果我用全局变量,那变量的应用范围仅限该.c文件内,也就是相当于static的作用域。

除了没有全局变量以外,不知道你发现没有,它们的.h文件定义了很多结构体,枚举。

然后,在.c文件里面的那些函数呢,基本上就是对这些结构体进行操作。

可能你现在一脸懵逼,这是什么神操作????

其实啊这就是所谓的面向对象的编程思维,难怪stm32的固件库移植性和可扩展性超强!

STM32固件库把每个外设可以配置的参数都通过结构体封装起来,比如说GPIO有具体引脚(GPIO_Pin),频率(GPIO_Speed),工作模式(GPIO_Mode)。

不同的参数对应不同的设置值,比如说上图的GPIO工作模式,通过枚举来给值重命名,这样可以增强可读性。

而这些值其实就是最终去配置单片机寄存器的。

大家发现没有,固件库的这种种操作都是非常有针对性的,首先凡事皆对象:GPIO、TIMER、USART、DMA、NVIC等等。

先把这些对象的属性通过结构体定义出来,后续大多函数都是基于这个结构体去操作的。

这就是面向对象的思维(个人从业多年的理解)。

所以,这就展现了一个工程师的代码水平了,代码写得好不好不是看你的代码风格和规范有多好,可移植性、可扩展性强,执行效率高才是核心。

很多新手对这些底层的思维没有一个很清晰的认知,就瞎搞,比如说强行用指针装逼,实际上是治标不治本的,搞不好还把自己坑了(以前经常干这种蠢事)。

第一个就是上面说的STM32标准库,还有就是各种协议栈,比如说蓝牙的协议栈,又或者是各种实时操作系统。

这些都是你最好的学习渠道。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号