我正在使用嵌入式 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);
}
输出:
已初始化!循环开始:631237200 循环开始:315618000
Note::这不是 printf 问题。调试器也会验证内存中的值是否为 631237200。
在某些嵌入式系统中,静态初始化并未设置为自动发生。这违背了 C 规范,但有时就是这样。请注意,这对于 data 和 bss 段可能都是如此,即您可能会发现未初始化的静态变量也可能不会初始化为零。
不幸的是,这个问题的解决方案是特定于系统的。您可能会在编译器系统文档中找到一些内容,可以让您调用静态元素的初始化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)