打印

求助:gd32移植RTOS使用软件定时器执行和轮询执行优先级问题

[复制链接]
653|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq814043451|  楼主 | 2022-6-2 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位大能,在RTOS软件定时器(优先级9)执行打印滴答定时器的值,和串口轮询接收(优先级8)数据同时开启,为什么是一直执行定时器任务,在定时器没执行的时候难道不是切换到 优先级8 的串口轮询接收吗?
  代码附上:
/*************************************************FreeRTOS配置**************************************************************/
#define configUSE_PREEMPTION                                        1                       //1使用抢占式内核,0使用协程
#define configUSE_TIME_SLICING                                        1                                                //1使能时间片调度(默认式使能的)


/***************************************************串口配置*******************************************************/

#define UART0_START_STK_SIZE    64   //任务堆栈大小
#define UART0_START_STK_PRIO    8     //任务优先级

#define UART0_START_ST_SIZE    64  //任务堆栈大小
#define UART0_START_ST_PRIO    8    //任务优先级


       
if(usart_flag_get(USART0,USART_FLAG_RBNE)==SET){
                                taskENTER_CRITICAL();   //进入临界区
                                       
               uint8_t Res,temp;       
        Res=usart_data_receive(USART0);                  //读取接收到的数据
       
                UART0_BUFF[usart_data.uart_size++]=Res;
                if(UART0_BUFF[0]==0x16){
                        if(UART0_BUFF[1]==0x09){
                        data_entry(&UART0_BUFF[usart_data.uart_size-2]);
                        }
                if(usart_data.uart_size==(USART_REC_LEN-1)){
           //打印接收数
        SEGGER_RTT_printf(0,"============%d***\n\r",usart_data.uart_size);
                        usart_data.uart_size=0;
                }
       
        }else{
                usart_data.uart_size=0;       
                }
        taskEXIT_CRITICAL();  //退出临界区
        usart_flag_clear(USART0,USART_FLAG_RBNE);               
}       
}



/***************************************************定时器配置*******************************************************/
#define Timer_START_STK_SIZE    64   //任务堆栈大小
#define Timer_START_STK_PRIO    9     //任务优先级

#define Timer_START_ST_SIZE    64  //任务堆栈大小
#define Timer_START_ST_PRIO    9    //任务优先级


        App_timer1 = xTimerCreate("App_timer1",500,pdTRUE,(void*)1,App_timer);
  App_timer2 = xTimerCreate("App_timer2",200,pdTRUE,(void*)2,App_timer);
       
        xTimerStart(App_timer1,0); //阻塞0
        xTimerStart(App_timer2,0); //阻塞0


/*
        软件定时器回调函数
       
        */
void App_timer( TimerHandle_t xTimer ){
       
       
        if(xTimer==App_timer1){
        TickType_t tick_num;
       
        tick_num = xTaskGetTickCount();//获取滴答定时器的计数值
        SEGGER_RTT_printf(0,"*****************************1=%d\n\r",tick_num);
       
        }else{
        TickType_t tick_num;
       
        tick_num = xTaskGetTickCount();//获取滴答定时器的计数值
        SEGGER_RTT_printf(0,"-----------------------------------------2=%d\n\r",tick_num);
                               
        }
}




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝