This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
您好、
我创建了一个包含字符元素127裸体的全局缓冲区。 我已经尝试用128字节的数据填满它。 我本来期待缓冲区溢出、但实际上并没有发生、直到我没有将缓冲区缩小到126个元素。 是否仅限于在存储器中每两个字节进行这些更改? 我想进一步了解这种行为。
感谢您的答复。
您如何判断它没有溢出? 我的猜测是它确实溢出了、但您的代码没有注意到。
全局变量不一定彼此相邻分配-之间通常有对齐填充字节。
[编辑:轻微澄清]
我已经使用了 CCS 存储器浏览器、在函数调用后设置了制动点。 我注意到我的变量有一个名称、而不是所有数据。 这就是我注意到的变化。 我知道可能有填充字节、但它们未显示在"Memory Browser"中? 我的意思是、当我将大小设置为大约两个向上时、可以看到两个初始化为00 00的单元格。 但当我递减1时、两者都将消失。 这就是为什么我要求在某些类型的内存中使用它们可以用字而不是字节来写入。 此外、我一直将这些数据写入闪存。
我认为填充字节也会在闪存中或不? 因为我一直在写入闪存71字节、缓冲区只有70。 我没有注意到任何额外的字节。
填充字节的值应该是多少?
我认为未指定填充字节的内容、 但通常是0x00。 您可以在"Memory Browser"中看到它。
如果您将71个字节(可能的70个字节中)写入闪存、则最终字节将是存储器中缓冲区之后的任何内容、它可能是以下变量或填充字节。 您可以从.map 文件中找到。
好的、谢谢、我认为我可以看到 使用#pragma align 也可以修改填充。 我在修改其中的值时注意到了0x00。 我想问、默认值是多少? 因为我没有将 pragma 放入上面的示例中、但仍然以某种方式对齐。 我还可以看到.map 文件中未初始化变量的长度、如上所述、仅当大小为偶数组的大小为奇数时、该值大于由0x00填充的值才会发生变化。 我可以假设默认对齐为2吗?
填充字节取决于后续变量的对齐方式。 CC User Guide (SLAU132Y)中对此进行了介绍;由于存在一些不同的表、因此请搜索"alignment"(对齐)。
链接器还可以在段之间插入对齐填充。
感谢 Bruce 的澄清。
您好、Peter:
我会暂时关闭该主题、如果有其他问题、请随时回复该主题。
B.R.
Sal