C-每次呼叫后重置全局变量



在我的项目中,我使用的是一个全局变量,但是它无法按预期工作,因为每次执行它时都会初始化它,老实说我不知道会发生什么。

变量是CookingSignalReceived。

该程序的结构如下:

//File Controller.c: 
while (1)
{
    Controller_Run_State_Machine();
}

void Controller_Run_State_Machine(void)
{
   /* start of activity code */
   Inputs_ReadSensors();
   Comms_CheckReceivedData();
   Controller_UpdateSTM();
}

问题在通信文件中:

//File Comms.c
uint8_t cookingSignalReceived = 0;
void Comms_CheckReceivedData(void)
{
   /* start of activity code */
   uint8_t uartDataAvailable = Comms_R_UART0_checkIfDataAvailable();
   if (uartDataAvailable == 1)
   {
      Comms_ParseReceivedCommand();
   }
}
void Comms_ParseReceivedCommand(void)
{
    /* start of activity code */
    /* UserCode{499E2AA6-1F61-4753-9221-77F85E7B5D92}:YjMeKqu95e */
    uint8_t CRC_check_OK = 0;
    uint8_t* buffer;
    /* UserCode{499E2AA6-1F61-4753-9221-77F85E7B5D92} */
    Comms_R_UART0_resetFlag_dataAvailable();
    buffer = Comms_R_UART0_getBuffer();
    CRC_check_OK = Comms_crcCheck(buffer);
    if (CRC_check_OK == 1)
    {
        Comms_processMessage(buffer); //<-- Variable is used in this function
    }
}

全局变量用于comms_processmessage()中。问题是,每次调用函数时,全局变量都设置为初始值。您在这里发现了什么奇怪的吗?

编辑:

void Comms_processMessage(uint8_t* buffer)
{
    /* UserCode{BCB3B791-2DF9-492b-B53B-6FEB24BD8F77}:eyCoSfmCKb */
    uint8_t message = buffer[0];
    uint8_t param1 = buffer[1];
    uint8_t param2 = buffer[2];

    //---------------------------------------------------------------------
    //                     START COOKING 1ST STEP REQUEST
    //---------------------------------------------------------------------
    if (message == MSG_COOK_1ST && param1 == START_PARAM)
    {
        // Wait for second frame
        cookingSignalReceived = 1;
        #ifdef DEBUG
                R_UART0_Send("Cook 1st step!!", sizeof(char) * 15);
        #endif
    }
    //---------------------------------------------------------------------
    //                     START COOKING 2ND STEP REQUEST
    //---------------------------------------------------------------------
    else if (message == MSG_COOK_2ND && param1 == START_PARAM)
    {
        // Wait for second frame
        if (cookingSignalReceived == 1)
        {
            Controller_signalsBufferEnqueue(cookingSignal);
        }
        #ifdef DEBUG
                R_UART0_Send("Cook 2nd step!!", sizeof(char) * 15);
        #endif
    }
}

请注意,我最初的想法是使用局部静态变量,但我遇到了相同的问题,所以我尝试了一个全局变量。

在某些情况下,MCUS重新启动是因为无法恢复的错误或不良硬件设置。这应该是问题!这种MCUS行为的原因也可能是不良指针管理。

相关内容

  • 没有找到相关文章