首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法进入特定的开关情况

无法进入特定的开关情况
EN

Stack Overflow用户
提问于 2021-05-18 16:43:19
回答 1查看 41关注 0票数 0

开关的第一种情况是初始化值,当我进入函数时,开关不会变成INI_QUEUE,而是变成CHECK_QUEUE或ENABLE_QUEUE。下面是我的代码和调试代码片段。

有没有人能告诉我,是什么问题让我不去INI_QUEUE?

代码语言:javascript
复制
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状态

EN

回答 1

Stack Overflow用户

发布于 2021-05-18 16:49:43

静态变量的初始化只在程序启动时执行一次。因此,第一次调用该函数时,它将转到INI_QUEUE的情况。

从那时起,下一次调用该函数时,它将进入由前一次调用设置的队列状态。

但这将是第一次给INI_QUEUE

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67582818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档