32位嵌入式系统的软件开发过程中,字节对齐问题是相当重要的。我们现在就拿ARM处理器和ADS1.2开发环境作为例子说明字节对齐的概念。
在此之前,我先声明几个基本的概念:
(1)、对象:在C语言中使用结构体类型、共同体类型、或内部基本类型所定义的变量或常量,就称为对象。对象占据了一块实际的存储器空间,这块空间有固定的起始地址和字节数。
(2)、引用:使用对象有两种方法:“对象名”和“引用”。当你在源代码中定义一个对象时,编译器就会为它分配一块存储器,此时你就可以使用“对象名”来操作该对象。但是对于程序运行时动态分配的某一块存储器空间(对象),你就没法使用“对象名”了,而只能使用“引用”,所以,“引用”就是指向特定类型的对象的指针。
好了,我们转入正题。
在32位嵌入式系统中,单字节对象是1字节对齐的;双字节对象是2字节对齐的;四字节对象是4字节对齐的;其它结构体或共同体对象是8字节对齐的。也就是说,当你定义一个单字节对象时,该对象的起始地址可以是任何整数;当你定义一个双字节对象时,该对象的起始地址必定是2的倍数的整数;当你定义一个四字节对象时,该对象的起始地址必定是4的倍数的整数;当你定义一个结构体或共同体对象时,该对象的起始地址必定是8的倍数的整数。以上说的对象包括“结构体或共同体对象的成员对象”。
字节对齐的故障只能出现在“引用”的使用过程中。当你使用“对象名”来操作对象时,根本不用担心字节对齐问题。
在ADS环境下,有“ALIGN” 、“__align(x)” 、“__packed”关键字用于字节对齐处理。ALIGN用于汇编语言,__align(x)用于C语言,__packed用于放弃字节对齐。
单字节对齐类型的引用可以操作任何对象,双字节对齐类型的引用可以操作双字节、四字节、八字节对齐的对象,…………。只有遵守这个规则,你的程序才可能是健壮的。
如果你确实想使用双字节对齐类型的引用来操作单字节对齐对象,那么你在定义该引用时必须使用__packed关键字!
上一篇:ARM处理器的节能优势
下一篇:stm32入门——跑马灯(基于stm32f103zet6)
推荐阅读
史海拾趣
ADPOW公司成立于XXXX年,初期是一个小型电子技术研发团队。创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,带领团队专注于电源管理技术的研发。经过数年的不懈努力,团队成功开发出一款高效、稳定的电源管理芯片,这一技术突破为ADPOW公司后续的发展奠定了坚实的基础。
为了进一步扩大市场份额和提升竞争力,Axon' Cable公司开始实施全球化战略。公司在全球范围内设立了多个生产基地和研发中心,积极开拓国际市场。同时,Axon' Cable还加强了与国际知名企业的合作,共同推动技术创新和产业升级。这些举措使得Axon' Cable的产品在全球范围内得到了广泛应用,公司的国际影响力也逐步提升。
随着市场的不断变化和竞争的加剧,BEL并未满足于现状,而是积极寻求多元化发展。公司不仅拓展了原有的军事电子领域,还涉足电信、运算、公共运输和广播等多个行业。同时,BEL还积极拓展全球市场,将产品出口到多个国家和地区,实现了从区域性企业向全球性企业的跨越。
面对电子行业日益激烈的竞争环境,HANBIT Electronics深刻认识到供应链整合的重要性。2015年,公司启动了全面的供应链优化项目,通过引入先进的ERP系统和自动化生产设备,实现了生产流程的数字化和智能化改造。同时,公司加强与上下游合作伙伴的沟通与协作,建立了稳定的供应链体系。这一举措不仅提高了生产效率和产品质量,还有效降低了库存成本和运营风险。
面对电子行业日益激烈的竞争环境,HANBIT Electronics深刻认识到供应链整合的重要性。2015年,公司启动了全面的供应链优化项目,通过引入先进的ERP系统和自动化生产设备,实现了生产流程的数字化和智能化改造。同时,公司加强与上下游合作伙伴的沟通与协作,建立了稳定的供应链体系。这一举措不仅提高了生产效率和产品质量,还有效降低了库存成本和运营风险。
作者:Mike Fahrion,B&B电子/ Vance VanDoren,CONTROL ENGINEERING编辑顾问 尽管更加现代化的替代技术日益增多,但RS-485技术仍然在无数的通信网络中保持着中流砥柱的地位。以下是检查常见故障和建立 ...… 查看全部问答∨ |
呆在北京到底好不好?这个问题我已经想过无数遍了,是在看着哥哥在家乡已经买了几套房、过着小老板的舒服生活之时,也是在看着弟弟工作在哪儿、房子就买在哪儿之时,还是在看着同学在家乡过着非常悠闲的生活、而且有着大房子住的时候。 毕业时那么 ...… 查看全部问答∨ |
第一次接触到单片机这块,前几天老师给了我一块带ATMAGE16L的开发板,上面只有一个JTAG接口,一个flash存储块,还有一个8兆的晶振元件(上面标有8.000,我对硬件不熟悉,不知道是不是这么称呼),要求我用8兆的晶振 ...… 查看全部问答∨ |
|
看了几篇关于内置Flash的帖子,想起设计中可能利用上,但有些疑点想咨询一下: 1、内置的Flash可以保存数据(但帖子中都描述是烧录的时候保存为Const),不知道是否可以在程序运行期间进行数据的改写(不能是使用RAM哦)。 2、如果上面的方法 ...… 查看全部问答∨ |
|
本人新入论坛,想自己DIY示波器 可是感觉无从下手求帮助,暂时懂模电 数电,单片机只会飞思卡尔公司的mc9s12xs128和kinetis 60。。。。。。求大神给点入门的资料或者心得什么的 谢谢了。… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 信通院:10月国内5G手机出货1676万部,连续5个月占比超过60%
- 大族激光:核心部件自产率超90%,光刻机项目小批量销售
- NetApp ONTAP数据管理软件,助力企业加快数字化转型步伐
- Nordic低功耗蓝牙传感器持续监测吉他温湿度,提供高效保护
- 福禄克携最新产品亮相2020进博会助力中国新基建
- Credo 光DSP再添新成员:Seagull 110和Seagull XR8
- 英特尔CEO预测:到2030年,芯片将占高端汽车BOM的20%以上
- Mobileye:开出车库,上路驰骋
- 丰田汽车:将投入90亿美元在全球各地建造电动汽车电池厂
- Mobileye与SIXT计划推出全新自动驾驶出租车服务