利用MSGQ模塊簡化復雜DSP的應用
main()
if processor 0: 打開雇主消息隊列并
創(chuàng)建雇主線程。
if processor 1: 打開雇員消息隊列并
創(chuàng)建雇員線程。
打開錯誤消息隊列并創(chuàng)建錯誤線程。
srio_init to initialize peripheral
workerThread()
Loop
MSGQ_get message from the worker queue
確定發(fā)送器
向發(fā)送器發(fā)送特定數(shù)量的消息
bossThread()
MSGQ_locate to locate worker queue
Loop
MSGQ_alloc message
使用要接收的多個消息來填充消息。
MSGQ_setSrcQueue to embedded boss’s message queue
MSGQ_put message to reader
Loop
MSGQ_get message from the boss queue
errorThread()
Loop
MSGQ_get message from the error queue
Log MQT error via LOG_printf
在單個處理器上發(fā)送消息
下面將介紹在單個處理器上發(fā)送和接收消息的幕后情況,這個過程分為任務一和任務二。任務二由操作系統(tǒng)進行調(diào)用,打開MSGQ隊列,并為該消息隊列指定 “pend”與“post”函數(shù)。如果沒有消息,則使用“pend”函數(shù),在而向消息隊列發(fā)送消息時則調(diào)用“post”函數(shù)。
如果MSGQ模塊獲得了沒有待決消息的信息,那么就可運行任務一,但必須讀取隊列標識符,并定位適當?shù)年犃?,以免其位于不同的處理器上。通常在啟動時定位隊列對性能幾乎沒有什么影響。此外,任務一在向任務二發(fā)送消息之前還必須為消息傳輸分配存儲器。
一旦任務一發(fā)送消息,就不能再對消息進行處理,因為這時MSGQ已擁有該消息,MSGQ會將該消息分配給適當?shù)年犃?。任務二獲得了有消息的信息,并準備接收消息。一旦任務二獲得消息,就能夠?qū)ο⑦M行重復使用,并將其發(fā)送回任務一。例如,如果兩個任務要將消息來回傳輸,那么就僅需分配開始的消息。若讀取器接收到消息,就能相應地更新內(nèi)容,然后將其發(fā)回。這樣,任務二就能夠處理消息,一旦處理完成,消息就返回到存儲器管理,任務二也就不能再對該消息進行處理。消息傳輸至此完成。消息傳遞可通過為數(shù)據(jù)移動提供虛擬接口來顯著簡化復雜處理器通信的開發(fā)與維護。本文引用地址:http://butianyuan.cn/article/152079.htm
評論