简介:微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑,一般都要求尽量节省使用资源,并且,由于微处理器硬件一般都不支持有符号数、浮点数的运算,且运算位有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常是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的声明
关键字:C语言来 MSP430 高质量代码
引用地址:
怎样使用C语言来编写MSP430的高质量代码
推荐阅读最新更新时间:2024-11-13 11:27
初学MSP430F5529定时器
之前一直感觉定时器有点难,但其实后来发现更多的是中断那块没太懂,中断以后会说的。先简单看下定时器吧。 一、基本 1.在user’s guide上看到的5529其实有3种定时器,ABD,这三种好像确实有些区别的,但是目前就只看A感觉就够了。 2.Timer_A是具有四种操作模式的16位定时器,7个比较器/捕获器 3.能够输出PWM波,具有8中PWM波形,但是要注意的是,这种输出只能在外围功能模块里使用,即之前说过的SEL。比如P1.2能够输出Timer_A0的比较器/捕获器1的波形,而在其他管脚上,就没有办法直接输出这种PWM波形。所以如果这个管脚被占用的话,或是不想用这个来整,其实用中断做PWM波也挺好用的。 4.能实现串行通
[单片机]
MSP430多处理器之间的通信方式及协议
在单片机系统中,多处理器是指多个相同类型或者不同类型的单片机协作处理同一个系统的不同工作。它们之间必须具备一定的数据交换和协作处理能力,共同完成一个系统化的工作。不同处理器之间可以采用数据交换方式、并行总线方式、串行总线方式进行通信。其中,数据交换方式又可以称为共享内存交换方式;串行总线方式又可以分为单总线方式、集成电路之间的通信方式和UART方式。 1 MSP430多处理器 MSP430是一款超低功耗的混合信号控制器,具有1 6位RISC结构,有着丰富的片内外设,主要包括有看门狗、定时器、比较器、硬件乘法器、液晶驱动器、ADC、I/0端口、串口(USART)等等,还集成有64 KB的Flas’E-ROM和2 KB的RAM。其
[单片机]
MSP430在单电池供电的LED照明中的应用电路
便携式设备常采用单节的碱性电池供电,亦称作单电池供电。而LED 是发光二极管的简称,由于其省电、寿命长和开关速度快等特点,正被广泛应用到照明领域;而部分照明设备如自行车运动爱好者的车灯、头灯以及特殊要求手电筒等又要求能够便携以便于移动,所以对系统的功耗即电池的寿命有着严格的要求。本文针对低功耗、便携以及较低系统成本LED 照明的要求,基于超低功耗单片机MSP430 以及升压转换器TPS61200,设计并完成单电池供电的LED 照明应用。 LED 驱动电路模块 对于单节电池供电的LED 照明设备,首先要选用升压芯片为LED 提供电源以保证LED 的正常导通。这里我们选用了TPS61200,其工作电压为0.3~5.5V
[电源管理]
MSP430之共用体中结构体字节对齐问题
先上代码: 我所用的平台的字节对齐默认是2字节,下面////////之间的变量定义为7个字节,为了保证2字节对齐,Power变量就会自动扩展一个字节,但是变量类型又是一个字节,所以发生了字节偏移的情况。 typedef union _PARARW{ struct{ UINT8 Name ; /////////////////////////////// UINT8 Read; UINT8 Start; UINT8 Stop; UINT8 Alarm; UINT8 Unit; // UINT8 Nothing;//字节对齐填充 UINT8 Display; UINT8 Power; ///
[单片机]
MSP430时钟配置
大家都知道MSP430是一款低功耗的单片机,超低功耗一直都是MSP430系列单片机的口号,为了适应各种功耗要求,比如在用电池供电的场合下,对于功耗是个严峻的挑战,所以MSP430单片机可以配置3种时钟振荡器,这3种时钟振荡器分别为:低频时钟源LFXT1CLK、高频时钟源XT2CLK、数字控制RC振荡器DCOCLK。其中DCOCLK是在单片机内部,实际上就是RC振荡器,并且可编程。配置在保持默认时,时钟频率大概在1MHz左右(这个是实际测试出来的),规格书有的讲在800KHz左右。在MSP430的时钟模块就有3个,分别为:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK。 下面我来看这3个时钟模块的时钟源可以来自于哪些
[单片机]
MSP430模拟串口程序
我用413模拟串口收发数据,只能接收单个字节,用串口助手调试时发现413发送给PC机的字节不正确。 比如串口助手发0xaa给413,413接收后把0xaa发送回给PC机,但是串口助手接收到的是0x00或其他数据, 为什么?怎样才能实现一串数据的收发正确? 程序如下(晶振是32768,接413的8和9脚): #include msp430x41x.h #define RXD 0x0002 // RXD on P1.1 #define TXD 0x0002 // TXD on P2.1 #define RS485 0x0001 //enable 485 on P2.0 // Conditions for 2400 Ba
[单片机]
菜鸟零基础学电子之从屌丝向高富帅的第一步
51单片机是每位电子工程师,最先接触到的单片机(至少我认识的都是,也不排除有高人),很多大神认为51即将完成它的历史使命,但是个人觉得,它简单的操作,是新童鞋用来入门的不二之选。它的价格低廉,一碗刀削面的价格,再加上它的资料非常多,最为代表性的是郭天祥老师的教程《教你十天学会单片机》 。童鞋们要意识到51单片机是作为步入电子世界的第一个台阶。 如果你现在还在热衷于用51单片机做小车、驱动LED、做电源,那么你已经OUT了,如果你坚持要把51用到资源耗尽再转型,那屌丝之路还有很长一段要走。你要果断放弃使用51单片机向高富帅迈出第一步,MSP430单片机,个人认为是学单片机的第二个台阶,现在我就来告诉你为什么。 1. MSP430F
[单片机]
基于MSP430F149的电力操作电源智能电池巡检系统的设计
引言 电力操作电源监测系统是随着电力系统自动化运行而产生的,该系统可以对变电站中的交流供电电源、直流控制电源、备用操作电源以及开关状态等进行参数监测、故障报警等操作。从而及时地发现电力系统的异常情况,提前做好防范以保证电力系统连续可靠地运行。同时,当电力系统出现故障时为继电器以及断路器等二次设备提供备用操作电源,对设备进行保护。 电池巡检仪是备用电源的检测装置,主要的功能是对单体电池的电压、温度、容量等参数进行检测,提供充电控制以及故障报警等功能,从而可以合理地控制电池,延长电池使用寿命,提高系统的可靠性。 电源监控系统起步于80年代末,当时它只能监控一个独立的直流供电系统或一个局(站),且电源监控水平不高,可靠性
[单片机]