TI-RTOS---Mailboxes
ti.sysbios.knl.Mailbox郵箱模塊提供了一組管理郵箱的功能。郵箱能夠用于將緩沖區(qū)從同一處理器上的一個(gè)任務(wù)傳遞到另一個(gè)任務(wù)。
一個(gè)郵箱實(shí)例可以由多個(gè)讀寫器使用
郵箱模塊將緩沖區(qū)復(fù)制到固定大小的內(nèi)部緩沖區(qū)。這些緩沖區(qū)的大小和數(shù)量是在創(chuàng)建(或構(gòu)造)實(shí)例時(shí)指定的。通過Mailbox_post()發(fā)送緩沖區(qū)時(shí),將完成復(fù)制。通過Mail_pend()檢索緩沖區(qū)時(shí)發(fā)生另一個(gè)副本。
Mailbox_create()和Mailbox_delete()被用于創(chuàng)建和刪除mailkoxes。也可以靜態(tài)創(chuàng)建郵箱對象。
郵箱可用于確保傳入緩沖區(qū)的流量不會(huì)超過系統(tǒng)處理這些緩沖區(qū)的能力。
郵箱創(chuàng)建時(shí),可以指定內(nèi)部郵箱緩沖區(qū)的數(shù)量和每個(gè)緩沖區(qū)的大小。由于在創(chuàng)建的時(shí)候指定了大小,因此與郵箱實(shí)例一起發(fā)送和接收的所有緩沖區(qū)的大小都必須相同。
下面時(shí)郵箱的創(chuàng)建和刪除
Mailbox_Handle Mailbox_create(SizeT bufsize,UInt numBufs,Mailbox_Params *params,Error_Block *eb )Void Mailbox_delete(Mailbox_Handle *handle);Mailbox_pend()用于從郵箱讀取緩沖區(qū)。如果沒有可用的緩沖區(qū)(則郵箱為空),則Mailbox_pend()將阻塞。timeout參數(shù)允許任務(wù)等待超時(shí)的時(shí)間,無限期等待(BIOS_WAIT_FOREVER),或者根本是不等待(BIOS_NO_WAIT)。時(shí)間單位是system clock ticks。
下面是函數(shù)原型:
Mailbox_post()用于將緩沖區(qū)投遞到郵箱,,如果沒有可用的緩沖區(qū)插槽(即郵箱已滿),則mailbox_post()將阻塞,timeout參數(shù)允許任務(wù)等待超時(shí)的時(shí)間,無限期等待(BIOS_WAIT_FOREVER),或者根本是不等待(BIOS_NO_WAIT)。
Bool Mailbox_post(Mailbox_Handle handle,Ptr buf,UInt timeout );郵箱提供配置參數(shù),允許您將事件與郵箱關(guān)聯(lián)起來。者允許您同時(shí)等待一個(gè)郵箱消息和另一個(gè)事件。Mailbox提供兩個(gè)配置參數(shù)來支持郵箱readerEvent和readerEventId的讀取器事件。這允許郵箱讀取器使用事件對象等待郵箱消息。Mailbox還為郵箱寫入程序提供了兩個(gè)配置參數(shù)writerEvent和writerEventId。這允許郵箱writers使用事件對象來等待郵箱中的空間。
請注意,這些事件句柄的名稱可能會(huì)引起誤解。readerEvent是郵箱讀取器應(yīng)該掛起的事件,但是它是由郵箱writer在Mailbox_post()調(diào)用中發(fā)布的。writerEvent是郵箱寫入程序應(yīng)等待郵箱未滿時(shí)掛起的事件,以便使它能夠成功執(zhí)行Mailbox_post(),而不會(huì)因?yàn)猷]箱已滿而掛起。但是,每當(dāng)成功讀取郵箱時(shí),writeEvent由郵箱讀取器發(fā)布(即,Mailbox_pend()返回TRUE)
使用事件時(shí),線程調(diào)用Event_pend()并等待多個(gè)事件。從Evnet_pend()返回時(shí),線程必須調(diào)用Mailbox_pend()或Mailbox_post()這取決于它是reader還是writer,超時(shí)值為BIOS_NO_WAIT。
調(diào)用Mailbox_post()可能會(huì)導(dǎo)致在特定情況下重新啟用硬件中斷。
參考文獻(xiàn):
總結(jié)
以上是生活随笔為你收集整理的TI-RTOS---Mailboxes的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++完成淄博烧烤节管理系统
- 下一篇: 什么是Extreme Programmi