|
前言:
由于之前聽過太多人抱怨移植FreeRTOS到STM32有各種各樣的問題,小燈經(jīng)過一年多對(duì)FreeRTOS的研究并在公司產(chǎn)品中應(yīng)用,多少有些心得,接下來就由小燈以最新版的FreeRTOS為例一步一步移植到STM32F103上,并提醒大家某些需要注意的事項(xiàng)。本文檔為非正式技術(shù)文檔,故排版會(huì)有些凌亂,希望大家能提供寶貴意見以供小燈參考改進(jìn)。
下面先以IAR移植為例,說明移植過程中的諸多注意事項(xiàng),最后再以MDK移植時(shí)不再重復(fù)說明,所以還是建議大家先花些時(shí)間看IAR的移植過程,哪怕你不使用IAR,最好也注意下那一大堆注意事項(xiàng)!
一、從官網(wǎng)下載最新版的FreeRTOS源碼
下面的網(wǎng)址是官方最新源碼的下載地址:https://sourceforge.net/projects/freertos/files/latest/download?source=files 目前官方提供的最新版本是v9.0.0, FreeRTOS源碼在解壓目錄下的路徑為
FreeRTOS_V9.0.0rc2FreeRTOSSource
FreeRTOS組織為了搶用戶也是拼了命的,不信你打開Demo文件夾看看,里面提供了FreeRTOS在各種單片機(jī)上已經(jīng)移植好的工程,如果建工程時(shí)遇到什么問題,可以參考下這些Demo。
不過小燈現(xiàn)在著重于自己動(dòng)手移植FreeRTOS,考慮到原子哥@正點(diǎn)原子的用戶比較多,絕大多數(shù)習(xí)慣了使用MDK來開發(fā)STM32,因此小燈分別以IAR和MDK兩種使用比較廣泛的開發(fā)環(huán)境來移植FreeRTOS。說到IAR和MDK,不得不提的是小燈自從用了IAR之后就果斷放棄了MDK,相信很多人有這個(gè)經(jīng)歷,哈哈!
在開始移植FreeRTOS之前,先介紹下FreeRTOS的源碼:
132304mo601ofz6uq0yvq6.png (3.68 KB, 下載次數(shù): 48)
下載附件
2018-1-29 01:52 上傳
FreeRTOS的源碼比較少,源文件也遠(yuǎn)沒有UCOS多,不過麻雀雖小五臟俱全,F(xiàn)reeRTOS的短小精悍也是最令小燈著迷的,雖然缺少了很多組成部分,例如GUI、網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)等,不過這些統(tǒng)統(tǒng)都不是問題,因?yàn)橥耆梢砸浦驳谌降慕M件!
一不小心牛逼又吹大了,哈哈!回歸正題,F(xiàn)reeRTOS的源碼核心部分是tasks.c和list.c,其余的幾個(gè)文件功能都是可選的,例如軟件定時(shí)器、隊(duì)列、協(xié)程等等,小燈就不介紹了,有興趣的話可以到官網(wǎng)上看介紹。include文件夾里面的文件是操作系統(tǒng)相關(guān)的頭文件,而portable這個(gè)文件夾有些奇葩,先看看里面有啥:
132304februi5bl5uei6ui.png (6.5 KB, 下載次數(shù): 38)
下載附件
2018-1-29 01:52 上傳
這里的文件幾乎都是與平臺(tái)相關(guān)的,如果你要?jiǎng)h掉這里的文件時(shí)就必須小心了,因?yàn)椴皇撬形募寄軇h除的。
注意文件夾MemMang,里面存放的是FreeRTOS自帶的內(nèi)存管理方案的源文件:
132304psxzxfaz54lurmxs.png (2.65 KB, 下載次數(shù): 42)
下載附件
2018-1-29 01:52 上傳
關(guān)于內(nèi)存管理方案的選擇,小燈以后再跟大家討論,現(xiàn)在只需要知道這些文件不能刪就好。
接下來看看IAR文件夾的內(nèi)容,里面都是跟單片機(jī)底層相關(guān)的,由于我們以STM32F103為例,因此只需要保留ARM_CM3文件夾即可,其余可選擇性刪除。ARM_CM3文件夾里只有幾個(gè)文件,這幾個(gè)文件是操作系統(tǒng)最最底層的部分:
132304okjvkknmat66rmtt.png (1.33 KB, 下載次數(shù): 41)
下載附件
2018-1-29 01:52 上傳
接下來再看看Keil文件夾的內(nèi)容,里面只有一個(gè)文件,文件提示See-also-the-RVDS-directory,意思是讓我們參照RVDS目錄下的文件。其實(shí)我們以MDK建工程時(shí),就是拿RVDS目錄下的文件來替代的,因此我們應(yīng)該把RVDS目錄下的文件拷貝到Keil目錄下,跟上面IAR文件夾一樣我們只拷貝ARM_CM3文件夾即可:
132305rshju8hj1sutb41i.png (2.32 KB, 下載次數(shù): 47)
下載附件
2018-1-29 01:52 上傳
到這里我們可以把其他無用的文件統(tǒng)統(tǒng)刪掉了,portable目錄下只保留下面幾個(gè)文件夾的文件即可:
132305e9g7csb9jvj9c4c3.png (1.56 KB, 下載次數(shù): 50)
下載附件
2018-1-29 01:52 上傳
現(xiàn)在已經(jīng)把源碼整理好了,接下來就開始移植工作吧!
二、IAR下移植FreeRTOS
事先說明下,小燈使用的IAR版本是
132305n17wiyfjbbgzxyey.png (9.45 KB, 下載次數(shù): 50)
下載附件
2018-1-29 01:52 上傳
關(guān)于IAR下如何創(chuàng)建STM32基礎(chǔ)工程,小燈就偷下懶不介紹了,這入門級(jí)的知識(shí)還是交給賣開發(fā)板的人來傳播吧,小燈就以自己平常用的簡(jiǎn)單工程為例:
132305sjqp0fyqmjpuyzjj.png (19.64 KB, 下載次數(shù): 51)
下載附件
2018-1-29 01:52 上傳
工程當(dāng)中只有一個(gè)LED.c是小燈額外添加的,小燈一直停留在跑燈的水平,習(xí)慣用LED來觀察現(xiàn)象,希望各位大神莫怪。工程源碼結(jié)構(gòu)如下:
132305ygvw0uwzvuulttha.png (2.35 KB, 下載次數(shù): 42)
下載附件
2018-1-29 01:52 上傳
其中FreeRTOS文件夾下就是FreeRTOS的源碼:
132644y2mt0q5s1qamoomx.png (4.76 KB, 下載次數(shù): 54)
下載附件
2018-1-29 01:52 上傳
接下來在工程里面添加FreeRTOS文件:
132306fattapx5iri00pa0.png (4.2 KB, 下載次數(shù): 41)
下載附件
2018-1-29 01:52 上傳
文件清單如下:
FreeRTOS asks.c
FreeRTOSlist.c
FreeRTOSportableIARARM_CM3port.c
FreeRTOSportableIARARM_CM3portasm.s
FreeRTOSportableMemMangheap_4.c
這時(shí)有人可要問為何沒有把FreeRTOS的所有文件都添加進(jìn)去,原因我上面提過了,F(xiàn)reeRTOS的核心部分是tasks.c和list.c,其余的幾個(gè)文件是可選部分,在此小燈就先不添加這些可選部分以簡(jiǎn)化我們的工程。小燈建議大家使用內(nèi)存管理的方案四heap_4.c,因?yàn)樵摲桨妇哂袃?nèi)存塊碎片合并功能,比heap_2.c的最優(yōu)內(nèi)存塊分配方案要穩(wěn)定很多,這是小燈經(jīng)過很長(zhǎng)時(shí)間測(cè)試對(duì)比出來的,公司的產(chǎn)品也是一直使用heap_4.c,穩(wěn)定性無懈可擊!
接下來非常重要的一步就是添加頭文件路徑:
132306wn2nv7s0a4ndk72u.png (29.45 KB, 下載次數(shù): 35)
下載附件
2018-1-29 01:52 上傳
頭文件路徑如下:
$PROJ_DIR$..SourceFreeRTOSinclude
$PROJ_DIR$..SourceFreeRTOSportableIARARM_CM3
好了這時(shí)我們可以嘗試編譯下整個(gè)工程了,編譯結(jié)果提示缺少了個(gè)頭文件:
132306mojbo7fy5mbg56yy.png (1.88 KB, 下載次數(shù): 41)
下載附件
2018-1-29 01:52 上傳
FreeRTOS組織也真是奇葩,居然連這么重要的文件都不提供在源碼里面!!!前面提醒過大家,新建工程時(shí)碰到問題一定要參考官方提供的Demo,既然Demo是一堆成品的工程,那么里面絕對(duì)有我們所需的這個(gè)FreeRTOSConfig.h
我們就選擇打開DemoCORTEX_STM32F103_IAR下的這個(gè)工程吧,果不其然里面真的有我們需要的這個(gè)頭文件:
132306te2iunni9rh2rr2i.png (8.33 KB, 下載次數(shù): 39)
下載附件
2018-1-29 01:52 上傳
把這文件放哪里好呢,這是一直糾結(jié)小燈的問題,官方直接把這文件放在工程目錄下,但這么重要的配置文件這么隨便放似乎不太好吧。在小燈看來,這個(gè)文件的重要性和打開的概率絕不比FreeRTOS內(nèi)核文件低,所以還是把它放在源碼里面比較合理:
132307y0s3qi3tk0qqxt7q.png (4.23 KB, 下載次數(shù): 35)
下載附件
2018-1-29 01:52 上傳
在C/C++ Compiler下添加頭文件路徑:
$PROJ_DIR$..SourceFreeRTOS
還有一個(gè)地方一定要十分注意,因?yàn)椴僮飨到y(tǒng)的最最底層的幾個(gè)文件也需要用到FreeRTOSConfig.h頭文件,而底層文件是用匯編來寫的,因此必須在Assembler下添加FreeRTOSConfig.h頭文件路徑:
132307go1zao47jfokngo7.png (9.67 KB, 下載次數(shù): 58)
下載附件
2018-1-29 01:52 上傳
好了再編譯一次:
132307r8ne6vr82f4hhtn4.png (1.41 KB, 下載次數(shù): 42)
下載附件
2018-1-29 01:52 上傳
0個(gè)錯(cuò)誤0個(gè)警告,程序員最歡喜的莫過于看見這個(gè)結(jié)果了,哈哈!
在編寫系統(tǒng)任務(wù)前,有必要對(duì)配置文件FreeRTOSConfig.h進(jìn)行檢查。FreeRTOSConfig.h里面幾乎都是一些宏定義,關(guān)于這些宏定義的具體用法,可以在官網(wǎng)上查閱:http://www.freertos.org/a00110.html
小燈只以其中幾個(gè)比較重要的參數(shù)作特別說明,下面以小燈修改過的FreeRTOSConfig.h為例作為說明:
132307mzssssu0beu0su0y.png (31.68 KB, 下載次數(shù): 47)
下載附件
2018-1-29 01:52 上傳
(1)定義系統(tǒng)底層相關(guān)的函數(shù)
132308owhs5ypcjyfd6ks8.png (2.5 KB, 下載次數(shù): 48)
下載附件
2018-1-29 01:52 上傳
其中SVC中斷時(shí)操作系統(tǒng)啟動(dòng)時(shí)進(jìn)入的中斷,而PendSV中斷手動(dòng)切換任務(wù)時(shí)進(jìn)入的中斷,SysTick中斷不用我多說了,@正點(diǎn)原子的基礎(chǔ)例程幾乎都使用這個(gè)定時(shí)器定時(shí),在這里SysTick是作為操作系統(tǒng)的心臟。由于FreeRTOS對(duì)這幾個(gè)中斷的名稱做了自己的定義,因此必須要重定義這幾個(gè)函數(shù)才能正常進(jìn)入中斷,但這么做又會(huì)跟ST提供的stm32f10x_it.c文件當(dāng)中定義的中斷相沖突,因此必須將stm32f10x_it.c下對(duì)應(yīng)的幾個(gè)中斷服務(wù)函數(shù)屏蔽掉,否則編譯會(huì)提示函數(shù)重定義:
132308bjjz6vsgy77kj1sj.png (8.15 KB, 下載次數(shù): 59)
下載附件
2018-1-29 01:52 上傳
(2)修改系統(tǒng)可屏蔽的中斷優(yōu)先級(jí)閾值
FreeRTOS提供的可屏蔽中斷優(yōu)先級(jí)閾值是191,對(duì)應(yīng)的十六進(jìn)制數(shù)是0xBF:
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 191
由于STM32F103的優(yōu)先級(jí)分組只有4個(gè)位,而CM3的優(yōu)先級(jí)是以MSB對(duì)齊的,也就是說STM32F103的優(yōu)先級(jí)寄存器只有最高4位有效,低四位是無效的。當(dāng)操作系統(tǒng)進(jìn)入臨界區(qū)時(shí),會(huì)把上面的可屏蔽中斷優(yōu)先級(jí)閾值寫入BASEPRI寄存器以屏蔽部分中斷:
132308vhe41gu087bexbud.png (2.31 KB, 下載次數(shù): 36)
下載附件
2018-1-29 01:52 上傳
因此當(dāng)進(jìn)入臨界區(qū)時(shí),優(yōu)先級(jí)對(duì)應(yīng)0xB~0xF的中斷均被屏蔽,而優(yōu)先級(jí)處于0xB前面的中斷不受影響。這個(gè)跟CM0有區(qū)別,也是最值得注意的地方。
上述的基礎(chǔ)知識(shí)不是小燈要重點(diǎn)提的,對(duì)CM3的優(yōu)先級(jí)不熟悉的朋友建議查閱《Cortex-M3權(quán)威指南》,接下來才是小燈要重點(diǎn)提的。由于使用@正點(diǎn)原子的開發(fā)板的用戶比較多,很多人直接把FreeRTOS移植到原子哥的工程下,然后出現(xiàn)了各種各樣的詭異問題,一直無解。其中一個(gè)非常嚴(yán)重的問題就是小燈上面提及到的中斷屏蔽的問題,下面小燈就這個(gè)問題進(jìn)行一個(gè)簡(jiǎn)單的分析,先貼上@正點(diǎn)原子的部分代碼:
133238gvmt44h4mvptth07.png (3.09 KB, 下載次數(shù): 34)
下載附件
2018-1-29 01:52 上傳
這是原子哥最常用的中斷優(yōu)先級(jí)分組方式,采用分組方式2,2位搶占優(yōu)先級(jí)2位亞優(yōu)先級(jí)。但是在移植FreeRTOS時(shí)必須要修改成優(yōu)先級(jí)分組方式4:
133238rbnw6mzrmbxw5pgr.png (2.18 KB, 下載次數(shù): 42)
下載附件
2018-1-29 01:52 上傳
把STM32的優(yōu)先級(jí)分組的4個(gè)位均設(shè)成搶占優(yōu)先級(jí),也就是說完全放棄亞優(yōu)先級(jí)。為何要這么設(shè)置?其實(shí)這得怪FreeRTOS機(jī)構(gòu)里面被驢踢過的逗逼,這些逗逼為了自己省事,直接默認(rèn)不使用亞優(yōu)先級(jí),下面讓大家見識(shí)下這群逗逼的解釋:
133238x22uyuez729pygg7.png (10.44 KB, 下載次數(shù): 52)
下載附件
2018-1-29 01:52 上傳
不過站在他們的角度來思考,其實(shí)我們也應(yīng)該給他們那么一丁點(diǎn)兒理解,畢竟他們采取了一個(gè)比較簡(jiǎn)單的方法來獲取不同廠商的單片機(jī)的有效優(yōu)先級(jí)位數(shù),算法是通過對(duì)優(yōu)先級(jí)寄存器組的某一個(gè)寄存器寫入0xFF,然后再讀出來看實(shí)際上有多少位寫入成功,然后根據(jù)實(shí)際的有效位數(shù)來重設(shè)優(yōu)先級(jí)分組寄存器的分組方式(上面提到的分組方式4)。有興趣的可以研究下他們的算法,代碼截圖在下面:
133239obrgzbppgrbbor6m.png (17.61 KB, 下載次數(shù): 47)
下載附件
2018-1-29 01:52 上傳
不知不覺越扯越遠(yuǎn)了,回歸正題,到底為何要重設(shè)可屏蔽的中斷優(yōu)先級(jí)閾值,我們重新把思路理一下。根據(jù)STM32的中斷優(yōu)先級(jí)的設(shè)計(jì),只有高4位有效,還有FreeRTOS默認(rèn)將4個(gè)優(yōu)先級(jí)位均劃分為搶占優(yōu)先級(jí)。由于FreeRTOS官方提供的中斷優(yōu)先級(jí)閾值是191(對(duì)應(yīng)實(shí)際的0xB),也就是11~15的優(yōu)先級(jí)均可被操作系統(tǒng)屏蔽。但我們實(shí)際使用時(shí)設(shè)置的中斷優(yōu)先級(jí)一般不會(huì)使用到11打后的,例如@正點(diǎn)原子的基礎(chǔ)例程里面使用最多的1~3,所以我們必須要修改這個(gè)值,否則我們要重新修改所有底層驅(qū)動(dòng)的優(yōu)先級(jí)。
那么怎么修改比較合理?這個(gè)就得看實(shí)際應(yīng)用需要了,其實(shí)使用宏configMAX_SYSCALL_INTERRUPT_PRIORITY來屏蔽部分中斷是比較合理的,相對(duì)于CM3,CM0沒有中斷優(yōu)先級(jí)閾值寄存器,只能簡(jiǎn)單粗暴的開啟全局中斷和關(guān)閉全局中斷。操作系統(tǒng)在執(zhí)行十分重要的工作時(shí)一般不能打斷這個(gè)工作,尤其是這時(shí)在中斷里面調(diào)用了操作系統(tǒng)的API函數(shù),這都會(huì)嚴(yán)重影響系統(tǒng)的穩(wěn)定性。小燈對(duì)configMAX_SYSCALL_INTERRUPT_PRIORITY的理解是,這個(gè)數(shù)值打后的所有中斷均劃入操作系統(tǒng)管理,而這個(gè)數(shù)值打前的中斷則歸由用戶自己管理,但用戶必須十分小心地處理這些中斷,用戶可以使用這些中斷來處理一些跟操作系統(tǒng)無關(guān)的工作。這純屬個(gè)人理解,如有錯(cuò)誤之處還請(qǐng)大家指出,小燈會(huì)盡快修改!
分析完configMAX_SYSCALL_INTERRUPT_PRIORITY的作用后,下面小燈提供一個(gè)參考值:
133239li6xrcrr4cw1c6iw.png (2.38 KB, 下載次數(shù): 47)
下載附件
2018-1-29 01:52 上傳
由于優(yōu)先級(jí)寄存器是高四位有效,因此上述的屏蔽閾值實(shí)際上是0x1,也就是說優(yōu)先級(jí)在1~15之間的中斷均可被操作系統(tǒng)屏蔽,而優(yōu)先級(jí)0歸由用戶自己控制。值得注意的是configMAX_SYSCALL_INTERRUPT_PRIORITY的高四位絕對(duì)不能設(shè)為0,下面小燈給出0x0F的仿真結(jié)果:
133239biiephbfzn44flli.png (829 Bytes, 下載次數(shù): 48)
下載附件
2018-1-29 01:52 上傳
133239aicsmzkc4tttef6y.png (6.71 KB, 下載次數(shù): 45)
下載附件
2018-1-29 01:52 上傳
當(dāng)configMAX_SYSCALL_INTERRUPT_PRIORITY設(shè)為0x0F時(shí)系統(tǒng)在進(jìn)入臨界區(qū)時(shí)BASEPRI寄存器的值一直為0,沒有更新。下面給出0x1F時(shí)的仿真結(jié)果:
133239vrcpa4czczvzpnst.png (820 Bytes, 下載次數(shù): 49)
下載附件
2018-1-29 01:52 上傳
133240y0j52zx8jhp38tgw.png (7.39 KB, 下載次數(shù): 32)
下載附件
2018-1-29 01:52 上傳
當(dāng)configMAX_SYSCALL_INTERRUPT_PRIORITY設(shè)為0x1F時(shí)系統(tǒng)在進(jìn)入臨界區(qū)時(shí)BASEPRI寄存器的值更新為0x10,中斷優(yōu)先級(jí)閾值寄存器起作用了!原因在上面也解釋過了,因?yàn)镾TM32F103的優(yōu)先級(jí)寄存器是高四位有效的,對(duì)應(yīng)的BASEPRI也是高四位能夠?qū)懭攵退奈粺o法寫入,而BASEPRI有一個(gè)特點(diǎn)——對(duì)它寫0會(huì)取消屏蔽所有中斷(相當(dāng)于禁用了該寄存器),因此BASEPRI的高四位一定不能設(shè)為0,否則不會(huì)屏蔽任何中斷,這點(diǎn)注意下就好了。
(3)添加參數(shù)檢測(cè)功能
133520g1d5dryr7f8sdz17.png (1.66 KB, 下載次數(shù): 43)
下載附件
2018-1-29 01:52 上傳
該參數(shù)檢測(cè)功能是官方提供的一個(gè)參考,很多人為了省事不使用參數(shù)檢測(cè),但小燈勸誡各位千萬不能干這蠢事!說了半天想必大家也累了,那么接下來就開始我們跑燈之旅吧!
下面就以LED創(chuàng)建兩個(gè)閃爍任務(wù):
133520y6rlksoovvpsgvh5.png (7.24 KB, 下載次數(shù): 56)
下載附件
2018-1-29 01:52 上傳
133520yo5pfehaqeh8uooa.png (9.6 KB, 下載次數(shù): 47)
下載附件
2018-1-29 01:52 上傳
至于LED底層驅(qū)動(dòng)代碼在工程里面提供了,在這不詳細(xì)解釋,讀者可自行修改。在main函數(shù)里首先設(shè)置中斷優(yōu)先級(jí)分組方式4,然后創(chuàng)建2個(gè)LED任務(wù),堆棧深度40個(gè)字(160字節(jié))即可,然后啟動(dòng)任務(wù)調(diào)度器,整個(gè)操作系統(tǒng)就能夠跑起來了。
重新編譯下工程,這時(shí)會(huì)提示有錯(cuò)誤:
133521hqhb63oaqay33uqu.png (5.9 KB, 下載次數(shù): 53)
下載附件
2018-1-29 01:52 上傳
133521zu4fol6x7r4fg84f.png (4.48 KB, 下載次數(shù): 35)
下載附件
2018-1-29 01:52 上傳
接下來我們需要屏蔽這些編譯錯(cuò)誤:
133521k6qcz6exq5bg63xx.png (19.7 KB, 下載次數(shù): 48)
下載附件
2018-1-29 01:52 上傳
在C/C++ Compiler的Diagostics里面添加Pa082,Pe191,Pe167
重新編譯一次:
133521b3oq33bbkvj1eqz1.png (982 Bytes, 下載次數(shù): 46)
下載附件
2018-1-29 01:52 上傳
編譯通過,下載到板子上后就能夠看到2個(gè)LED按照一定的頻率閃爍了!
三、MDK下移植FreeRTOS
由于在上面IAR移植過程中已經(jīng)把需要注意的事項(xiàng)詳細(xì),再次就不累述了,只給出移植過程。小燈使用的MDK版本是:
133522k3c3p1jxs4fsptco.png (17.83 KB, 下載次數(shù): 38)
下載附件
2018-1-29 01:52 上傳
至于MDK工程的新建,請(qǐng)參照@正點(diǎn)原子的教程資料,小燈就不搶原子哥風(fēng)頭了,哈哈!
工程沿襲了小燈一貫的簡(jiǎn)約作風(fēng):
133522jk0fof8zessgf99g.png (10.86 KB, 下載次數(shù): 39)
下載附件
2018-1-29 01:52 上傳
(1)添加FreeRTOS源文件:
133522fc02ezs2yc9q0cq9.png (3.25 KB, 下載次數(shù): 33)
下載附件
2018-1-29 01:52 上傳
源文件清單路徑如下:
FreeRTOS asks.c
FreeRTOSlist.c
FreeRTOSportableKeilARM_CM3port.c
FreeRTOSportableMemMangheap_4.c
注意這里的FreeRTOSConfig.h的來源小燈在上面IAR移植里面已經(jīng)詳細(xì)說明了,而且對(duì)FreeRTOSConfig.h里面的內(nèi)容做了大篇幅的分析,讀者請(qǐng)自行翻查,在此不再累述。
(2)添加頭文件路徑:
133522xjefjer7iimy1f1e.png (2.16 KB, 下載次數(shù): 48)
下載附件
2018-1-29 01:52 上傳
(3)修改stm32f10x_it.c文件:
133927zrra9lr974ay4rer.png (8.15 KB, 下載次數(shù): 33)
下載附件
2018-1-29 01:52 上傳
至于為了要修改該文件,小燈在上面IAR移植里面已經(jīng)詳細(xì)說明了,讀者請(qǐng)自行翻查,在此不再累述。
(4)創(chuàng)建兩個(gè)LED閃爍任務(wù):
133927t441z11z64m6144p.png (7.24 KB, 下載次數(shù): 35)
下載附件
2018-1-29 01:52 上傳
133928d0rn23653klc5kxh.png (9.6 KB, 下載次數(shù): 34)
下載附件
2018-1-29 01:52 上傳
代碼的解釋在IAR移植里面已經(jīng)詳細(xì)說明了,讀者請(qǐng)自行翻查,在此不再累述。
(5)編譯工程:
133522okpdh4ttpddphyhq.png (1.88 KB, 下載次數(shù): 42)
下載附件
2018-1-29 01:52 上傳
在MDK移植FreeRTOS相對(duì)來說順利很多,因?yàn)椴粫?huì)出現(xiàn)一大堆警告和錯(cuò)誤。接下來下載到板子,效果跟IAR移植后一樣,2個(gè)LED按照預(yù)定的頻率閃爍!
總結(jié):
FreeRTOS的移植難度并不大,只是有些地方需要注意,否則出問題了也完全找不出問題出在哪里。由于小燈習(xí)慣了使用IAR,習(xí)慣使用MDK的用戶如果看IAR的移植步驟可能會(huì)很不習(xí)慣,但兩者移植過程相仿,讀者只需要注意對(duì)應(yīng)的事項(xiàng)就好。鑒于小燈水平有限,文檔難免會(huì)有出錯(cuò)的地方,小燈也很希望各位能指出錯(cuò)誤之處或提供寶貴意見,小燈會(huì)及時(shí)修改,不勝感激!
FreeRTOS的官方網(wǎng)址為:http://www.freertos.org
133933z1ufufaacvz5qlud.jpg (17.15 KB, 下載次數(shù): 40)
下載附件
2018-1-29 01:52 上傳
下載:
FreeRTOS工程.rar
(631.66 KB, 下載次數(shù): 31)
2018-1-29 01:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
FreeRTOS移植到STM32F103步驟與注意事項(xiàng).pdf
(682.14 KB, 下載次數(shù): 26)
2018-1-29 01:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|