单片机开发规划,怎么经过指针对16位数进行操作-电子发烧友网

|
在8位单片机中没有16位数的操作指令,一切的int型数据都要经过两个字节分隔操作,运用的办法不必,生成的代码也不相同,当然功率也不一样,经过指针对16位数进行操作能够得到高效的代码。

比方经过串行口接纳数据,或许从串行的EEPROM中读取的数据,或许从大于8位的A/D读取的数据,因为8位单片机的数据线是8位的,高于8位的数据都要分红两个字节别离读取,然后写入到RAM中去再进行核算,或许把16位的int型数据从RAM中读出再别离把凹凸字节存到EEPROM或许送到D/A,或许经过串行口发送出去,办法有很多种,下面用多种办法进行完成该操作,这儿只演示写入到16位的状况,读取的状况十分类似,不赘述。

运用联合

typedef union{unsigned int i;unsigned char c[2];}u_int;unsigned char dH = 0x11, dL=0x22;unsigned int d;u_int ud;ud.c[0] = dH;ud.c[1] = dL;d = ud.i;此刻d = 0x1122;

运用移位指令

数据界说与前面相同d = dH) 或许d = dH;d d |= dL; // or: d = d | dL; 后者编译的代码可能不是最简的

运用指针

unsigned char *cptr;cptr = 强制指针类型变换

*) = dH;*+1) = dL;或)[0] = dH;)[1] = dL;

这两种办法看似相同但由Keil编译出的代码是不必的,前都有一次加法运算,而后者没有,后者生成的代码更简练,这种办法与用联组成生的代码是彻底一样的。

在这几种办法中第与第的第二种生成的代码是最乘洁的,是引荐运用的,从软件工程的视点动身,引荐运用办法,这样没有强制类型变换,没有用到指针,更不简单犯错。从书写的代码来讲,第的第二种办法是最好的,代码简练并且功率最高,但语法有点儿杂乱。

请尊重我们的辛苦付出,未经允许,请不要转载ca88亚洲城【官】_电子爱好者网的文章!
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"1","bdSize":"32"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
上一篇:华为在温哥华主办私人AI Confab
下一篇:TTL和CMOS电平别傻傻分不清