初级会员 
  
	- 积分
 - 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中),具体频率跟硬件定时器的频率和分频有关 ... 
 
 
 
 
 
 
 |