在8位单片机中对16位INT型数据的操作
(1)使用联合 (union)
typedef union{
}u_int;
u_int ud;
ud.c[0] = dH;
ud.c[1] = dL;
d = ud.i;
此时d = 0x1122;
(2) 使用移位指令
数据定义与前面相同
d = ((unsigned int)dH)<8 +
或者
d = dH;
d <= 8;
d |= dL;
(3)使用指针
unsigned char *cptr;
cptr = (unsigned char*)(&d);
cptr[0] = dH;
cptr[1] = dL;
(4)强制指针类型转换
*((unsigned char*)(&d)) = dH;
*((unsigned char*)(&d)+1) = dL;
或
((unsigned char*)(&d))[0] = dH;
((unsigned char*)(&d))[1] = dL;
这两种方式看似相同但由Keil编译出的代码是不用的,前都有一次加法运算,而后者没有,后者生成的代码更简洁,这种方式与用联合成生的代码是完全一样的,
在这几种方法中第(1)与第(4)的第二种生成的代码是最乘洁的,是推荐使用的,从软件工程的角度出发,推荐使用方法(1),这样没有强制类型转换,没有用到指针,更不容易出错。从书写的代码来讲,第(4)的第二种方法是最好的,代码简洁而且效率最高,但语法有点儿复杂。
单片机16位INT型数 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)