历史上的今天
今天是:2025年04月04日(星期五)
2020年04月04日 | MSP430的C语言编写注意事项
2020-04-04 来源:eefocus
==============================================================================================================================
微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑,一般都要求尽量节省使用资源,并且,由于微处理器硬件一般都不支持有符号数、浮点数的运算,且运算位有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常是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) 如果堆栈空间有限,尽量减少函数调用的层次和递归调用
================================================
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 由快速电梯和视觉同盟共同举办的“60年后的电梯”创意设计大赛正在如火如荼进行中,许多参赛的作品都非常能够表现出节能、环保和未来的理念。以下是精彩参赛作品欣赏,分享给大家: 作品名称: ...… 查看全部问答> |
|
开关电源原理与设计(连载31)推挽式开关电源变压器参数的计算 0.4.推挽式开关电源变压器参数的计算 推挽式开关电源使用的开关变压器有两个初级线圈,它们都属于励磁线圈,但流过两个线圈的电流所产生的磁力线方向正好相反,因此,推挽式开关电源变压器属于双激式开关电源变压器;另外,推挽式开关电源变压器 ...… 查看全部问答> |
|
In function \'LoadDATA\':../src/aa.c:95: error: number of arguments doesn\'t match prototype 出现的啦上面提示的错误 !!!!! 经过分析 大家主要你的函数的名字要 不要超过13个字母或数字 void A ...… 查看全部问答> |
|
1. 系统设计与设备选型 a. 分析你所控制的设备或系统。PLC最主要的目的是控制外部系统。这个系统可能是单个机器,机群或一个生产过程。 b. 判断一下你所要控制的设备或系统的输入输出点数是否符合可编程控制器的点数要求。(选型要求) ...… 查看全部问答> |
|
apue 11-4中pthread_cleanup_push函数是如何清理的? 我在运行apue11-4的程序中运行通了,但是对函数不大理解,程序清单如下: #include \"apue.h\" #include void cleanup(void *arg) { printf(\"cleanup:%s\\n\",(char *)arg); } void thr_fn1(void *arg) { & ...… 查看全部问答> |
|
用了不少方法都不行 ExtractIcon编译不通过 GetClassLong失败 SendMessage(hwnd,WM_GETICON,(WPARAM)ICON_SMALL,0); 也是失败 用了这个帖子最后回复中的方法http://topic.eeworld.net/t/20061030/15/5119437.html 还是不行,该帖l ...… 查看全部问答> |
|
AT指令+CPBF查找电话本记录,对于查找汉字有点不明白 比如说电话本内有条记录是+CPBR: 2,\"13519154544\",129,\"5F207389\" 如果我想找到这条记录应该怎么写CPBF的参数呢 用超级终端测试的时候用AT+CPBF=\"5F20\"查找,如果AT+CSCS=\"GSM”,返 ...… 查看全部问答> |




