Man*_*ndo 5 c memory compiler-construction memory-alignment
我正在使用嵌入式C编译器(ARM cortex-m3芯片),它似乎将错误的值初始化为结构.为什么会这样?如果是对齐问题,编译器是否应该知道将int32u与4字节边界对齐?
注意:printf只会抛出串行端口的字节.该芯片上没有stdio.h实现.
typedef struct
{
int32u startTime;
int16u length;
int32u offTime;
} Cycle;
Cycle cycle =
{
315618000,
1200,
0
};
void init()
{
printf("\r\nInitialized! Cycle Start: %d", cycle.startTime);
cycle.startTime = 315618000;
cycle.length = 1200;
printf(" Cycle Start: %d", cycle.startTime);
}
Run Code Online (Sandbox Code Playgroud)
输出:初始化!循环开始:631237200循环开始:315618000
注意::这不是printf问题.调试器也会将内存中的值验证为631237200.
在某些嵌入式系统中,静态初始化并未设置为自动发生。这违背了 C 规范,但有时就是这样。请注意,这对于 data 和 bss 段可能都是如此,即您可能会发现未初始化的静态变量也可能不会初始化为零。
不幸的是,这个问题的解决方案是特定于系统的。您可能会在编译器系统文档中找到一些内容,可以让您调用静态元素的初始化。