0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FreeRTOS的源碼下載

汽車電子技術(shù) ? 來源:嵌入式之入坑筆記 ? 作者:嵌入式之入坑筆記 ? 2023-02-10 11:00 ? 次閱讀

1、FreeRTOS的學(xué)習(xí)

1.1、FreeRTOS的源碼下載

學(xué)習(xí)一個(gè)操作系統(tǒng)前,首先要下載對(duì)應(yīng)的源碼,用于研究和學(xué)習(xí)。FreeRTOS的源碼下載鏈接如下:

https://sourceforge.net/projects/freertos/files/FreeRTOS/

頁面圖示如下:

圖片

下載之后的文件為:FreeRTOSv202012.00-LTS.exe.qbl

1.2、FreeRTOS在線API指南

FreeRTOS提供了在線的API接口的指南,這對(duì)于開發(fā)和學(xué)習(xí)都是非常的友好的,在線API指南的網(wǎng)址為:

http://web.ist.utl.pt/~ist11993/FRTOS-API/index.html

在線指南的示意圖如下:

圖片

1.3、在線應(yīng)用指南

除了在線的API應(yīng)用指南之外,還有一個(gè)在線的開發(fā)指導(dǎo)手冊(cè),是非常好用的一份手冊(cè):

https://www.freertos.org/RTOS.html

圖示如下:

圖片

2、FreeRTOS移植到MCU

0.基于STM32F103的移植,其它系列MCU類似。

硬件平臺(tái): STM32F103ZET6 ;

軟件平臺(tái):MDK529

FreeTROS版本:FreeRTOS Kernel V10.4.3

1.在工程目錄下新建FreeRTOS文件夾,該文件夾用于存放FreeRTOS相關(guān)的文件。

圖片

2.在FreeRTOSv10.2.1FreeRTOSSource路徑下找到FreeRTOS的源碼,將其拷貝到工程中的FreeRTOS文件夾中。

圖片

其中頭文件和源碼源文件是全部要用到的,不做任何刪除。

portable文件夾是和硬件平臺(tái),軟件開發(fā)環(huán)境相關(guān)的文件。FreeRTOS為了讓用戶移植簡(jiǎn)單,幫用戶做了很多工作。打開portable文件夾如下:

圖片

3.打開工程,在工程中添加一個(gè)專用來存放FreeRTOS的Group

圖片

將FreeRTOS的源文件,內(nèi)存管理文件,硬件接口文件統(tǒng)統(tǒng)添加到這個(gè)FreeRTOS這個(gè)Group中

圖片

內(nèi)存管理文件在FreeRTOSportableMemMang文件夾下,F(xiàn)reeRTOS提供了五種內(nèi)存管理方案,對(duì)于移植來說,隨便選一種方案都是可以的。但是heap_4有內(nèi)存碎片管理的功能,對(duì)內(nèi)存碎片可以自動(dòng)監(jiān)控和收集,所以選擇這個(gè)內(nèi)存管理會(huì)更好。

port.c文件在FreeRTOSportableRVDS路徑下找到與自己使用的MCU內(nèi)核的文件夾:

圖片

4.添加頭文件路徑,需要添加兩個(gè)路徑。

圖片

5.編譯

圖片

便已完成之后,提示打不開FreeRTOSConfig.h這個(gè)文件。這是因?yàn)镕reeRTOS源碼中并沒有提供這個(gè)文件。

這種情況下有兩種辦法:

第一、自己動(dòng)手寫一個(gè)(哈哈,個(gè)人覺得這個(gè)對(duì)一般人來說不現(xiàn)實(shí));

第二、找一個(gè)可以直接用的。

仔細(xì)找找會(huì)發(fā)現(xiàn),其實(shí)官方在很多平臺(tái)下都移植了FreeRTOS。去官方的demo中找,F(xiàn)reeRTOSv10.2.1FreeRTOSDemo路徑下存放的全是官方移植的demo。在此路徑下找到CORTEX_STM32F103_Keil文件夾,此文件夾是官方基于STM32F103和MDK平臺(tái)移植的demo。(其他平臺(tái)參考該方式類似的查找)

在此文件夾下找到FreeRTOSConfig.h文件。

圖片

將其拷貝到源碼的頭文件中。重新進(jìn)行編譯。

圖片

這種情況下,只要使能一個(gè)有關(guān)的宏定義為1即可以,在FreeRTOSConfig.h文件中將宏INCLUDE_xTaskGetCurrentTaskHandle定義為1,使能該函數(shù),重新編譯一下,應(yīng)該就不會(huì)報(bào)錯(cuò)了。

6.添加三個(gè)宏定義

首先我們需要對(duì)FreeRTOS的幾個(gè)很重要的問題要有一個(gè)認(rèn)識(shí):

<1> FreeRTOS觸發(fā)第一個(gè)任務(wù)是在SVC_Handler中斷中進(jìn)行的;
<2> 切換任務(wù)是在PendSV_Handler中斷中進(jìn)行的;
<3> 系統(tǒng)節(jié)拍中斷是在SysTick_Handler中進(jìn)行的。

在我們自己移植的項(xiàng)目中,官方的文件中對(duì)3個(gè)函數(shù)的定義是沒有的,需要我們自己進(jìn)行一些修改。

在官方的提供的文件中,實(shí)現(xiàn)了另外3個(gè)相關(guān)的函數(shù),名字分別是:

vPortSVCHandler
xPortPendSVHandler
xPortSysTickHandler。

所以,我們只需要根據(jù)自己所用的MCU環(huán)境進(jìn)行相應(yīng)的替換即可以對(duì)應(yīng)上了。在FreeRTOSConfig.h頭文件中做一下宏定義就可以了。注意要將自己的原來3個(gè)空函數(shù)注釋掉。

這三個(gè)宏定義非常重要!!!

#define xPortPendSVHandler       PendSV_Handler
#define vPortSVCHandler           SVC_Handler
#define xPortSysTickHandler        SysTick_Handler

其中,xPortSysTickHandler是系統(tǒng)滴答定時(shí)器中斷,用于給FreeRTOS提供運(yùn)行的心跳節(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();
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    375

    瀏覽量

    28011
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61724
  • 內(nèi)存管理
    +關(guān)注

    關(guān)注

    0

    文章

    167

    瀏覽量

    14099
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 2.1-FreeRTOS移植--FreeRTOS源碼下載

    操作系統(tǒng)移植RTOSFreeRTOS
    Mr_haohao
    發(fā)布于 :2022年08月23日 10:59:27

    freertos源碼的過程?

    看了freertos很久了??词?b class='flag-5'>源碼看的迷迷糊糊原來打算各個(gè)擊破 。list.C算是看懂了。目前就不知道咋辦了?請(qǐng)高手講下自己看懂freertos的經(jīng)歷。 (另外,我以前沒有看懂過ucos代碼)
    發(fā)表于 06-18 09:00

    如何移植FreeRTOS源碼

    開發(fā)板后贈(zèng)與的光盤內(nèi)找到,路徑:A盤->軟件資料->FreeRTOS學(xué)習(xí)資料->FreeRTOS源碼,之后點(diǎn)擊程序下載移植步驟:1.復(fù)制粘貼于基礎(chǔ)工程中新建一個(gè)文件夾,可命名為
    發(fā)表于 08-03 06:12

    如何添加FreeRTOS源碼

    目錄1、源碼準(zhǔn)備2、創(chuàng)建FreeRTOS文件夾3、在工程中添加FreeRTOS源碼4、添加對(duì)應(yīng)的頭文件路徑5、編譯及錯(cuò)誤解決5.1 找不到FreeRTOSConfig.h文件5.2
    發(fā)表于 08-04 07:01

    下載并整理FreeRTOS源碼

    一、下載并整理FreeRTOS源碼下載壓縮包解壓打開解壓后的文件夾打開FreeRTOS–Source–portable文件夾再打開RVDS文
    發(fā)表于 08-24 07:49

    如何移植FreeRTOS最簡(jiǎn)源碼?

    如何移植FreeRTOS最簡(jiǎn)源碼?
    發(fā)表于 11-29 08:00

    freertos官方源碼

    源碼包有2個(gè),一個(gè)是FreeRTOS 202111.00,一個(gè)是FreeRTOS LTS 202012.03。兩個(gè)源碼包各有區(qū)別:FreeRTOS
    發(fā)表于 12-06 16:53

    FreeRTOS源碼介紹

    0. 引言之前freeRTOS用過幾次,但是項(xiàng)目趕工的急,一直沒有認(rèn)真的去里面看過,最近正好有空,準(zhǔn)備到里面看下源碼實(shí)現(xiàn),畢竟核心文件就這么幾個(gè),認(rèn)真看一下流程,對(duì)操作系統(tǒng)的雛形也就有一個(gè)認(rèn)識(shí)了
    發(fā)表于 02-14 07:42

    FreeRTOS的移植與FreeRTOS源碼文件作用介紹

    文章目錄一、實(shí)時(shí)操作系統(tǒng)二、FreeRTOS三、移植FreeRTOS的準(zhǔn)備工作(一)、FreeRTOS源碼文件作用介紹1、include文件夾(1)、include/croutine.
    發(fā)表于 02-18 06:13

    FreeRTOS操作系統(tǒng)源碼V3.2

    FreeRTOS操作系統(tǒng)源碼V3.2
    發(fā)表于 03-26 15:24 ?94次下載

    FreeRTOS_002_ 源碼文件描述與提取建立工程

    FreeRTOS_002_源碼文件描述與提取建立工程
    的頭像 發(fā)表于 03-14 11:47 ?2363次閱讀
    <b class='flag-5'>FreeRTOS</b>_002_ <b class='flag-5'>源碼</b>文件描述與提取建立工程

    freertos移植教程_freertos任務(wù)調(diào)度原理

    在移植之前,我們首先要獲取到FreeRTOS的官方的源碼包。
    發(fā)表于 04-16 09:16 ?1.2w次閱讀
    <b class='flag-5'>freertos</b>移植教程_<b class='flag-5'>freertos</b>任務(wù)調(diào)度原理

    FreeRTOS系列第8篇---FreeRTOS內(nèi)存管理

    本文介紹內(nèi)存管理的基礎(chǔ)知識(shí),詳細(xì)源碼分析見《 FreeRTOS高級(jí)篇7---FreeRTOS內(nèi)存管理分析》
    發(fā)表于 01-26 17:56 ?17次下載
    <b class='flag-5'>FreeRTOS</b>系列第8篇---<b class='flag-5'>FreeRTOS</b>內(nèi)存管理

    STM32FreeRTOS學(xué)習(xí)資料分享

    內(nèi)含STM32 FreeRTOS源碼 以及詳細(xì)的源碼使用教程、以及低功耗設(shè)計(jì)思路等。
    發(fā)表于 10-17 14:17 ?25次下載

    freeRTOS源碼中內(nèi)存管理的方案

    freeRTOS源碼中提供了五種內(nèi)存管理的方案,可以說是很方便了。實(shí)際需要使用哪一種,可以根據(jù)自己項(xiàng)目的需要進(jìn)行選擇,都是可以的。
    的頭像 發(fā)表于 02-10 11:11 ?637次閱讀