TA的每日心情 | 开心 2014-7-6 08:47 |
---|
签到天数: 43 天 连续签到: 1 天 [LV.5]常住居民I
|
楼主 |
发表于 2014-2-22 18:48:35
|
显示全部楼层
本帖最后由 735054479 于 2014-2-22 18:49 编辑
ballack_linux 发表于 2014-2-22 00:05
ucos是可抢占型的系统,当更高优先级的任务就绪时,是可以抢占低优先级任务的 ...
再怎么抢占优先级也得等低优先级任务运行完啊,中间没有中断,这里应该是printf中调用了OSTimeGet函数,从而才会发生任务调度,在INT32U OSTimeGet (void)
{
INT32U ticks;
#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0u;
#endif
OS_ENTER_CRITICAL();
ticks = OSTime;
OS_EXIT_CRITICAL();
return (ticks);
}
#endif
中实行了临界区的进出,可能这里导致了任务调度。
void usertask1(void *pParam)
{
int sum=1;
for(;;){
OSTimeDly(100);
printf("@@@@task5 after sleep,本任务调度次数%d,FlagEn=%d\n",sum++,FlagEn) ;
}
}
void usertask2(void *pParam)
{
int sum=1;
unsigned int i,j;
for(;;){
for(i=0;i<65535;i++)
for(j=0;j<1000;j++);
// OSTimeGet();
printf("task6 after sleep,本任务调度次数%d,FlagEn=%d\n",sum++,FlagEn) ;
}
}在这两个任务中task5优先级为5,task6优先级为6,当屏蔽OSTimeGet();时结果为C:\Users\Lenovo\Desktop
屏蔽OSTimeGet
当不屏蔽OSTimeGet();时结果为C:\Users\Lenovo\Desktop
不屏蔽OSTimeGet
|
|