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位嵌入式系统的字节对齐
推荐阅读最新更新时间:2024-11-10 15:49
超恩推出EAC-2000系列NVIDIA Jetson Xavier NX无风扇嵌入式系统 可改善车辆间的通讯
7月20日,嵌入式专家团队超恩(Vecow)推出全新无风扇嵌入式系统EAC-2000系列。该系列由NVIDIAJetson Xavier NX模块提供支持,外型小巧且具有出色能效。EAC-2000系列可支持-25°C至70°C的工作温度、9V至50V的宽范围直流输入,以及与Fakra-Z连接器相关联的GMSL(Gigabit Multimedia Serial Link,千兆多媒体串行链路)技术。此外,该系列还易于部署在AI视觉和工业应用,包括交通视觉、智能监控、自动光学检测、智能工厂、AMR/AGV以及任何AIoT(人工智能物联网)/工业4.0应用。 (图片来源:超恩) 基于全新NVIDIA Jetson Xavi
[汽车电子]
基于ARM的FPGA嵌入式系统实现
ARM(Advanced RISC Machines)既可以认为是一个公司。也可以认为是对一类微处理器的统称,还可以认为是一项技术。基于ARM技术的微处理器应用约占据了32位 RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到人们生活的各个方面 。到目前为止,ARM微处理器及技术已经广泛应用到各个领域,包括工业控制领域、网络应用、消费类电子产品、成像和安全产品等。 FPGA(Field Programmable Gate Array)是一种高密度现场可编程逻辑器件,其逻辑功能是通过把设计生成的数据文件配置到器件内部的静态配置数据存储器(SRAM)来实现的。FPGA具有可重复编程性,能灵活实现各种逻辑功能。 基于
[单片机]
C语言嵌入式系统编程修炼之五:键盘操作!
处理功能键 功能键的问题在于,用户界面并非固定的,用户功能键的选择将使屏幕画面处于不同的显示状态下。例如,主画面如图1: 图1 主画面 当用户在设置XX上按下Enter键之后,画面就切换到了设置XX的界面,如图2: 图2 切换到设置XX画面 程序如何判断用户处于哪一画面,并在该画面的程序状态下调用对应的功能键处理函数,而且保证良好的结构,是一个值得思考的问题。 让我们来看看WIN32编程中用到的 窗口 概念,当消息(message)被发送给不同窗口的时候,该窗口的消息处理函数(是一个callback函数)最终被调用,而在该窗口的
[单片机]
瑞萨全新32位RA4M3微控制器,可扩展存储并实现低功耗
全球半导体解决方案供应商瑞萨电子集团宣布,推出全新32位RA4M3微控制器(MCU)产品群,扩展其RA4 MCU产品家族。RA4M3 MCU采用基于Armv8-M架构的Arm® Cortex®-M33内核,将运行速度提升至100MHz。RA4M3产品群拥有高性能、Arm TrustZone®技术、瑞萨安全加密引擎以及可扩展存储,便于开发安全可靠的物联网(IoT)边缘设备,适用于低功耗应用,如安全、计量、工业和暖通空调等。 瑞萨电子物联网及基础设施事业本部高级副总裁Roger Wendelken表示:“自今年10月我们推出RA6M4 MCU产品群以来,我对于瑞萨RA产品家族的迅速扩展感到十分高兴。RA6M4的目标应用要求高
[嵌入式]
STM32嵌入式系统设计的智能控制网络终端技术
本文重点介绍基于STM32的智能嵌入式终端的网络控制功能的设计和实现。 智能网络终端是实现智能化管理的嵌入式终端设备。通常具有安全门禁系统和自动化控制的基本功能。 1智能网络通信实现方案 将嵌入式系统与Internet连接起来实现远距离信息获取和控制功能的本质是嵌入式系统本身能够实现TCP/IP网络通信协议。该协议的解决方案总体上可分为两大类。第一类是直接在嵌入式设备上实现TCP/IP,使之直接连上Internet。这实质上是由MCU及内部固化TCP/IP协议的芯片组成应用系统的核心,MCU可以直接拨号上网,这种方法的硬件电路相对简单,也不需要中间环节的支持。但是由于使用了TCP/IP协议芯片,因此需要大容量的程序
[单片机]
物联网嵌入式系统日趋重要
作者:Tom Trill 如今,Spansion 宣布推出了用于工业领域的微控制器,即基于ARM Cortex-M 处理器的Spansion FM 微处理器(MCU)家族(通用内核微处理器)。这些高度可扩展的MCU是一系列新的处理器,能够实现类型多样的特定应用处理解决方案。本次推出的新产品家族面向的是工业客户,Spansion则认为本次发布的新品能将其市场从传统工业应用领域——如智能电表到血糖测量仪,大幅扩展到 “物联网”。近期的Forrester研究博客讨论了“物联网”或其在2001年所宣称的“某联网”,尽管这些概念还未实现,不过消费类市场和一般的商业应用已经开始起步。 一切都会实现互联,而不仅仅是“物品”被连到一起,或是
[物联网]
浅谈你不知道的STM32知识
STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,受到广大嵌入式开发者的喜欢,但要想学好用好STM32也并非易事,毕竟,相比8位、16位产品,STM32要复杂得多。 STM32的时钟 众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实它只有四个,因为从下图中可以看到PLL都是由HSI或HSE提供的。 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默
[单片机]
基于SEP0611的电源管理驱动设计方案
系统休眠是嵌入式系统除关机外最省电的一种状态。休眠(Suspend, STR (Suspend To RAM )),又称为挂起或者挂起到内存,会将目前的运行状态数据存放在内存,并关闭硬盘、外设等设备,进入等待状态,此时除了内存仍然需要电力维持其数据,整机其余部分耗电很少。
恢复时处理器从内存读出数据,回到挂起前的状态,恢复速度较快。一般在电池无故障且充满电的情况下可以维持这种状态数天之久。
1 SEP0611和电源管理单元硬件设计
SEP0611是东南大学自主研发的一款基于UniCore32内核的32位高性能、低功耗RISC微处理器,是定位于手持播放设备、卫星导航产品的高性能处理器。主要分为五个部分:系统与时钟控制、外
[电源管理]