FreeRTOS學習 協同程式

2021-07-25 09:24:33 字數 1493 閱讀 4503

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...