1、FreeRTOS的學(xué)習(xí)
1.1、FreeRTOS的源碼下載
學(xué)習(xí)一個操作系統(tǒng)前,首先要下載對應(yīng)的源碼,用于研究和學(xué)習(xí)。FreeRTOS的源碼下載鏈接如下:
https://sourceforge.net/projects/freertos/files/FreeRTOS/
頁面圖示如下:
下載之后的文件為:FreeRTOSv202012.00-LTS.exe.qbl
1.2、FreeRTOS在線API指南
FreeRTOS提供了在線的API接口的指南,這對于開發(fā)和學(xué)習(xí)都是非常的友好的,在線API指南的網(wǎng)址為:
http://web.ist.utl.pt/~ist11993/FRTOS-API/index.html
在線指南的示意圖如下:
1.3、在線應(yīng)用指南
除了在線的API應(yīng)用指南之外,還有一個在線的開發(fā)指導(dǎo)手冊,是非常好用的一份手冊:
https://www.freertos.org/RTOS.html
圖示如下:
2、FreeRTOS移植到MCU上
0.基于STM32F103的移植,其它系列MCU類似。
硬件平臺: STM32F103ZET6 ;
軟件平臺:MDK529
FreeTROS版本:FreeRTOS Kernel V10.4.3
1.在工程目錄下新建FreeRTOS文件夾,該文件夾用于存放FreeRTOS相關(guān)的文件。
2.在FreeRTOSv10.2.1FreeRTOSSource路徑下找到FreeRTOS的源碼,將其拷貝到工程中的FreeRTOS文件夾中。
其中頭文件和源碼源文件是全部要用到的,不做任何刪除。
portable文件夾是和硬件平臺,軟件開發(fā)環(huán)境相關(guān)的文件。FreeRTOS為了讓用戶移植簡單,幫用戶做了很多工作。打開portable文件夾如下:
3.打開工程,在工程中添加一個專用來存放FreeRTOS的Group
將FreeRTOS的源文件,內(nèi)存管理文件,硬件接口文件統(tǒng)統(tǒng)添加到這個FreeRTOS這個Group中
內(nèi)存管理文件在FreeRTOSportableMemMang文件夾下,F(xiàn)reeRTOS提供了五種內(nèi)存管理方案,對于移植來說,隨便選一種方案都是可以的。但是heap_4有內(nèi)存碎片管理的功能,對內(nèi)存碎片可以自動監(jiān)控和收集,所以選擇這個內(nèi)存管理會更好。
port.c文件在FreeRTOSportableRVDS路徑下找到與自己使用的MCU內(nèi)核的文件夾:
4.添加頭文件路徑,需要添加兩個路徑。
5.編譯
便已完成之后,提示打不開FreeRTOSConfig.h這個文件。這是因為FreeRTOS源碼中并沒有提供這個文件。
這種情況下有兩種辦法:
第一、自己動手寫一個(哈哈,個人覺得這個對一般人來說不現(xiàn)實);
第二、找一個可以直接用的。
仔細找找會發(fā)現(xiàn),其實官方在很多平臺下都移植了FreeRTOS。去官方的demo中找,F(xiàn)reeRTOSv10.2.1FreeRTOSDemo路徑下存放的全是官方移植的demo。在此路徑下找到CORTEX_STM32F103_Keil文件夾,此文件夾是官方基于STM32F103和MDK平臺移植的demo。(其他平臺參考該方式類似的查找)
在此文件夾下找到FreeRTOSConfig.h文件。
將其拷貝到源碼的頭文件中。重新進行編譯。
這種情況下,只要使能一個有關(guān)的宏定義為1即可以,在FreeRTOSConfig.h文件中將宏INCLUDE_xTaskGetCurrentTaskHandle定義為1,使能該函數(shù),重新編譯一下,應(yīng)該就不會報錯了。
6.添加三個宏定義
首先我們需要對FreeRTOS的幾個很重要的問題要有一個認識:
<1> FreeRTOS觸發(fā)第一個任務(wù)是在SVC_Handler中斷中進行的;
<2> 切換任務(wù)是在PendSV_Handler中斷中進行的;
<3> 系統(tǒng)節(jié)拍中斷是在SysTick_Handler中進行的。
在我們自己移植的項目中,官方的文件中對3個函數(shù)的定義是沒有的,需要我們自己進行一些修改。
在官方的提供的文件中,實現(xiàn)了另外3個相關(guān)的函數(shù),名字分別是:
vPortSVCHandler
xPortPendSVHandler
xPortSysTickHandler。
所以,我們只需要根據(jù)自己所用的MCU環(huán)境進行相應(yīng)的替換即可以對應(yīng)上了。在FreeRTOSConfig.h頭文件中做一下宏定義就可以了。注意要將自己的原來3個空函數(shù)注釋掉。
這三個宏定義非常重要!!!
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
其中,xPortSysTickHandler是系統(tǒng)滴答定時器中斷,用于給FreeRTOS提供運行的心跳節(jié)拍的,代碼示意如下:
void xPortSysTickHandler( void )
{
/* The SysTick runs at the lowest interrupt priority, so when this interrupt
* executes all interrupts must be unmasked. There is therefore no need to
* save and then restore the interrupt mask value as its value is already
* known - therefore the slightly faster vPortRaiseBASEPRI() function is used
* in place of portSET_INTERRUPT_MASK_FROM_ISR(). */
vPortRaiseBASEPRI();
{
/* Increment the RTOS tick. */
if( xTaskIncrementTick() != pdFALSE )
{
/* A context switch is required. Context switching is performed in
* the PendSV interrupt. Pend the PendSV interrupt. */
portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
}
}
vPortClearBASEPRIFromISR();
}
-
移植
+關(guān)注
關(guān)注
1文章
395瀏覽量
28617 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
492瀏覽量
63958 -
內(nèi)存管理
+關(guān)注
關(guān)注
0文章
168瀏覽量
14516
發(fā)布評論請先 登錄
STM32CubeMX生成的FreeRTOS源碼格式如何優(yōu)化?

#硬聲創(chuàng)作季 2.1-FreeRTOS移植--FreeRTOS源碼下載
求freertos源碼的過程?
如何移植FreeRTOS的源碼
如何添加FreeRTOS源碼
下載并整理FreeRTOS源碼
freertos官方源碼
FreeRTOS的移植與FreeRTOS源碼文件作用介紹
FreeRTOS系列第8篇---FreeRTOS內(nèi)存管理

評論