开关的第一种情况是初始化值,当我进入函数时,开关不会变成INI_QUEUE,而是变成CHECK_QUEUE或ENABLE_QUEUE。下面是我的代码和调试代码片段。
有没有人能告诉我,是什么问题让我不去INI_QUEUE?
main.c file
int main(void)
{
/* USER CODE BEGIN 1 */
char buffer[2] = { 0 };
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_TIM14_Init();
/* USER CODE BEGIN 2 */
// HAL_TIM_Base_Start_IT(&htim14);
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
// HAL_UART_Receive_IT(&huart2, (uint8_t*) buffer, 1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// HAL_UART_Receive_IT(&huart2, (uint8_t*) buffer, 1);
fn_cirQ();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
typedef enum{
INI_QUEUE, CHECK_COM, EN_QUEUE, DE_QUEUE, UART_SEND
}Qstate;
void init_queue(queues *q, int max_size){
q->size =max_size;
q->values = malloc(sizeof(int)*q->size);
q->num = 0;
q->front = 0;
q->rare = 0;
}
void fn_cirQ()
{
queues q1;
static Qstate queuestates = INI_QUEUE;
switch (queuestates)
{
case INI_QUEUE:
init_queue(&q1, SIZE);
queuestates = CHECK_COM;
break;
case CHECK_COM:
if(Q_state == 0xFF)
{
queuestates = EN_QUEUE;
}
else if(Q_state == 0x00)
{
queuestates = DE_QUEUE;
}
else if(Q_state != 0x55)
{
HAL_UART_Transmit_IT(&huart2, (uint8_t*) errormsg, 20);
}
break;
case EN_QUEUE:
en_queue(&q1, temp[1]);
Q_state = 0x55;
j = 0;
queuestates = UART_SEND;
break;
case DE_QUEUE:
dequeue(&q1);
Q_state = 0x55;
j=0;
queuestates = UART_SEND;
break;
case UART_SEND:
HAL_UART_Transmit_IT(&huart2, (uint8_t*)&q1, sizeof(q1));
queuestates = CHECK_COM;
break;
}
}调试窗口中,为队列状态分配CHECK_COM状态而不是INI_QUEUE状态
发布于 2021-05-18 16:49:43
静态变量的初始化只在程序启动时执行一次。因此,第一次调用该函数时,它将转到INI_QUEUE的情况。
从那时起,下一次调用该函数时,它将进入由前一次调用设置的队列状态。
但这将是第一次给INI_QUEUE。
https://stackoverflow.com/questions/67582818
复制相似问题