EDN博客精华文章 作者:stylist
在进行C语言程序设计,常常需要进行数据转换,例如将4个8BIT的数据组合成1个32BIT,或者将32BIT的数据拆分成4个8BIT的数据。在汇编语言这些都很简单,在C语言中常用到的方法是移位,加,乘等方法。在IAR EW430编译环境下,用MSP430作低功耗设计,在数据转换时能否象汇编一样轻松呢,节省指令条数来提高系统运行效率进一步节省功耗,能否象汇编一样来完成数据转换,节省指令运行周期,我采取了如下的方法:
1)4个8BIT组合成32BIT:

2)32BIT拆分成4个8BIT:

但上面的方法有一定的局限性,当变量存放在RAM中,地址为奇数时会发生转换错误,
如:若mathData 存放地址为奇数

则转换结果 var = 0x33221100,当变量存放在RAM中地址为偶数,或变量存于寄存器中时操作正确。具体原因与MSP430中硬件有关。利用MSP430 IAR EW430 优化,局部变量是存放于寄存器中,所以是可以正确完成数据转换的。
若移植到其他单片机上,还要考虑到存储器结构等硬件因素。
各位网友,在这方面你们又有什么高招呢?