请教各位大能,在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);
}
}
|