|
发表于 2006-12-21 20:10:22
|
显示全部楼层
我解释下,不对之处请指出:
OS_TASK_ADC_PRIO=5
OS_TASK_1_PRIO =7
OS_TASK_2_PRIO =8
1。TASK ADC先执行,在执行OSQPend(Q_ADC, OS_TICKS_PER_SEC, &err)后就挂起,等待Q_ADC队列,然后作下任务切换。
2。TASK 1优先级比较高,所以它先执行, 执行OSTimeDlyHMSM(0,0,0,200)后又作任务切换。
3。TASK 2开始执行,发送OSQPost(Q_ADC,(void*)i),后挂起等待 OSMboxPend(Mbox[OS_TASK_2_PRIO],0,&err)
4。TASK ADC接收到Q_ADC队列消息后,继续执行OSMboxPost(Mbox[((t_Message *)msg)->TX_ID],(void *)1)。然后又挂起等待Q_ADC队列消息。
5。TASK 2接收到OSMboxPend(Mbox[OS_TASK_2_PRIO],0,&err) 后,执行OSTimeDlyHMSM(0,0,0,100)
6。TASK 1执行,发送OSQPost(Q_ADC,(void*)i),后挂起等待 OSMboxPend(Mbox[OS_TASK_1_PRIO],0,&err)
7。然后重复步骤4、5、6、7。
如果改变优先级:
OS_TASK_1_PRIO =7
OS_TASK_2_PRIO =8
OS_TASK_ADC_PRIO=13
1。TASK 1最先执行,执行OSTimeDlyHMSM(0,0,0,200)后作任务切换。
2。TASK 2开始执行,执行OSTimeDlyHMSM(0,0,0,100)后作任务切换。
3。TASK ADC开始执行,在执行OSQPend(Q_ADC, OS_TICKS_PER_SEC, &err)后就挂起,等待Q_ADC队列,然后作下任务切换。
4。TASK 2开始执行,发送OSQPost(Q_ADC,(void*)i),后挂起等待 OSMboxPend(Mbox[OS_TASK_2_PRIO],0,&err)
5。TASK ADC接收到Q_ADC队列消息后,继续执行OSMboxPost(Mbox[((t_Message *)msg)->TX_ID],(void *)1)。然后又挂起等待Q_ADC队列消息。
6。TASK 2接收到OSMboxPend(Mbox[OS_TASK_2_PRIO],0,&err) 后,执行OSTimeDlyHMSM(0,0,0,100)
7。TASK 1执行,发送OSQPost(Q_ADC,(void*)i),后挂起等待 OSMboxPend(Mbox[OS_TASK_1_PRIO],0,&err)
8。然后重复步骤5、6、7、8。
所以改变优先级后应该多了1、2两个步骤,以后应该是和优先级没改前一样的。 |
|