各位好,这里有个问题想请教下大家。
是这样的,在工程中创建了3个任务,任务的执行顺序是通过信号量来控制的。
大致框架如下:
void tskFxn0() {for(;;){...Semaphore_post(sem_fxn1);...} } void tskFxn1() {for(;;){...Semaphore_pend(sem_fxn1, BIOS_WAIT_FOREVER);...Semaphore_post(sem_fxn2);...} } void tskFxn2() {for(;;){...Semaphore_pend(sem_fxn2, BIOS_WAIT_FOREVER);...} }
其中tskFxn0优先级最低,其他两个任务优先级一样。
问题就是:程序会一直在tskFxn0中,一直post信号,其他任务不能得到信号
Denny%20Yang99373:
在FXN0的POST后面再加个PEND。
FXN2的PEND后面再加个POST给FXN0。
试试
Rex Kung:
Fxn1和Fxn2都在pend()等待信号量,这两个task是优先级一样的,但是同优先级的task是基于FIFO的,也就是说你可能出在一种情况就是,Fxn0 进行 post()了,但是FIFO中是Fxn2在前面pend(),Fxn1在Fxn2的后面,所以就没法执行Fxn1,故也就是无法post(sem_fxn2)。
希望能帮到你
user3757070:
你的tskFxn0任务没有休眠时间,导致其他任务没有运行时间,
在tskFxn0任务里增加休眠时间,或者挂起等待条件再运行