关于OS_MCB、OS_MUCB、OS_SCB中都有类似p_TCB = rt_get_first ((P_XCB)p_MCB);;的语句。相当不明白。
像信号量的发送函数:
OS_RESULT rt_sem_send (OS_ID semaphore) {
/* Return a token to semaphore */
P_SCB p_SCB = semaphore;
P_TCB p_TCB;
if (p_SCB->p_lnk != NULL) {
/* A task is waiting for token */
p_TCB = rt_get_first ((P_XCB)p_SCB);
p_TCB->ret_val = OS_R_SEM;
rt_rmv_dly (p_TCB);
rt_dispatch (p_TCB);
os_tsk.run->ret_val = OS_R_OK;
}
else {
/* Store token. */
p_SCB->tokens++;
}
return (OS_R_OK);
}
怎么会把SCB指针转换为XCB。XCB转换为TCB是因为OS_TCB包含OS_XCB。
这关系到信号量、互斥锁、邮箱的链表p_lnk是怎么实现的。 |