This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

嵌入式代码中 对于大量变量 如何整理、规范化



  我以前是做模拟开关电源的,因近年来回馈并网电源设计需求变多,最近一年一直在学习TI的C2000实时控制芯片的一些代码例程,这几个月一直打算开始写代码,但总找不到开始,目前主要纠结如标题所示,具体来说如下:

1、以TI单相并网逆变器的代码为例,不说汇编代码变量,在main.c中含有大量变量:电压、电流、连接汇编中指针的中间变量、与上位机通讯变量、状态量、中间临时变量、标志位等等,如此多的变量,在TI给出的代码中已经尽量把相同功能、同类变量放在一起去定义、去初始化,但是还是给人感觉比较乱。

2、我感觉TI所给的代码例程比较乱,是因为我三年前参加一个几百KW三相并网设备时,看到别人博士写的代码,里面对这些变量的整理、归类,全部都是用结构体去归类的,光这些变量当时记得用A4纸打印就28页,当时因保密需要,也只能接触了一些,现在基本忘了。但对于这种代码风格一致恋恋不忘。

   我也知道TI给的是参考例程当然不能与商业代码相比,请大家多多包涵。但目前主要是纠结这个问题,其实我也知道要熟练运用这个结构去规范如此多的变量,必须对所有用到的变量非常熟悉,我现在也是初学,工作主业还是搞硬件,希望有写过一些 大的 嵌入式代码工程的人推荐一些相关经验,不一定是电源方面的,其实其他很多地方应该都有用到。

   以上 ,谢谢!

  • 一般对代码规范化的最常用方法都是采用针对每个功能模块定义结构体,然后定义该模块的输入结构体变量、输出结构体变量以及中间处理结构体变量,而后进行变量操作就非常清晰了。

  • 不知楼主是否接触过面向对象编程,我的经验就是学习面向对象的编程方法,先分文件,按性质内容把相关的代码放到一个c文件中,只在这个文件内共用的的变量和函数全部用static定义,只在函数内使用的变量就在函数内定义,只在几行代码范围内使用的临时变量就在那几行代码范围内定义(任何一个大括号内的开头都可以定义变量,且仅供大括号内使用,if结构,do结构,都可以在里面定义变量,就算没有if,自己也可以随时打两个大括号出来。楼主提到“中间临时变量”,如果这种变量也放到main函数的开头,那……),需要和别人共用的参数,才用公共变量或函数公开出去,个别实在无法归类到某个文件中的,才统一放到一个全局变量文件中。

     还有,分清常量和变量,顶级的输入常量就用预编译常量定义,然后用const定义出二级常量,比如,有个参数“半径”是常量,那么圆的面积也是常量,就把半径定义为预编译常量,然后const定义面积,这样在代码运行时绝对不需要计算,节约代码空间和计算时间,同时也有很好的可读性。

    结构体用起来确实很方便,也很清晰,但是有个问题,运行速度慢,实际测试一下就知道了,给单独一个变量赋值,相比给结构体某个元素赋值,乃至通过指针给结构体某个元素赋值,运行的时间是很大差别的,代码量也增加了,我有个项目需要高速运行,所以在经过实践后,最终抛弃了结构体的做法。

  • Jason Wu4 :

         谢谢回复!你说的使我心中有了一些整体代码轮廓,也类似于TI的电源库的一些功能模块使用。我想这样使用结构体对于后续配合复杂功能上位机界面是很有用的,我现在也开始写代码了,谢谢!

  • HH Y1:

             对于面向对象编程,没怎么接触过,后续写代码我会去了解一下,对于你说的我大致理解为:

             对于大型代码应该是按功能把代码分割,进行模块化,在分割是明确共用变量、静态变量和临时变量,同时对这些变量在定义和定义位置上严格使用。 对于你说的这个我想这对代码规范和严谨比较重要的,我在后续写代码时会时刻提醒自己按这种规范来。

            对于使用结构体会影响速度,这个我还不太清楚,其实在TI给的数字电源的代码例程来看,基本上涉及到软件环路,算法,是直接中断调转到汇编代码里面去计算,这样实时更新占空比。C代码主要是做一些后台任务:上位机通讯、保护判断、状态机等。还有就是TI的实时处理芯片有一些是上百兆的跑,应该够用,当然具体需用多大时钟速度,我目前还是不清楚的。

          其实 说的使我想起了一些以前看到别人的代码的轮廓,主要原因是作为产品,很多时候需要配备复杂功能的上位机,上位机面板上有很多功能块,每一个功能定义一个结构体或多个,有时候可能变量还会重复,这样在下位机里面大量功能代码和变量就会清晰很多。