CubeMX配置FreeRTOS

01、說在前面

       RTOS爲了提高任務調度效率一般都包含彙編程序,因此移植起來需要一些彙編知識,就算網上肯定有移植教程,初次搞起來還是挺費勁的。初學時對RTOS代碼不熟悉,一開始就打擊了積極性可不好。因此本篇不講怎麼移植,介紹使用ST“懶人神器”CubeMX來快速移植配置FreeRTOS。

02、RTOS介紹

        目前嵌入式主流RTOS有uCOS、FreeRTOS,之所以很多第三方庫都有在FreeRTOS上的應用Demo,是因爲FreeRTOS免費。不要錢是真的厲害呀!然而說實話,論源碼規範,我還是喜歡uCOS。FreeRTOS的匈牙利命名法真是讓我難受呀~~~

 

03、配置CubeMX

          設計實驗:配置CubeMX移植FreeRTOS,建立兩個任務,一個讓LED0以500ms亮滅,一個讓LED1以200ms亮滅。

第一步

 

首先如1處勾選使用FreeRTOS的enable。然後將HAL庫的1ms定時中斷採用的定時器改爲TIM1,因爲Systick要用作FreeRTOS的時基定時。第三步配置IO口。忘記怎麼配置的溫故《STM32CubeMX入門教程(一)》。

第二步

配置FreeRTOS。點擊FREERTOS按鈕。

 

配置界面如下,通過配置界面可以實現操作系統的配置、任務的配置、隊列、信號量及內存管理的配置。

 

ConfigParameters:配置操作系統功能,就像手動移植時修改Config文件一樣,基本上可以按默認值。具體每個配置的功能,可以點擊該條目,底部會有相關介紹。

IncludeParameters:配置操作系統API,一些API不常用可以不使能編譯,減小系統大小。這個也對應與移植時的Config文件。例如刪除任務函數vTaskDelete()是否使能就在此配置。具體如下圖:

 

UserConstants:添加一些用戶使用的常量,很少用。

TaskAndQueues:任務及隊列的配置。首先說任務配置,點擊ADD,彈出配置對話框。TaskName是任務名稱,一個字符串而已。下面是優先級配置,再往下是任務堆棧大小。EntryFunction是任務函數名。CodeGenerationOption是選擇自動生成代碼是否聲明成weak。Allocation是配置內存是否動態分配,此處CUbeMX默認動態分配不給更改。

 

之後再看一下隊列的創建。如下圖,點擊ADD,彈出配置對話框。首先是隊列名稱。QueueSize是隊列長度,即包含的隊列項個數。ItemSIze是隊列項類型。

 

TimersAndSemaphores:即軟件定時器及信號量的配置,界面如下圖。Timer處的ADD按鈕不能點擊,因爲我們在配置時未使能軟件定時器功能。從上到下依次是:軟件定時器、互斥信號量、遞歸信號量、二值信號量、計數信號量。

 

最後看一下堆棧及內存管理。

FreeRTOS Heap Usage:界面如下,這裏會根據前面配置顯示出動態內存使用情況。用戶可配置內存管理大小,但不能比已配置使用了的小。所謂操作系統的內存管理,就是它自己先定義一個超大的數組,把內存坑全佔了。你在應用開發時要拉屎,你要用哪個坑你說的不算,你告訴操作系統,“我這邊四個哥們,給我來四個坑”,操作系統會找到一個連續的四個坑,並把首地址以指針的方式告訴你,如果沒坑了,就反饋申請內存失敗。當然,拉完要釋放內存~之所以用FreeRTOS內存管理,是因爲該操作系統提供5種內存管理方案,有內存碎片回收功能,很強大。

 

04、編程

配置完後生成代碼,打開freertos.c文件,編寫任務函數代碼。

osDelay()函數並不是FreeRTOS的原版API函數,而是加上了CMSIS-RTOS封裝後的函數。

05、CMSIS-RTOS

我們知道,大多數RTOS的原理都差不多的,都是任務調度、延時函數、信號量、隊列等等東西。Keil有自己的RTX操作系統。後來ARM收購了Keil。CMSIS-RTOS相當於將不同廠家的RTOS封裝一下,形成了一個標準的API函數庫。FreeRTOS的匈牙利命名法實在讓我難受,我更喜歡用這個封裝庫。有時候想輸入一個函數,知道是Task的API,就因爲想不起來前面匈牙利縮寫是什麼,硬是敲不出來,編輯器也不提醒,因爲函數開頭就不知道是啥~~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章