直接意識代碼:
int main()
{
while(1)
{
//LED1置為高電平
......
//延時1000MS
......
//LED1置為低電平
......
//延時1000MS
......
//LED2置為高電平
......
//延時500MS
......
//LED2置為低電平
......
//延時500MS
......
}
}
這是我們大腦最希望的添加代碼方式,很顯然他是錯的,兩個任務之間產(chǎn)生了相互的影響,使得兩個任務都執(zhí)行錯誤,這種思想在裸機開發(fā)中肯定是錯的,但是在我們的RTOS中他就可以是對的。
任務型代碼:
//創(chuàng)建LED1任務
void LED1_Task()
{
//LED1置為高電平
......
//延時1000MS
......
//LED1置為低電平
......
//延時1000MS
......
}
//創(chuàng)建LED2任務
void LED2_Task()
{
//LED2置為高電平
......
//延時500MS
......
//LED2置為低電平
......
//延時500MS
......
}
這是獨立的兩個任務內(nèi)容,我們只需要把他的扔到我們的任務執(zhí)行器里,他就會**“同時”運行了,很多小伙伴就會疑問了,單片機明明只有一個核**,為什么可以同時執(zhí)行多個任務呢?這就需要去了解RTOS操作系統(tǒng)中任務“同時”執(zhí)行的原理。
1.4?任務“同時”執(zhí)行的原理
在RTOS中,RTOS利用了一種類似于**“視覺暫留”的工作原理,多個任務之間快速切換。在ROTS中,可以讓我們的每個任務執(zhí)行一個時間單位**,然后就切換到另外一個任務執(zhí)行一個時間單位,再切換回去,兩個任務都是獨立運行的,互不影響,由于切換的頻率很快,就感覺像是同時運行的一樣。
上圖為一個簡單的示意圖,讀者朋友們可以結(jié)合該圖好好理解一下RTOS系統(tǒng)的執(zhí)行過程。
二、?FreeRTOS的手動移植
為了圖方便,筆者這里直接使用CubeMX去生成一個基于HAL庫的初始STM32工程文件。不習慣用HAL庫的,可以找一個標準庫的初始STM32工程文件,進行手動移植工作。
①、建立STM32空工程
這里使用STM32CubeMX快速創(chuàng)建項目,要注意的是我們完成最基本的配置以后,需要將我們的Timebase Source修改一下,修改成除了滴答定時器的其他定時器,如下圖:
這里我使用的TIM2作為Timebase Source
為什么不可以使用滴答定時器呢?
在FreeRTOS中我們的SysTick定時器被用于了我們的始終基準,它用來實現(xiàn)我們的任務切換,我們的SysTick定時器每次觸發(fā)我們的中斷(默認是一毫秒,可以自行修改為其他值)
Timebase Source是干嘛的呢?
簡單的說,正常裸機開發(fā)中我們的SysTick定時器是用來主要是用來進行我們的HAL_Delay()延時的,使用其作為基準,前面我們說了SysTick定時器被用于系統(tǒng)任務切換了,所以它就是一直在工作,或者說一直在觸發(fā)中斷,這樣的話我們的**HAL_Delay()就需用使用我們的其他定時器(TIM2)**進行替代其作用了
②、FreeRTOS內(nèi)核下載
這一步將會教大家如何去下載FreeRTOS內(nèi)核以及如何進行移植到我們的項目里面。
首先,登入FreeRTOS的官網(wǎng),地址:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions for embedded systems with Internet of Things extensions")
點擊右上角的Download FreeRTOS;
來到版本選擇界面;
上面的是FreeRTOS****的最新版本,下面的就是長期維護的版本 ;
我們直接點擊上面這個Github的超鏈接;
然后就依次帶點擊Code和Download ZIP;
但是,這時候下載完成的壓縮波其實并不包含FreeRTOS的子模塊。所以,在該頁面向下翻找。
找到Kernel source(內(nèi)核資源)?這里,點擊箭頭處的超鏈接;
按照上方步驟下載壓縮包,之后進行解壓,最終成功得到2個文件夾;
其中,FreeRTOS-Kernel-main是FreeRTOS的內(nèi)核文件,FreeRTOS-main文件夾下的內(nèi)容則比較繁雜,我們主要看里面Demo文件;
Demo文件夾里面的文件非常多,不過我們可以找到這樣一個文件夾CORTEX_STM32F103_Keil;
CORTEX_STM32F103_Keil文件夾為官方將系統(tǒng)已經(jīng)移植好的實例,但是這并不是我們直接移植的,感興趣的小伙伴可以先打看官方移植好的能不能看懂。
③、手動移植FreeRTOS內(nèi)核文件
1、打開第一步建立的新項目
2、左側(cè)項目文件添加兩個新的分組
3、建立對應的FreeRTOS文件夾
4、打開FreeRTOS-Kernel文件夾
5、主目錄下所有的.C后綴的文件全部復制我們的FreeRTOS文件夾下(一共七個)
6、復制include文件夾以及portable文件夾到FreeRTOS文件夾下
7、保留FreeRTOS/portable文件夾中的Keil、MemMang、RVDS文件夾,其余全部刪除
8、保留FreeRTOS/portable/RVDS文件夾中的ARM_CM3文件夾
9、然后如圖進行Keil項目的分組文件配置
10、添加對應的頭文件
11、直接編譯(出現(xiàn)9個錯誤)
④、項目問題修復
缺少FreeRTOSConfig.h文件(FreeRTOS的配置文件)
示例項目中復制粘貼并且添加到項目文件夾中(記得添加頭文件路徑)
編譯無錯誤
⑤、項目添加處理
雖然沒有錯誤了,但是我們的移植沒有完成,還有一些小步驟需要完成,的確有些繁瑣,好在邏輯性還是比較強的,理解起來相對容易。
在FreeRTOSConfig.h中添加#define xPortPendSVHandler?PendSV_Handler
在FreeRTOSConfig.h中添加#define xPortSysTickHandler SysTick_Handler
在FreeRTOSConfig.h中添加#define vPortSVCHandler SVC_Handler
左邊三個是我們Free RTOS中定義好的函數(shù),右邊的是系統(tǒng)項目本來就定義好的函數(shù),他們的作用小伙伴們可以去了解一下,作為初學者這里不進行拓展,反正就是和我們操作系統(tǒng)的中斷還有任務切換有關的函數(shù)
編譯,還是報錯,重復定義
處理錯誤:?進入對應的文件stm32f1xx_it.c刪除重復的3個函數(shù)
OK移植成功了?。。?/strong>
⑥、FreeRTOS點燈項目創(chuàng)建
相關的頭文件引入:用到的頭文件有**“FreeRTOS.h”(操作系統(tǒng)相關)和"task.h"(任務相關)**
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)嵌入式工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!
因此收集整理了一份《2024年嵌入式&物聯(lián)網(wǎng)開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
既有適合小白學習的零基礎資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上嵌入式&物聯(lián)網(wǎng)開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以+V:Vip1104z獲取?。。?(備注:嵌入式)

最后
資料整理不易,覺得有幫助的朋友可以幫忙點贊分享支持一下小編~
你的支持,我的動力;祝各位前程似錦,offer不斷,步步高升?。?!文章來源:http://www.zghlxwxcb.cn/news/detail-846006.html
05)]
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以+V:Vip1104z獲?。。?! (備注:嵌入式)

最后
資料整理不易,覺得有幫助的朋友可以幫忙點贊分享支持一下小編~
你的支持,我的動力;祝各位前程似錦,offer不斷,步步高升!?。?/strong>
更多資料點擊此處獲qu??!文章來源地址http://www.zghlxwxcb.cn/news/detail-846006.html
到了這里,關于基于STM32的實時操作系統(tǒng)FreeRTOS移植教程(手動移植)_stm32移植freertos(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!