原创 IAR C编译环境下数据转换的新方法

2010-4-4 15:41 2240 2 2 分类: MCU/ 嵌入式

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


  temp0[3] = varHigh;
  temp0[2] = varHighM;
  temp0[1] = varLowM;
  temp0[0] = varLow;
 
  temp = *(unsigned long int *)temp0;


2)32BIT拆分成4个8BIT:
   unsigned char mathData[4];
   unsigned long int var;
  
   *(unsigned long int *)mathData = var;  


但上面的方法有一定的局限性,当变量存放在RAM中,地址为奇数时会发生转换错误,
如:若mathData 存放地址为奇数
    mathData[0] = 0x11;
    mathData[1] = 0x22;
    mathData[2] = 0x33;
    mathData[3] = 0x44;
则转换结果 var = 0x33221100,当变量存放在RAM中地址为偶数,或变量存于寄存器中时操作正确。具体原因与MSP430中硬件有关。利用MSP430 IAR EW430 优化,局部变量是存放于寄存器中,所以是可以正确完成数据转换的。
若移植到其他单片机上,还要考虑到存储器结构等硬件因素。
各位网友,在这方面你们又有什么高招呢?

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /3 下一条