历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | 32位嵌入式系统的字节对齐

发布者:科技驿站 来源: 51hei关键字:32位  嵌入式系统  字节对齐 手机看文章 扫描二维码
随时随地手机看文章

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关键字!



关键字:32位  嵌入式系统  字节对齐 引用地址:32位嵌入式系统的字节对齐

上一篇:ARM处理器的节能优势
下一篇:stm32入门——跑马灯(基于stm32f103zet6)

推荐阅读

假设 系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到关键是设定 时钟预分频数,自动重装载寄存器周期的值/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中断服务程序间隔时间为时间=1/频率×次数((1+TIM...
当地时间10月9日,瑞典皇家科学院将2019年诺贝尔化学奖授予97岁的约翰·B·古迪纳夫、77岁的M·斯坦利·威廷汉与71岁的吉野彰,以表彰三人在锂电池领域做出的奠基、改造、优化等贡献。化学奖揭晓后,手机圈、新能源汽车圈等从业者纷纷公开致敬,雷军表示:“现在锂电池已经广泛应用,感谢这三位科学家在研发锂电池技术中的巨大贡献。”自从索尼1991年发售...
10月21日上午消息,距离iPhone 12和12 Pro正式发售还有三天时间,全球媒体已经放出了相关的评测内容,我们来汇总一下。  The Verge的Nilay Patel表示,由于iPhone 12现在具有跟Pro型号相同的OLED显示屏,因此iPhone 12和iPhone 12 Pro之间的差异“根本上比去年小得多”(去年的iPhone 11使用LCD材质屏幕)。除了OLED之外,这两款设备...
近日,越疆科技正式发布了国内首款自研六自由度力反馈主手Haptics 6D及遥操作系统Matrix.OS。据悉,该产品基于5G技术,达到了0.005mm位置分辨率,0.1N力反馈精度,4kHz触觉刷新率和60帧视频流畅度。深圳市越疆科技有限公司是机器人领域技术方案提供商,专注于“全感知”轻量型智能机械臂及其他智能硬件产品的研发、生产、销售及服务,包括机器人技术开...

史海拾趣

问答坊 | AI 解惑

RS-485网络故障查找与排除

作者:Mike Fahrion,B&B电子/ Vance VanDoren,CONTROL ENGINEERING编辑顾问     尽管更加现代化的替代技术日益增多,但RS-485技术仍然在无数的通信网络中保持着中流砥柱的地位。以下是检查常见故障和建立 ...…

查看全部问答∨

工作时选择北京、上海这样的大城市值不值

呆在北京到底好不好?这个问题我已经想过无数遍了,是在看着哥哥在家乡已经买了几套房、过着小老板的舒服生活之时,也是在看着弟弟工作在哪儿、房子就买在哪儿之时,还是在看着同学在家乡过着非常悠闲的生活、而且有着大房子住的时候。 毕业时那么 ...…

查看全部问答∨

请教,wince 关机图片如何修改?

请教,wince 关机图片如何修改?…

查看全部问答∨

关于vxworks的嵌入式开发

目标机是mips,操作系统使用vxworks,host pc使用tornado开发环境,如何将一个文件从PC下载到目标机?请高手帮忙,谢谢…

查看全部问答∨

如何在ATMAGE16L上写些测试程序

        第一次接触到单片机这块,前几天老师给了我一块带ATMAGE16L的开发板,上面只有一个JTAG接口,一个flash存储块,还有一个8兆的晶振元件(上面标有8.000,我对硬件不熟悉,不知道是不是这么称呼),要求我用8兆的晶振 ...…

查看全部问答∨

如何电源噪声的 抑制?

大家好,最近进行一个小电流信号的检测 大概nA pA级的,要求电源噪声一定要尽可能的小,请问电源如何选择,电源的噪音改如何抑制到最小,谢谢了!!!…

查看全部问答∨

C语言函数速查手册 0.5

C语言函数速查手册 0.5…

查看全部问答∨

看了几篇关于Flash问题的联想

看了几篇关于内置Flash的帖子,想起设计中可能利用上,但有些疑点想咨询一下: 1、内置的Flash可以保存数据(但帖子中都描述是烧录的时候保存为Const),不知道是否可以在程序运行期间进行数据的改写(不能是使用RAM哦)。 2、如果上面的方法 ...…

查看全部问答∨

多层线路板的设计规则

多层线路板设计规则…

查看全部问答∨

本人新入论坛,想自己DIY示波器 可是感觉无从下手求帮助

本人新入论坛,想自己DIY示波器 可是感觉无从下手求帮助,暂时懂模电 数电,单片机只会飞思卡尔公司的mc9s12xs128和kinetis 60。。。。。。求大神给点入门的资料或者心得什么的 谢谢了。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved