|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-11-27 09:23:24
|
显示全部楼层
fshunj 发表于 2012-11-27 09:01 ![](static/image/common/back.gif)
不是的,如果首先创建最低优先级的话,再在这个低优先级任务创建比他高优先级的任务就会发生任务调度的了,调 ...
我的意思是这样的:(以正点原子例程为例)
#define START_TASK_PRIO 10 //开始任务的优先级设置为最
#define LED1_TASK_PRIO 7
#define LED2_TASK_PRIO 6
int main(void)
{
delay_init(); //延时初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init(); //初始化与LED连接的硬件接口
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();
}
//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OSStatInit(); //初始化统计任务.这里会延时1秒钟左右
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
}
就是这样子,开始任务为最低优先级,穿件了其实任务之后,才开始启动系统。然后在开始任务里创建两个任务优先级高的任务。 我比较郁闷的是,按照你说的,当创建了第一个高优先级任务-LED1_TASK后,为什么没有发生调度?不知这个过程是怎样的。 |
|