gpt4 book ai didi

c - 每次调用后都会重置全局变量

转载 作者:行者123 更新时间:2023-11-30 16:38:10 25 4
gpt4 key购买 nike

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

变量是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();
}

问题出在 Comms 文件内部:

//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
}

}

请注意,我最初的想法是使用局部静态变量,但我遇到了同样的问题,因此我尝试使用全局变量。

最佳答案

在某些情况下,MCU 会因不可恢复的错误或硬件设置错误而重新启动。应该是这个问题!造成这种 MCU 行为的原因也可能是指针管理不当。

关于c - 每次调用后都会重置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47593762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com