[技术讨论] 32位单片机什么一个byte变量是不是也是占用4个字节空间?

[复制链接]
1699|13
 楼主| gaobq 发表于 2022-2-8 14:56 | 显示全部楼层 |阅读模式
32位单片机,处理字长是32位数,编程时,定义一个8位、16位、32位变量,均占用一个word,32位长?除了数据大小受限外,起不到节省空间的作用?
数码小叶 发表于 2022-2-8 19:29 | 显示全部楼层
共同体可以安排了
xch 发表于 2022-2-8 23:26 | 显示全部楼层
你怎么证明?
bioe 发表于 2022-2-9 08:14 | 显示全部楼层
32位单片机,一个byte变量占用1个字节RAM。
hjl2832 发表于 2022-2-9 08:24 | 显示全部楼层
8位、16位、32位变量对应的还是一个字节、2个字节、4个字节,无关8位还是32位芯片,你可以在编绎后仿真去查看RAM内存中变量的地址分配来确认所占空间的长度。
QuakeGod 发表于 2022-2-9 09:28 | 显示全部楼层
一个8位变量确实是只占一个字节。字节一般也是处理器所能访问的最小单位(也就是对字节的修改,不涉及 读-修改-写 操作)。

但是这里涉及到一个变量对齐的问题。32位处理器,一般都是32位对齐的。
如果你定义了一个8位的字节变量,但是后面又定义了一个32位的变量,
这时候,因为32位变量要对齐4字节边界,所以前面那个字节变量省下的3个字节是不能用的。
除非你字节变量后面又定义了一个字节变量,才能用上这个省出来的空间。
也就是要合理安排变量的顺序。这个在我们学C语言的时候,应该都是学过了的。

另外,如果你定义的是字节数组(或者字符串),那么就可以完美的使用这个空间了。
mailshichao 发表于 2022-2-9 11:30 | 显示全部楼层
是不是某些地方涉及到字节对齐,所有没有节省空间
sxy4517 发表于 2022-2-9 11:53 | 显示全部楼层
#pragma pack(1)了解一下,可以帮你解决8为数据占用空间少的问题。
ayb_ice 发表于 2022-2-9 13:23 | 显示全部楼层
在结构内定义是有可能的,因为要对齐,如果本身是对齐的,不会占用4个字节,
XZL 发表于 2022-2-9 16:50 | 显示全部楼层
1个byte还是8位的
chunyang 发表于 2022-2-9 18:13 | 显示全部楼层
byte就是byte,长度为8位,与MCU内部处理器是几位无关。
lvyunhua 发表于 2022-2-9 19:23 | 显示全部楼层
路过学习了
江枫渔火 发表于 2022-2-9 23:02 | 显示全部楼层
你定义的基本数据类型的变量,所占用字节数就是按类型来的。
但是如果你是在结构体中定义的不同类型的变量元素,默认情况下,存储时会按照处理器位宽对齐(比如32位)。这在通信时,导致很多空字节数据(Pad)。所以通常需要在用于通信的数据结构,使用#pragma pack(1)来设定按1字节对齐。

使用较小长度的数据类型来定义变量,确实会减少内存占用。但是,却会降低数据访问效率。
dukedz 发表于 2022-2-10 03:25 | 显示全部楼层
chunyang 发表于 2022-2-9 18:13
byte就是byte,长度为8位,与MCU内部处理器是几位无关。

Ti 的 16 位的 dsp 的 byte 是 16bits,很噁心,後來堅決不用這個芯片了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

831

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部