这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何使用C语言来编写MSP430的高质量代码

共12条 1/2 1 2 跳转至

如何使用C语言来编写MSP430的高质量代码

高工
2014-07-05 15:21:03     打赏


微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑,一般都要求尽量节省使用资源,并且,由于微处理器硬件一般都不支持有符号数、浮点数的运算,且运算位有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常是2个不可兼顾的目标,在多数情况下,编程者必须根据实际情况作出权衡和取舍。

需要注意的事项如下:

1) 通常在满足运算需求的前提下,尽量选择为变量定义字节少的数据类型。

比如最常用的int和char,int是16位的,char是8位的,如果没有必要,不要使用int,而且使用char也最好使用unsigned char。运行时,可以在变量窗口看到,使用类型为unsigned char的变量是16进制的格式,而使用int的是十进制格式,如果char没有定义为unsigned,会出现负号,如果没有必要的话,在430中是不需要负数的。

 

2) 尽量不用过长的数据类型,如long、long long和double

 

3) MSP430的C编译器不支持位寻址,所以运算中尽量减少位操作,对于只有“是”和“否”的变量,如果RAM容量允许,则可分配为unsigned char类型,可提高运算速度。如果分配为某字节的某个位,可以减少存储器的消耗,但是会降低运算速度

 

4) 避免使用浮点数,尽量使用定点数进行小数运算。如果必须使用浮点数,则尽量用32位的float,而不是64位的double

 

5) 尽量将变量分配为无符号数据类型

 

6) 对于指针变量,如果声明后其值不再改变,则声明为const类型,这样编译器编译时能更好的优化生成的代码

 

7) 尽可能的使用局部变量而非全局变量或者静态变量(static)。这样有利于编译器编译时更好的优化生成的代码

 

8) 避免对局部变量使用 &取地址符。因为这样会使编译器无法把此变量放在CPU的寄存器中,而是放在RAM中,从而失去了优化的机会

 

9) 仅在模块内使用的变量声明为static,有利于优化代码

 

10) 如果堆栈空间有限,尽量减少函数调用的层次和递归调用

 

11) 如果传送参数过多,可将参数组成一个数组或者结构体,然后用指针传递

 

12) 某些变量在中断程序和普通级别程序中都会被用到,所以必须加以保护。

将变量声明为volatile类型,编译器优化时就不会移动它,对它的访问不会被延迟。为保证对volatile的变量不被打断,为此,可以在访问它的部分(即访问它的函数)前面加上__moniter的声明(哪位大神能解释一下这一条的后半句??)


高工
2014-07-05 16:23:09     打赏
2楼
一个好的狙击手是靠子弹喂的,一个牛逼的码农是靠代码垒的....

工程师
2014-07-05 17:00:34     打赏
3楼
用430的大神都来看看。。。

高工
2014-07-05 22:32:24     打赏
4楼
码出万里长城

院士
2014-07-06 10:41:15     打赏
5楼

助工
2014-07-06 10:49:38     打赏
6楼
中国人编程还是不规范

助工
2014-07-06 10:49:59     打赏
7楼
万里长城没建成就倒了

高工
2014-07-06 15:30:21     打赏
8楼
那是因为真正的攻城师在民间,而且巾帼不让须眉

专家
2014-07-07 13:28:42     打赏
9楼

The __monitor keyword causes interrupts to be disabled during execution of the function. This allows atomic operations to be performed, such as operations on semaphores that control access to resources by multiple processes. A function declared with the __monitor keyword is equivalent to any other function in all other respects.

这个是网上看的。在执行过程中不允许中断。相当于进行原子操作。


助工
2014-07-07 21:40:44     打赏
10楼
软件工程是个永恒的大问题

共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]