FreeRTOS學習之路(1)

2021-09-30 16:44:30 字數 2155 閱讀 8851

我沒有看官網的英文原版,在網上查詢了一下中文翻譯版本的,可能以後有機會深入的話,我會再重複看英文版。

好了閒聊到這來,先歸納我自己的一些看法:

1、最開始且最基本的程序(翻譯版本說是乙個任務,在我看來是乙個函式、乙個程序,暫且歸納為程序吧)建立:

portbase_type xtaskcreate(pdtask_code pvtaskcode,

const signed portchar *const pcname, //任務名

unsigned postshort usstackdepth, //定義儲存空間:以棧的形式定義

void *pvparameters, //接受指向void的指標

unsigned portbase_type uxpriority, //定義程序的優先順序,0的優先順序最低,configmax_priorities-1優先順序最高,排程器會根據優先順序的不同而選擇程序的執行順序

xtaskhandle *pxcreatedtask); //用於傳出程序的問題,一般可設定為null

非執行狀態:採用事件程序的意義在於不同優先順序的程序可以被建立,並且不會導致高優先順序把低優先順序的程序遏制。

包含:阻塞狀態、掛起狀態、就緒狀態

a、阻塞狀態:如果乙個程序正在等待某個事件,則這個程序處於阻塞態(blocked),阻塞態是非執行的乙個子狀態。

同步事件:源於其他程序或中斷事件的發生。例如:某個任務可以在進入阻塞態以等待佇列中的資料到來。同步事件囊括了所有板級範圍內的事件型別。

在文件中的乙個統稱:

互斥訊號量(recursive semaphore):freertos的佇列,二值訊號量,計數訊號量,互斥訊號量,遞迴訊號量

主要作用:實現互斥訪問和互斥量都可以用來實現同步事件

掛起狀態:排程器無法呼叫掛起狀態的程序。

利用vtasksuspend() api函式:將程序掛起

利用vtaskresume() 或vtaskresumefromlsr() api函式:退出掛起狀態

就緒狀態:除阻塞和掛起狀態外的第三種非執行的子狀態。

利用void vtaskdelay() api函式解決空迴圈,從而不會出現只執行高優先順序程序,遏制低優先順序程序的執行。

void vtaskdelay(portticktype xtickstodelay); 	// xtickstodelay:呼叫該延遲函式的任務將進入阻塞態,經延遲指定的心跳週期後,再轉移到就緒態。
vtaskdelay(250/porttick_rate_ms); //表示250毫秒的迴圈週期

void vtaskdelayuntil(portticktype *pxpreviouswaketime,portticktype xtimeincrement);		//用來指定程序離開阻塞態進入就緒態那一刻的精確心跳計數值

改變任務優先順序:

void vtaskpriorityset(xtaskhandle pxtask ,unsigned portbase_type uxnewpriority);
查詢任務優先順序:

unsigned portbase_type uxtaskpriorityget(xtaskhandle pxtask);
pxtask用null代替時,表示查詢自身的優先順序

排程演算法

1、優先順序搶占式排程:即在就緒態下的程序,其優先順序越高,先執行

2、協作式排程:採用乙個純粹的協作式排程器,只可能在執行態任務進入阻塞態或是執行態任務顯式呼叫taskyield()時,才會進行上下文切換。

Python 學習之路 1

一 ascii編碼錯誤 在python指令碼的最上面加入下面一行 coding utf 8 這樣你就在指令碼中使用了unicode utf 8 編碼。二 r 和 s 有什麼不同 r 用來做除錯 debug 比較好,因為他會顯示變數的原始資料 raw data 而 s 是其它符號則是用來向使用者顯示輸...

C 學習之路 1

1.oop是什麼?物件導向程式設計。與面向過程相對,抽象出物件的屬性,找到共同特徵,成為類。物件作為類的例項,將物件分類。在類下進行封裝,繼承,多型等,將物件當做積木中的一塊,到處搬移,減少工作量。2.為什麼要學習oop?物件導向程式設計相比於面向過程在大的工程量操作時會顯現出優勢,將物件封裝成類,...

python學習之路 (1)

1 在python中有4種型別的數 整數 長整數 浮點數和複數。5 4j 和 2.3 4.6j 是複數的例子。2 字串 使用單引號 你可以用單引號指示字串,就如同 quote me on this 這樣。所有的空白,即空格和製表符都照原樣保留。使用雙引號 在雙引號中的字串與單引號中的字串的使用完全相...