2015年3月10日 星期二

uCOS : Task間的通訊與同步


                                                                    Tasks 有五種狀態


  • dormant
  • ready
  • running
  • waiting
  • ISR(interrupted)

Context Switch

Each Task 有自己的set of CPU register(放在 Task's Context storage area,又稱為TCB(Task Control Block)) 和 stack area. TCB 和 stack都在memory中.
當要做 Context switch的時候 , CPU register  會被放到 TCB中.

Kernel

Kernel 負責管理各Task , 和Context switch.

Non-Preemptive Kernel

Non-Preemptive Kernel允許使用non-reentrant functions(non-reentrant functions 不應該放棄CPU的控制權).





  • ECB(Event Control Blocks) :  一個Task可以透過ECB像另外一個Task發送訊息 , 所有的訊號都被視為 Event (無論是 Semaphore/Mailbox/MessageQueue).
    • 從Source code中來看 , 建立semaphore 是從 OSEventFreeList 中拿一個物件出來 , 設定成semaphore 的參數 (所以ECB的數量是有限的).  
  • ISR(Interrupt Service Routine) 不能等待 Event ,  只能發送 Event.
  • ucos_ii.h中所定義的 typedef struct os_event  ,  就是上面說的ECB.

沒有留言:

張貼留言