本文档的主要内容详细介绍的是位域结构体变量在主流控制器ARM/DSP等编程时应该要注意那些事项
很多人搞电子软件编程的人都是从sram很紧缺的51单片机或其他低端单片机入门的。大家都知道,51单片机的有个可 bit寻址的空间,而对应的开发环境KEIL C51当然也支持bit变量。随着电子芯片产品的发展,现在的主控器林林种种,无论是 SRAM空间或者是COED空间,都有了相当大的提升,现在的sram动不动就几k,几十k。而51单片机的可位寻址功能没有得到继承,已经永久的成为古董。而在实际编程应用中,有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。比如很多的变量,特别是标志位,都不需要占用一个byte的空间。常见的如:只占用一bit的的bool变量(0或 1)。那么,假如不是51单片机编译环境,而又为了省SRAM存储空间,需要这种不足一个byte空间的变量,又怎么办呢?位域结构体派上用场了。位域结构体,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。
当然了,还有其他位域名和位域长度缺省的情况,具体代表什么意思,大家可参考其他资料,很多有说明的。
位域结构体变量的定义和调用同一般的结构体变量一样,估计大家都很熟悉,在这里不再多说了,而我想说的是,位域结构体无疑是可以为我们节省一些变量存储空间。但是,正因为现在很多主控器,比如DSP,ARM,和其他的高端单片机,都没有了可位寻址的区域,它们要实现这种类似位操作的数据结构,就需要将当前bit所在的byte进行位&,或者移位等操作。而这,撇开代码是否美观不管,就生成代码量多了,需要占用的CPU周期多了。换句话说,为了节省这个SRAM,代价是代码臃肿了,机器跑起来慢了。本人曾经在DSP和ARM的开发环境,测试过,的确如此。如何进行取舍呢?那就看具体的情况了,假如SRAM 紧张,CODE不紧张,慢几个机器周期也无所谓,那行,就用上它。假如都紧张,而且CPU很忙,不能再忙了,那么就只能来个折中取舍了,正所谓,鱼与熊掌不可兼得啊。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !