打印
[技术讨论]

32位单片机什么一个byte变量是不是也是占用4个字节空间?

[复制链接]
889|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaobq|  楼主 | 2022-2-8 14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
数码小叶| | 2022-2-8 19:29 | 只看该作者
共同体可以安排了

使用特权

评论回复
板凳
xch| | 2022-2-8 23:26 | 只看该作者
你怎么证明?

使用特权

评论回复
地板
bioe| | 2022-2-9 08:14 | 只看该作者
32位单片机,一个byte变量占用1个字节RAM。

使用特权

评论回复
5
hjl2832| | 2022-2-9 08:24 | 只看该作者
8位、16位、32位变量对应的还是一个字节、2个字节、4个字节,无关8位还是32位芯片,你可以在编绎后仿真去查看RAM内存中变量的地址分配来确认所占空间的长度。

使用特权

评论回复
6
QuakeGod| | 2022-2-9 09:28 | 只看该作者
一个8位变量确实是只占一个字节。字节一般也是处理器所能访问的最小单位(也就是对字节的修改,不涉及 读-修改-写 操作)。

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

另外,如果你定义的是字节数组(或者字符串),那么就可以完美的使用这个空间了。

使用特权

评论回复
7
mailshichao| | 2022-2-9 11:30 | 只看该作者
是不是某些地方涉及到字节对齐,所有没有节省空间

使用特权

评论回复
8
sxy4517| | 2022-2-9 11:53 | 只看该作者
#pragma pack(1)了解一下,可以帮你解决8为数据占用空间少的问题。

使用特权

评论回复
9
ayb_ice| | 2022-2-9 13:23 | 只看该作者
在结构内定义是有可能的,因为要对齐,如果本身是对齐的,不会占用4个字节,

使用特权

评论回复
10
XZL| | 2022-2-9 16:50 | 只看该作者
1个byte还是8位的

使用特权

评论回复
11
chunyang| | 2022-2-9 18:13 | 只看该作者
byte就是byte,长度为8位,与MCU内部处理器是几位无关。

使用特权

评论回复
12
lvyunhua| | 2022-2-9 19:23 | 只看该作者
路过学习了

使用特权

评论回复
13
江枫渔火| | 2022-2-9 23:02 | 只看该作者
你定义的基本数据类型的变量,所占用字节数就是按类型来的。
但是如果你是在结构体中定义的不同类型的变量元素,默认情况下,存储时会按照处理器位宽对齐(比如32位)。这在通信时,导致很多空字节数据(Pad)。所以通常需要在用于通信的数据结构,使用#pragma pack(1)来设定按1字节对齐。

使用较小长度的数据类型来定义变量,确实会减少内存占用。但是,却会降低数据访问效率。

使用特权

评论回复
14
dukedz| | 2022-2-10 03:25 | 只看该作者
chunyang 发表于 2022-2-9 18:13
byte就是byte,长度为8位,与MCU内部处理器是几位无关。

Ti 的 16 位的 dsp 的 byte 是 16bits,很噁心,後來堅決不用這個芯片了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

804

帖子

5

粉丝