您的位置 首页 IC

在嵌入式C语言中该怎么运用结构

在嵌入式C语言中该如何使用结构-我们通常将内存设想为单字节存储位置的集合。每个位置都有一个唯一的地址,允许我们访问该地址的数据。但是,处理器通常以大于一个字节的块形式访问内存。例如,处理器可以以四字节块的形式访问内存。

咱们一般将内存设想为单字节存储方位的调集。每个方位都有一个仅有的地址,答应咱们拜访该地址的数据。可是,处理器一般以大于一个字节的块办法拜访内存。例如,处理器能够以四字节块的办法拜访内存。

你或许想知道这两种处理内存的办法之间有什么区别。处理器一次读取一个字节并向内存写入。请注意,在读取内存方位或写入内存之前,咱们需求拜访该内存单元,而且每次内存拜访都需求一些时刻。假定咱们想要读取图1中存储器的前八个字节。关于每个字节,处理器需求拜访内存并读取它。因而,为了读取前八个字节的内容,处理器将有必要拜访内存八次。

处理器一次读取4个字节并将其写入内存。因而,为了读取前四个字节,处理器拜访存储器的地址0并读取四个接连的存储方位(地址0到3)。相同,要读取下一个四字节块,处理器需求再次拜访内存。它转到地址4并一起从地址4到7读取存储方位。

在嵌入式C言语中该怎么运用结构

关于字节巨细的块,需求8次内存拜访来读取接连8个字节的内存。只需求两次内存拜访。如上所述,每次内存拜访都需求一些时刻。存储器装备减少了拜访次数,因而能够进步处理功率。处理器在拜访内存时运用的数据巨细称为内存拜访粒度。

硬件规划人员常常选用另一种重要技能来进步处理体系的功率:它们约束处理器,使其只能在某些鸿沟拜访内存,处理器或许仅能够在四字节鸿沟上。

这种鸿沟约束会使体系明显进步功率吗?细心看看。假定咱们需求读取地址为3和4的内存方位的内容。假如处理器能够从恣意地址开端读取一个四字节的块,那么咱们能够拜访地址3并经过单个内存拜访读取两个所需的内存方位。可是,如上所述,处理器不能直接拜访恣意地址;相反,它只在某些鸿沟拜访内存。那么假如处理器只能拜访四字节鸿沟,它将怎么读取地址3和4的内容?

由于内存拜访鸿沟约束,处理器有必要拜访地址为0的内存方位并读取接连的四个字节(地址0到3)。接下来,它有必要运用移位操作将地址3的内容与其他三个字节(地址0到2)分隔。类似地,处理器能够拜访地址4并从地址4到7读取另一个四字节块。最终,能够运用移位操作将所需字节(蓝色矩形)与其他三个字节分隔。

假如没有内存拜访鸿沟约束,能够用一个内存拜访读取地址3和地址4。可是,鸿沟约束迫使处理器两次拜访存储器。那么,假如数据操作变得愈加困难,为什么需求约束对某些鸿沟的内存拜访呢?内存拜访鸿沟存在约束,由于对地址进行某些假定能够简化硬件规划。例如,假定一个内存块中的一切字节都需求32位来寻址。假如将地址约束为四字节鸿沟,那么32位地址中的两个最低有用位将一直为零(由于地址一直能够被4整除)。因而,咱们能够运用30位来寻址一个232字节的内存。

例如,考虑一个具有四字节内存拜访粒度的处理器,它只能以四字节鸿沟拜访内存。假定一个四字节变量存储在地址1,在这种情况下,咱们需求两次内存拜访和一些额定的作业来读取未对齐的四字节数据(“未对齐”指它被分红两个四字节块)。

可是,假如将一个四字节变量存储在4的倍数的任何地址,只需求一个内存拜访来修正数据或读取数据。所以将K字节数据类型存储在K的倍数的地址能够进步体系的功率。因而,C言语“char” 变量(只需求一个字节)能够存储在任何字节地址,可是一个双字节变量有必要存储在偶数地址中。

在嵌入式C言语中该怎么运用结构

四字节类型有必要从可被4整除的地址开端,而且八字节数据类型有必要存储在可被8整除的地址。例如,假定在特定机器上,“short”变量需求两个字节,“int ”和“float” 类型占用四个字节,“long ”、“double”指针占用八个字节。这些数据类型中的每一种一般应具有K的倍数的地址,其间K由下表给出。

请注意,不同数据类型的巨细或许因编译器和计算机体系结构的不同而不同。sizeof()运算符是查找数据类型实践巨细的最佳办法。

咱们知道将分配四个内存方位来存储结构中的成员,而且内存方位的次序将与声明成员的次序相匹配。第一个成员是一个单字节变量,能够存储在任何地址。因而,第一个可用存储方位将分配给此变量。编译器为此变量分配地址0。下一个成员是一个四字节数据类型,只能存储在4的倍数地址。第一个可用的存储方位是地址4。可是,这需求不运用地址1、2和3。如你所见,数据对齐要求会导致内存布局中呈现一些糟蹋空间(或填充)。

下一个成员是e,它是一个单字节变量。第一个可用的存储方位分配给此变量。接下来,咱们抵达f,这是一个双字节变量。它能够存储在可被2整除的地址。第一个可用空间是地址10。如你所见,为了满意数据对齐要求,将呈现更多的填充。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/98489.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部