freerros的模組
基於freertos api reference 8.1.2
一、什麼事協同程式
'co-routine'這是freertos開發組中的乙個雞肋,過去是應用在小裝置上,目前基本上極少使用了!但是開發組不打算刪除,但也不再優化和投入開發了!
協同程式從概念上將有點類似任務task,但個任務又有根本上的區別:
1)堆疊用量 所有的協同程式共用乙個堆疊,對比task來說大大減少了ram的需求;
2)時序和優先順序 協同程式優先順序時序遵從其他協同程式 ,但也可用於搶占式任務
3)巨集實現 協同程式的執行時通過巨集實現的;
4)限制條件 較小的ram需求是以嚴格的約束如何協同為代價實現的;
二、協同程式的特點
協同程式總結:
三、協同程式中的api:
四、具體實現
crdelay( coroutinehandle_t xhandle, ticktype_t xtickstodelay );延時的是當前協同程式自己
引數:xhandle 被延時的協同程式的控制代碼
xticktodelay 延時的時間長度,實際時間的數值是通過配置tick_rate_hz (set in freertosconfig.h)定義的,也可以通過以下計算轉換成ms.
xticktype xdelaytime = 200 / porttick_period_ms表徵的是200ms
crqueue_receive(
coroutinehandle_t xhandle,
queuehandle_t pxqueue,
void *pvbuffer,
ticktype_t xtickstowait,
basetype_t *pxresult
)引數:xhandle 接收的協同程式控制程式碼
pxqueue 被接收訊息佇列的控制代碼,一般是api xqueuecreate()的返回值;
pvbuffer 被接收訊息佇列的快取器,資料長度訊息佇列建立時已知
xtickstowait 等待接收訊息的滴答時間數
pxresult 從訊息佇列中重讀資料的結果,成功/失敗
crqueue_send_from_isr(
queuehandle_t pxqueue,
void *pvbuffer,
basetype_t * pxcoroutinewoken
)引數:pxqueue 被傳送出來的訊息佇列的控制代碼
pvbuffer 拷貝接收資料的快取,資料長度訊息佇列建立時已知
pxcoroutinewoken 協同程式被阻塞一段時間等待訊息佇列
返回:接收成功和失敗,pdtrue 或者pdfalse
lua協同程式
co coroutine.create function a print co a end coroutine.resume co,1,2,3 co 1 co coroutine.create function a,b coroutine.yield a b,a b end 在resume呼叫的返回...
Lua coroutine 協同程式
定義和啟動 lua裡面的協同程式 coroutine 暫定函式,可以掛起,可以一步一步的執行,可以暫停 第一種定義,啟動 1 定義協同程式 coroutine.create co coroutine.create function a,b print a b end 2 啟動協程 coroutine...
Programming in Lua 協同程式
看了好幾次協同程式都始終沒能搞懂其中resume是如何與yield進行資料交流的,今天終於看懂了,讓我們從頭說起 coroutine.create 建立coroutine,返回coroutine,引數是乙個函式,當和resume配合使用的時候就喚醒函式呼叫 coroutine.resume 重啟co...