静态变量未初始化为给定值

问题描述 投票:1回答:1

我有一个static“ init”变量,可以在启动时运行一次函数,(RTOS),但它似乎初始化为一个随机值。如果删除static标记,则一切正常。 (除了明显的问题是它每遍都要运行init函数。)>任何人都可以对为什么它不起作用或者实现这一目标的更好方法提供更多的见解吗?

示例代码:

void ManageStructures()
{
    // Variable declarations/definitions
    static uint8_t StructInitialized;
    // Have also tried "static uint8_t StructInitialized = 0", neither worked

    // Function prototypes
    void InitStruct();

    if (!StructInitialized)
    {
        StructInitialized= 1;
        InitStruct();
    }
    Test = StructInitialized;

edit

:对于缺乏信息我深表歉意。这是针对一家公司的,我正在努力保持在我们公共信息政策的范围之内。 MCU是使用“ Ac6 STM32 MCU GCC”工具链的STM32F7系列。我不太熟悉编译器操作,因此可能需要更长的时间才能找到与编译器或makefile相关的问题的答案。

edit

:显然这是编译器或链接器脚本的问题,而不是我的代码。话虽这么说,也很清楚我需要深入了解工具链,链接程序脚本和编译器,然后才能深入了解此问题。一旦我变得足够熟悉,可以提出宝贵的反馈意见或自己回答,我就会回到这个问题。谢谢大家的反馈和指导!

我有一个静态的“ init”变量,可以在启动时(RTOS)一次运行一个函数,但是它似乎初始化为一个随机值。如果我删除静态标签,一切都会很好。 (除了明显的...

c embedded static-variables variable-initialization
1个回答
7
投票

嵌入式系统通常以“最小启动”代码运行,这意味着它们在启动期间从不初始化.bss.data。这意味着,如果您编写类似static int foo = 42;的代码,则将编译代码,但永远不会设置该变量。

© www.soinside.com 2019 - 2024. All rights reserved.