• 29
  • 6月

想用IAR的C语言来该问一下LONG型变量的4个Byte,版本是IAR720H的。

最初,按照最直观的写法,用这种方法来进行访问:
(unsigned char)(num)<br />
(unsigned char)(num>>8)<br />
(unsigned char)(num>>16)<br />
(unsigned char)(num>>24)


编译,查看lst文件。what??这是什么呀!!
居然出现了?UL_SHR。
你还真去右移了呢?

接下来,换用第二种方式:
((unsigned char *)&num)[0]<br />
((unsigned char *)&num)[1]<br />
((unsigned char *)&num)[2]<br />
((unsigned char *)&num)[3]


这下,问题更大了。
什么DPTR都来了。这个更夸张。

差点都想自己写汇编算了。

最后经过了许多实验,总算把方法试出来了。

可以定义以下的宏:
#define     BYTE0(n)            ((unsigned char)(n))<br />
#define     BYTE1(n)            ((unsigned char)((n)>>8))<br />
#define     BYTE2(n)            ((unsigned char)(((unsigned short)((n)>>8))>>8))<br />
#define     BYTE3(n)            ((unsigned char)(((unsigned short)((n)>>16))>>8))


以后就可以直接用BYTE0 ~ BYTE3来进行LONG型变量的按BYTE来访问了。

» Tags:IAR

» 这篇文章只有1条评论,你可以在文章底部留下你的评论

  1. Trace Says:
    2012-02-12 12:06

    我喜欢,顶一个!

发表评论