初级会员
- 积分
- 193
- 金钱
- 193
- 注册时间
- 2019-1-18
- 在线时间
- 67 小时
|
1金钱
以原子哥UCOS例程的的信号量访问共享资源为例,任务1优先级4,任务2优先级5。两个任务都包含一个WHLIE(1)死循环。例程里面每个任务都有延时函数,看教程说是由于延时导致任务切换,我想问的是如果任务中不delay的话优先级低的任务2是否有执行的机会(也就是是否会进行任务切换)?部分代码如下
void task1_task(void *p_arg)
{
OS_ERR err;
u8 task1_str[]="First task Running!";
while(1)
{
printf("\r\nèÎÎñ1:\r\n");
LCD_Fill(0,110,239,319,CYAN);
OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //ÇëÇóDÅoÅá¿
memcpy(share_resource,task1_str,sizeof(task1_str)); //Ïò12Ïí×êÔ′Çø¿½±′êy¾Y
delay_ms(200);
printf("%s\r\n",share_resource); //′®¿úêä3ö12Ïí×êÔ′Çøêy¾Y
OSSemPost (&MY_SEM,OS_OPT_POST_1,&err); //·¢ËíDÅoÅá¿
LED0=!LED0;
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //Ñóê±1s
}
}
|
最佳答案
查看完整内容[请看2#楼]
兄台客气了,指正不敢当,我技术较差,大家一起学习讨论,以下是我的理解。
我认为,一旦打开软件定时器的话,是会进行任务调度的。
我们OSTmrCreate并且OSTmrStart一个软件定时器后,实际上执行Callback Function的任务是OSTmr_Task,这个任务中有OSSemPend(OSTmrSemSignal, 0u, &err); 一直在等待着OSTmrSemSignal这个信号,这个信号由硬件定时器定时post(在OSTimeTickHook中),具体频率跟硬件定时器的频率和分频有关 ...
|