Ⅰ
寫(xiě)在前面
上一篇我文章提供大家可直接運(yùn)行的代碼,如果測(cè)試過(guò)的朋友應(yīng)該知道,想要FreeRTOS運(yùn)行起來(lái)其實(shí)很簡(jiǎn)單,不用修改很多代碼和配置信息,就可以將FreeRTOS添加到自己的工程中并成功跑起來(lái)。
從本文開(kāi)始講述FreeRTOS中的代碼,為了照顧大部分朋友,還是以簡(jiǎn)單,基礎(chǔ)為原則。
FreeRTOS中“FreeRTOSConfig.h”配置的內(nèi)容隨著版本(功能)的增加而增加,也就是說(shuō)隨著系統(tǒng)功能的增加,對(duì)應(yīng)需要的配置信息也響應(yīng)增加了。但是系統(tǒng)為了兼容之前的代碼,系統(tǒng)自身做了兼容處理。
比如:configUSE_QUEUE_SETS是屬于“FreeRTOSConfig.h”中定義的選項(xiàng),如果用戶(hù)沒(méi)有定義,則在“FreeRTOS.h”中有類(lèi)似如下定義。
#ifndefconfigUSE_QUEUE_SETS
#defineconfigUSE_QUEUE_SETS0
#endif
開(kāi)始設(shè)計(jì)FreeRTOS系統(tǒng)時(shí),工程師們肯定會(huì)想到,要盡量減少開(kāi)發(fā)者的開(kāi)發(fā)難度。我們初學(xué)移植FreeRTOS時(shí),“FreeRTOSConfig.h”中的大部分配置都選擇默認(rèn)即可。只有后期熟悉了,開(kāi)發(fā)需要使用較多功能的時(shí)候,里面各項(xiàng)的配置就必須要熟透。
對(duì)英文不反感的朋友建議參考官網(wǎng)的內(nèi)容,畢竟官網(wǎng)的資料才是最權(quán)威的。
官網(wǎng)地址:
http://www.freertos.org/a00110.html
從官網(wǎng)提供的資料,可以看得出“FreeRTOSConfig.h”將配置信息劃分為10大類(lèi),但是很多配置信息我們都可以選擇不用(或者不定義)。
微信公眾號(hào)中技術(shù)文章篇幅不易過(guò)長(zhǎng),本文針對(duì)初學(xué)者,先講述通用的配置。
Ⅱ
通用配置
這一章也叫基本配置,反正就是需要我們定義的一些配置,也是比較重要的配置。
提示:帶(*)的為相對(duì)理解一點(diǎn),或者較重要。
FreeRTOSConfig.h配置文件牽涉到許多關(guān)于系統(tǒng)方面的名詞,可能許多初學(xué)者不容易理解。比如:信號(hào)量、消息隊(duì)列、互斥鎖、事件組······等。
不過(guò)不用擔(dān)心,先有個(gè)大概了解,我后期會(huì)再次有針對(duì)性的重點(diǎn)講述。
1.configUSE_PREEMPTION
調(diào)度模式配置
配置為0:合作式調(diào)度,即時(shí)間片輪流執(zhí)行;
配置為1:搶占式調(diào)度,即優(yōu)先級(jí)高的任務(wù)搶先執(zhí)行;
由于我們要求實(shí)時(shí)響應(yīng),就配置為1,使用搶占式調(diào)度方式。否則就發(fā)揮不到實(shí)時(shí)操作系統(tǒng)的作用。
2.configCPU_CLOCK_HZ
CPU時(shí)鐘,就是我們常說(shuō)的主頻。注意:?jiǎn)挝皇荋z。
如:STM32F407主頻為168M:
#define configCPU_CLOCK_HZ (168000000)
系統(tǒng)滴答,即系統(tǒng)每秒鐘滴答的次數(shù),可以說(shuō)是系統(tǒng)的心跳,但需要和主頻區(qū)分開(kāi)來(lái)。系統(tǒng)滴答的值要根據(jù)CPU主頻來(lái)看,一般主頻越高,取值相對(duì)越大,一般在100至1000之間。
簡(jiǎn)單舉例:系統(tǒng)滴答決定vTaskDelay。
比如:
#define configTICK_RATE_HZ (1000)
則:
vTaskDelay(1000),表示延時(shí)1S。
4.configMAX_PRIORITIES
系統(tǒng)最大優(yōu)先級(jí)值
我們創(chuàng)建任務(wù)是,配置的優(yōu)先級(jí)值不能超過(guò)這個(gè)最大值。
xTaskCreate(vAppTask1, "Task1", TASK1_STACK_SIZE, NULL,TASK1_PRIORITY, NULL);
提示:
a.系統(tǒng)優(yōu)先級(jí)和中斷優(yōu)先級(jí)原理類(lèi)似,高優(yōu)先級(jí)的會(huì)搶在低優(yōu)先級(jí)的前面,但需要區(qū)分系統(tǒng)和中斷優(yōu)先級(jí)的應(yīng)用場(chǎng)景。
b.FreeRTOS中優(yōu)先級(jí)數(shù)值越大,優(yōu)先級(jí)越高。而UCOS則相反。
5.configMINIMAL_STACK_SIZE
最小堆棧值
在系統(tǒng)中,一般用于空閑、定時(shí)等一些系統(tǒng)任務(wù)中,當(dāng)然,我們有些地方也可以使用這個(gè)定義的堆棧值。
注意數(shù)值的單位,一般在ARM中為4個(gè)字節(jié)。
6.configTOTAL_HEAP_SIZE
系統(tǒng)總共堆(棧)大小
我們需要根據(jù)需要使用的情況定義這個(gè)值。不能定義太小,太小內(nèi)存容易溢出;也不能定義太大,有些芯片RAM本身就不大(有些就只有幾K),如果太大我們就沒(méi)法定義太多全局變量,或分配其他堆棧空間。
7.configMAX_TASK_NAME_LEN
任務(wù)名稱(chēng)最大長(zhǎng)度
也就是創(chuàng)建任務(wù)定義任務(wù)名稱(chēng)的字符串長(zhǎng)度
xTaskCreate(vAppTask1, "Task1", TASK1_STACK_SIZE, NULL, TASK1_PRIORITY, NULL);
提示:結(jié)束符 '\0'也包含在內(nèi)。
8.configUSE_16_BIT_TICKS
是否使用16位滴答計(jì)數(shù)值
配置為0:則使用32位的滴答計(jì)數(shù)值,一般在32位處理器中都是配置為0;
配置為1:則使用16位的滴答計(jì)數(shù)值,一般8位或者16位處理器中配置為1。
9.configIDLE_SHOULD_YIELD
是否讓空閑任務(wù)“放棄”搶占
也就是說(shuō)在執(zhí)行與空閑任務(wù)相同優(yōu)先級(jí)的任務(wù)過(guò)程中,空閑任務(wù)是否具有搶占的機(jī)會(huì)。
配置為0:不放棄搶占;
配置為1:放棄搶占;
10.configUSE_MUTEXES
是否使用互斥鎖
配置為0:不使用
配置為1:使用
提示:互斥鎖也叫互斥信號(hào)量,也就是說(shuō)對(duì)資源“加鎖”。它的作用是實(shí)現(xiàn)多任務(wù)間共享資源的獨(dú)占式處理。簡(jiǎn)單的說(shuō),就是某個(gè)資源在某一時(shí)刻只允許一個(gè)任務(wù)處理,處理完之后才允許其他任務(wù)處理該資源。
比如:A任務(wù)優(yōu)先級(jí)高,B任務(wù)優(yōu)先級(jí)低;AB任務(wù)都會(huì)使用一個(gè)串口發(fā)送指令數(shù)據(jù),(即每次必須發(fā)送完成,不能發(fā)送到一半就被打斷)。
當(dāng)B任務(wù)正在發(fā)送數(shù)據(jù)時(shí),A任務(wù)處于就緒狀態(tài)(要打斷B任務(wù))。那么B任務(wù)就需要使用互斥鎖占有該串口(加鎖,占有該資源),等發(fā)送完指令,就釋放該串口(開(kāi)鎖,釋放該資源)。一旦釋放了該資源,A任務(wù)就可以使用該串口(資源)了。
11.configUSE_RECURSIVE_MUTEXES
是否使用遞歸互斥鎖
配置為0:不使用
配置為1:使用
13.configQUEUE_REGISTRY_SIZE(*)
可添加(或登記)隊(duì)列名的數(shù)量
這個(gè)配置信息不好翻譯,它主要結(jié)合vQueueAddToRegistry與vQueueUnregisterQueue這兩個(gè)函數(shù)使用。
直接上函數(shù)接口:
void vQueueAddToRegistry(QueueHandle_t xQueue, const char *pcQueueName);
void vQueueUnregisterQueue(QueueHandle_t xQueue);
從函數(shù)接口可以知道,一個(gè)函數(shù)是登記(已經(jīng)創(chuàng)建的)隊(duì)列的名稱(chēng);一個(gè)函數(shù)是注銷(xiāo)隊(duì)列的名稱(chēng);
其實(shí),主要目的就是給(已經(jīng)創(chuàng)建的)隊(duì)列取名,方便調(diào)試查找。
提示:很多初學(xué)者理解為“可創(chuàng)建隊(duì)列的最大數(shù)”,這個(gè)配置參數(shù)與其完全不一樣的概念。
14.configUSE_QUEUE_SETS(*)
是否使用消息隊(duì)列“SET”功能
配置為0:不使用
配置為1:使用
這個(gè)配置信息也相對(duì)較難理解。
提示:網(wǎng)上很多解釋為:使能/禁止消息隊(duì)列。這個(gè)理解太籠統(tǒng),與消息隊(duì)列配置相關(guān)的信息比較多,我個(gè)人覺(jué)得不正確。
15.configUSE_TIME_SLICING
是否使用時(shí)間片進(jìn)行調(diào)度
這個(gè)參數(shù)結(jié)合上面第1各配置參數(shù)configUSE_PREEMPTION一起使用。
這個(gè)配置參數(shù)是在后面新版本增加的,好像在V7版本之前是沒(méi)有這個(gè)配置參數(shù)。所以,在FreeRTOSConfig.h配置文件中默認(rèn)是沒(méi)有的,而是定義在FreeRTOS.h中。
#ifndef configUSE_TIME_SLICING
#define configUSE_TIME_SLICING 1
#endif
Ⅲ
精華部分
之前推出的電子書(shū)版本反應(yīng)的效果不錯(cuò)。因此,堅(jiān)持為大家整理FreeRTOS系列教程的PDF版本電子書(shū)。
【提示:微信公眾號(hào)不支持外鏈接】
FreeRTOS系列教程PDF電子書(shū)下載地址:
http://pan.baidu.com/s/1nuHFF5n
網(wǎng)上很多教程都沒(méi)有配套的Demo例程,希望我這結(jié)合Demo例程講述的一系列教程,能讓大家更加容易學(xué)會(huì)。
FreeRTOS_STM32F0_Demo下載地址:
http://pan.baidu.com/s/1qYbmfy0
FreeRTOS_STM32F1_Demo下載地址:
http://pan.baidu.com/s/1jHDHRPc
FreeRTOS_STM32F2_Demo下載地址:
http://pan.baidu.com/s/1mi3eIdq
FreeRTOS_STM32F3_Demo下載地址:
http://pan.baidu.com/s/1kUZu5G7
FreeRTOS_STM32F4_Demo下載地址:
http://pan.baidu.com/s/1bplLZ7x
Ⅳ
-
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62413 -
程序互斥
+關(guān)注
關(guān)注
0文章
3瀏覽量
6172 -
config
+關(guān)注
關(guān)注
0文章
15瀏覽量
4668
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何導(dǎo)出交換機(jī)的配置文件
linux網(wǎng)卡配置文件
springboot的項(xiàng)目如何既要用jar包啟動(dòng),同時(shí)還可以為不同的機(jī)房設(shè)置不同的配置文件
![springboot的項(xiàng)目如何既要用jar包啟動(dòng),同時(shí)還可以為不同的機(jī)房設(shè)置不同的<b class='flag-5'>配置文件</b>](https://file1.elecfans.com//web2/M00/0A/90/wKgaomcQeDuADj7fAAN472XZMDI744.png)
HID over GATT配置文件(HOGP)低功耗藍(lán)牙
![HID over GATT<b class='flag-5'>配置文件</b>(HOGP)低功耗藍(lán)牙](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
確定LDO的任務(wù)配置文件兼容性
![確定LDO的任務(wù)<b class='flag-5'>配置文件</b>兼容性](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
freertos最多支持多少個(gè)任務(wù)
InModbus2配置文件的注意事項(xiàng)
在Nucleo-H743ZI2板上運(yùn)行wifi_scan示例,啟用FreeRTOS時(shí)堆部分被禁用,為什么?
鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型應(yīng)用配置文件
![鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型應(yīng)用<b class='flag-5'>配置文件</b>](https://file1.elecfans.com/web2/M00/C5/D5/wKgZomYCnRSAcOMcAACEEnttXHc600.png)
鴻蒙開(kāi)發(fā):【Stage模型應(yīng)用配置文件】
![鴻蒙開(kāi)發(fā):【Stage模型應(yīng)用<b class='flag-5'>配置文件</b>】](https://file1.elecfans.com/web2/M00/EB/49/wKgaomZYGf-AbJxuAAWQ7RqfYmE388.jpg)
請(qǐng)問(wèn)如何修改FreeRTOS的configTICK_RATE_HZ?
BlueRNG-M2SA運(yùn)用FreeRTOS空間不足怎么解決?
支持CiA402驅(qū)動(dòng)器配置文件的示例程序用于通過(guò)EtherCAT?通信進(jìn)行電機(jī)控制
![支持CiA402驅(qū)動(dòng)器<b class='flag-5'>配置文件</b>的示例程序用于通過(guò)EtherCAT?通信進(jìn)行電機(jī)控制](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論