uCOS有uCOSii和uCOSiii,这两个都是一个可裁剪、可剥夺型的多任务内核。
uCOSiii没有任务数限制,uCOSiii内部任务有5个:
中断服务服务管理任务,时钟节拍任务,定时器任务 ,统计任务,空闲任务。
1、优先级0:
中断服务服务管理任务OS_IntQTask(),在os_int.c中,有一个OS_IntQTaskInit()函数,它在创建"中断服务服务"时,将IntQTask的优先级设置为0;
2、优先级1:
时钟节拍任务 OS_TickTask(),OS_CFG_TICK_TASK_PRIO=1
3、优先级2:
定时器任务 OS_TmrTask(),OS_CFG_TMR_TASK_PRIO=2
4、优先级OS_CFG_PRIO_MAX-2:
统计任务 OS_StatTask(),OS_CFG_STAT_TASK_PRIO=(OS_CFG_PRIO_MAX-2u)
5、优先级OS_CFG_PRIO_MAX-1:
空闲任务 OS_IdleTask(),在oS_core.c中,有一个OS_IdleTaskInit()函数,在这里定义了"空闲任务优先级"为(OS_CFG_PRIO_MAX - 1u)
6、用户任务需要自己定义:
#define START_TASK_PRIORITY 3 //设置START_TASK任务优先级,
OS_TCB START_TASK_TCB; //START_TASK任务控制块
#define START_TASK_STACK_SIZE 192 //设置START_TASK任务堆栈大小为192个4字节
CPU_STK START_TASK_STACK[START_TASK_STACK_SIZE]; //START_TASK任务堆栈
#define BALANCE_TASK_PRIORITY 4 //BALANCE_TASK任务优先级
OS_TCB BALANCE_TASK_TCB; //BALANCE_TASK任务控制块
#define BALANCE_TASK_STACK_SIZE 128 //Balance任务堆栈大小为392个4字节
CPU_STK BALANCE_TASK_STACK[BALANCE_TASK_STACK_SIZE];
//BALANCE_TASK任务堆栈
#define LCD_DISPLAY_TASK_PRIORITY 5 //任务优先级
OS_TCB LCD_DISPLAY_TASK_TCB; //LCD_DISPLAY_TASK任务控制块
#define LCD_DISPLAY_TASK_STACK_SIZE 256 //任务堆栈大小为456个4字节,为8的倍数
CPU_STK LCD_DISPLAY_TASK_STACK[LCD_DISPLAY_TASK_STACK_SIZE]; //LCD_DISPLAY_TASK任务堆栈
7、堆空间定义:
在lib_cfg.h中,有一个宏叫LIB_MEM_CFG_HEAP_SIZE,用来设置"堆的大小"
8、uC/OS-III节拍中断的频率:
在os_cfg_app.h中,有一个宏OS_CFG_TICK_RATE_HZ
#define OS_CFG_TICK_RATE_HZ 100u
//设置uC/OS-III节拍中断的频率为100,设置1000时,任务容易卡,可能原因:系统响应慢,高级任务响应不及时,导致阻塞,谁也干不了活。