99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

如何將FreeRTOS移植到一個(gè)全新平臺(tái)?

安芯教育科技 ? 來(lái)源:極術(shù)社區(qū) ? 作者:朱工 ? 2021-02-14 16:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

FreeRTOS下載包中已經(jīng)包含很多演示例程- 每一個(gè)例程都是針對(duì)于:

特定的微控制器;

特定的開(kāi)發(fā)工具(編譯器、調(diào)試器等等);

特定的硬件平臺(tái)(樣機(jī)或評(píng)估板)。

可以在官方網(wǎng)站首頁(yè)左側(cè)的樹(shù)形菜單 ‘Supported Devices’ 中找到這些例程介紹。 可惜的是不可能為所有微控制器、編譯器和評(píng)估板提供演示例程。因此,官方提供的演示例程可能不完全符合你正在使用的開(kāi)發(fā)平臺(tái)。本章描述如何通過(guò)修改或合并官方提供的演示例程,來(lái)滿(mǎn)足自己的開(kāi)發(fā)平臺(tái)需求(包括微處理器和編譯器)。 修改一個(gè)現(xiàn)有的評(píng)估板例程,使之運(yùn)行到另一個(gè)同類(lèi)評(píng)估板上,通常是比較簡(jiǎn)單的,稍微復(fù)雜些的是跨編譯器移植。本文介紹這兩情況下的修改,只是對(duì)相似的平臺(tái)有效。然而,將FreeRTOS移植到一個(gè)全新的平臺(tái)、未支持的處理器架構(gòu),并不是件簡(jiǎn)單的事情。本文不討論如何將FreeRTOS移植到一個(gè)全新平臺(tái)。

1.修改例程使之運(yùn)行到不同評(píng)估板

本節(jié)描述如何通過(guò)修改一個(gè)官方提供的演示例程,使之運(yùn)行到另一個(gè)評(píng)估板,這里兩個(gè)評(píng)估板使用同系列微處理器,使用相同編譯器。在這個(gè)例子中,將運(yùn)行于SAM7S-EK硬件開(kāi)發(fā)板上的IAR SAM7S演示例程,修改使之運(yùn)行到Olimex SAM7-P64開(kāi)發(fā)板。(注:兩塊開(kāi)發(fā)板都是使用ATMEL公司的ARM7微處理器,前者使用AT91SAM7S256,后者使用AT91SAM7S64)

1.1初始編譯

作為修改練習(xí)的起點(diǎn),被修改的演示例程是要能使用的。因此,在未做任何修改之前,首先檢查下載的演示例程能否被正確的編譯。絕大多數(shù)情況下,演示例程編譯后是沒(méi)有任何錯(cuò)誤和警告的。 關(guān)于演示例程所在目錄,參考《FreeRTOS系列第2篇---FreeRTOS入門(mén)指南》一文的第三節(jié)。

1.2修改LED IO端口

LED燈是用來(lái)指示演示例程運(yùn)行的最簡(jiǎn)單方法,因此點(diǎn)亮新硬件平臺(tái)上的LED燈通常是最容易的。 兩個(gè)不同評(píng)估板上的LED連接到相同的IO端口通常是不太可能的,因此,一些小幅度修改是必須的。 在partest.c文件中的vParTestInitialise() 函數(shù)包含IO端口的模式和方向配置。在main.c文件中的prvSetupHardware()函數(shù)包含更多的硬件初始化(比如,使能IO外設(shè)的時(shí)鐘模塊),可能需要根據(jù)不同的使用進(jìn)行一些修改。 根據(jù)目標(biāo)評(píng)估板的硬件,在上面兩個(gè)函數(shù)中做必要的修改,然后寫(xiě)一段簡(jiǎn)單程序,來(lái)檢查硬件LED是否完好。這個(gè)簡(jiǎn)單程序不使用FreeRTOS,只是為了確保硬件LED能夠正常工作。因此,注釋掉之前的main()函數(shù),使用下面的例子代替:

int main( void ) { volatile unsigned long ul; /* 禁止編譯器優(yōu)化此變量 */ /* 初始化LED IO為輸出-注:prvSetupHardware()也可能會(huì)被調(diào)用*/ vParTestInitialise(); /*不斷開(kāi)啟LED */ for( ;; ) { /* 我們暫時(shí)不使用RTOS,這里只是使用一個(gè)非常粗糙的延時(shí)*/ for( ul = 0; ul 《 0xfffff; ul++ ) { } /* 開(kāi)啟4個(gè)LED */ vParTestToggleLED( 0 ); vParTestToggleLED( 1 ); vParTestToggleLED( 2 ); vParTestToggleLED( 3 ); } return 0; }

1.3 RTOS調(diào)度器簡(jiǎn)介

一旦確定硬件LED可以正常工作,就可以恢復(fù)原來(lái)的main()函數(shù)。 作為入門(mén)級(jí)的多任務(wù)應(yīng)用程序應(yīng)該盡量的簡(jiǎn)單,LED閃爍測(cè)試程序常常擔(dān)任這樣的角色,可以堪比經(jīng)典的“Hello Wold”。這個(gè)任務(wù)幾乎在所有演示例程中都能看到,在main()函數(shù)中調(diào)用vStartLEDFlashTasks() (使用協(xié)程版本時(shí)調(diào)用vStartFlashCoRoutines())來(lái)實(shí)現(xiàn)。如果你使用的演示例程main()函數(shù)中并沒(méi)有調(diào)用vStartLEDFlashTasks()(或vStartFlashCoRoutines()),那么需要你將FreeRTOS/Demo/Common/Minimal/Flash.c文件添加到你的工程,并在main()函數(shù)手動(dòng)的增加vStartLEDFlashTasks()函數(shù)。 除了調(diào)用vStartLEDFlashTasks()外,注釋掉所有用于啟動(dòng)一個(gè)或多個(gè)演示任務(wù)的函數(shù)。最后的main()函數(shù)僅調(diào)用三個(gè)函數(shù):prvSetupHardware()、vStartLEDFlashTasks()和vTaskStartScheduler()。例如(基于典型的main()函數(shù)):

int main( void ) { /* 設(shè)置用于演示的微控制器硬件 */ prvSetupHardware(); /* 留下這個(gè)函數(shù) */ vCreateFlashTasks(); /* 所有的其它創(chuàng)建任務(wù)的函數(shù)統(tǒng)統(tǒng)注釋掉 vCreatePollQTasks(); vCreateComTestTasks(); //等等… xTaskCreate( vCheckTask,“check”, STACK_SIZE, NULL, TASK_PRIORITY, NULL ); */ /*啟動(dòng)RTOS調(diào)度器。 */ vTaskStartScheduler(); /* 永遠(yuǎn)不會(huì)執(zhí)行到這里! */ return 0; } 這是一個(gè)非常簡(jiǎn)單的應(yīng)用程序,正確執(zhí)行后,LED0~2(包括2)或分別按照不同的頻率閃爍。

1.4 收尾工作

一旦簡(jiǎn)單的LED閃爍例程正確執(zhí)行后,你可以恢復(fù)之前注釋掉的所有的演示任務(wù)。 以下要點(diǎn)需牢記: 如果你使用的演示例程最初并沒(méi)有調(diào)用vTaskCreateFlashTasks()函數(shù),而是手動(dòng)的增加了這個(gè)函數(shù),那么應(yīng)該再手動(dòng)的刪除掉這個(gè)函數(shù)。主要有兩個(gè)方面的原因:第一是這個(gè)LED閃爍任務(wù)用到的IO可能也被演示例程的其它任務(wù)使用,第二是演示例程可能已經(jīng)占用了所有的RAM,已經(jīng)沒(méi)有空余RAM用來(lái)增加新的任務(wù)。

標(biāo)準(zhǔn)的“通訊測(cè)試(comtest)”(如果演示例程中有的話(huà))任務(wù)使用到微控制器的一個(gè)UART外設(shè)。檢測(cè)硬件是可用的。

有些外設(shè)不進(jìn)行修改就想用于任何不同的硬件或接口是不可能的,比如LCD。

2.合并或修改官方演示工程

本節(jié)主要描述如何修改一個(gè)現(xiàn)存的工程或者按照需求合并兩個(gè)現(xiàn)存的工程。比如,你希望使用GCC編譯器創(chuàng)建一個(gè)STR9演示工程(demo project),并且你下載的FreeRTOS軟件包中并沒(méi)有GCC版本的STR9演示例程,但是FreeRTOS下載包中有IAR版本的STR9演示例程和GCC版本的STR75x演示例程。則可以通過(guò)這兩個(gè)現(xiàn)存的工程來(lái)創(chuàng)建GCC版本的STR9演示工程??梢杂袃煞N方式完成: 使用GCC版本的STR75x演示工程,修改使之符合指定的微處理器(STR9評(píng)估板上的微處理器)。 使用GCC創(chuàng)建一個(gè)新的工程。從IAR版本的STR9演示工程中獲取文件和配置信息,使之符合GCC編譯器需求。

2.1識(shí)別用于特定微控制器的FreeRTOS內(nèi)核文件

對(duì)于一個(gè)特定平臺(tái),大多數(shù)(不是全部)硬件接口代碼包含在一個(gè)叫做FreeRTOS/source/portable/[編譯器]/[微控制器/port.c的文件中,和它對(duì)應(yīng)的頭文件是FreeRTOS/source/portable/[編譯器]/[微控制器]/portmacro.h。 對(duì)于一些編譯器來(lái)說(shuō),port.c和portmacro.h就是所需要的全部硬件接口代碼。另一些還需要一些匯編文件,這些文件叫做portasm.s或者portasm.asm。 最后,僅對(duì)于ARM7 GCC移植,同樣存在一個(gè)類(lèi)似的硬件接口文件:portISR.c,portISR.c是從port.c中分離出來(lái)的,這些代碼必須在ARM模式下編譯,port.c中剩余的代碼既可以在ARM模式下編譯,也可在THUMB模式下編譯。

2.2識(shí)別用于特定編譯器的文件

編譯器可以為嵌入式系統(tǒng)提供某些特定的C語(yǔ)言擴(kuò)展。比如某個(gè)特定關(guān)鍵字可以標(biāo)識(shí)出一個(gè)函數(shù)是中斷處理服務(wù)函數(shù)。 擴(kuò)展的C語(yǔ)言部分,是不屬于標(biāo)準(zhǔn)C語(yǔ)言規(guī)范的。因此,編譯器與編譯器之間是有差別的。FreeRTOS的文件中就包含類(lèi)似的非標(biāo)準(zhǔn)C語(yǔ)言語(yǔ)法,在文件夾FreeRTOS/source/portable中(上文中提到的特定微控制器硬件接口代碼也在這個(gè)文件中)。此外,一些演示例程會(huì)使用到中斷服務(wù)程序,這些中斷服務(wù)程序并不屬于FreeRTOS的一部分,并且如何定義和使用這些中斷服務(wù)程序也是編譯器所特定的。

2.3硬件底層文件

C啟動(dòng)文件和鏈接腳本都屬于處理器和編譯器特定的。不推薦嘗試從無(wú)到有的創(chuàng)建這些文件,應(yīng)該到FreeRTOS演示工程中尋找一個(gè)合適的來(lái)修改。 要特別小心ARM7啟動(dòng)文件。它必須將IRQ中斷服務(wù)程序入口地址配置到快速中斷處理向量表或者普通中斷向量表中。這兩種情況,演示工程都提供了例子。 鏈接腳本必須正確的描述當(dāng)前使用處理器的內(nèi)存映射。

2.4工程設(shè)置

每一個(gè)工程通常都會(huì)定義一些宏,這些預(yù)處理宏定義了一些要被編譯的特定的硬件接口代碼。要包含portmacro.h文件才能識(shí)別這些宏。比如,當(dāng)使用GCC編譯MegaAVR硬件接口代碼時(shí),宏GCC_MEGA_AVR必須被定義;當(dāng)使用IAR編譯MegaAVR硬件接口代碼時(shí),宏IAR_MEGA_AVR必須被定義等等。參考演示例程工程以及FreeRTOS/source/include/portable.h文件可以查找當(dāng)前工程定義了那些宏。如果預(yù)處理宏未定義,那么portmacro.h文件所在目錄的路徑必須被包含到預(yù)處理器的搜索路徑中。 其它的編譯器設(shè)置,比如優(yōu)化選項(xiàng),也是很關(guān)鍵的。可以參考提供的演示工程。 具有IDE的編譯器通常具有目標(biāo)微控制器選項(xiàng)并將它作為工程設(shè)置的一部分,所以新的工程也必須適應(yīng)新的目標(biāo)微控制器,同樣的,如果使用到makefile文件,則makefile文件也必須更新以符合新的目標(biāo)微控制器。

2.5配置系統(tǒng)節(jié)拍時(shí)鐘中斷

調(diào)用函數(shù)prvSetupTimerInterrupt()來(lái)配置系統(tǒng)節(jié)拍中斷,這個(gè)函數(shù)可以在以下路徑的文件中找到: FreeRTOS/source/portable/[compiler]/[microcontroller]/port.c

2.6 RAM和ROM的使用

FreeRTOS內(nèi)存管理一章中描述了FreeRTOS如何使用RAM,并且描述了RAM是如何分配給RTOS內(nèi)核的。 如果你要將演示例程移植到一個(gè)RAM稍小的微處理器上,那么你可能需要減少configTOTAL_HEAP_SIZE的值(位于FreeRTOSConfig.h),并且減少演示例程的任務(wù)個(gè)數(shù)??梢酝ㄟ^(guò)簡(jiǎn)單的注釋掉不需要的任務(wù)來(lái)實(shí)現(xiàn)。 如果你要將演示例程移植到一個(gè)ROM較小的微處理器中,那么你可能需要減少應(yīng)用例程的文件數(shù)目,他們位于FreeRTOS/Demo/common文件夾目錄下。同時(shí)你還要?jiǎng)h除main函數(shù)中對(duì)他們的調(diào)用函數(shù)。 注:可能你是通過(guò)搜索引擎找到這篇文章,滿(mǎn)懷希望的點(diǎn)進(jìn)來(lái),以為能解決自己移植的所有問(wèn)題,但是看完后卻發(fā)現(xiàn)本文站的角度太高,并不是特別適合對(duì)移植一無(wú)所知的你。

原文標(biāo)題:FreeRTOS系列第3篇---FreeRTOS移植指南

文章出處:【微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19884

    瀏覽量

    235016
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17095

    瀏覽量

    184136
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3483

    瀏覽量

    67466
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    492

    瀏覽量

    64293

原文標(biāo)題:FreeRTOS系列第3篇---FreeRTOS移植指南

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    移植LWIP+FREERTOS時(shí)遇到的問(wèn)題怎么解決?

    ST官網(wǎng)的LWIP1.4.1 的例子(關(guān)于LWIP的部分)移植步驟1 的FreeRTOS 系統(tǒng)的工程里面,只是添加LWIP初始化的任務(wù),并沒(méi)有調(diào)用任何接口的情況下可以Ping 通
    發(fā)表于 03-11 06:48

    SPC56 P系列MCU移植FreeRTOS,port.c文件應(yīng)該使用portable文件夾下的哪一個(gè)

    SPC56 P系列MCU移植FreeRTOS,port.c文件應(yīng)該使用portable文件夾下的哪一個(gè),感謝前輩們指導(dǎo)
    發(fā)表于 03-07 06:35

    如何將RT-Thread移植NXP MCUXPressoIDE上

    RT-Thread默認(rèn)支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植NXP MCUXPressoIDE上呢?本文內(nèi)容比較簡(jiǎn)單但稍有瑣碎,希望對(duì)有需要的小伙伴有所幫助。
    的頭像 發(fā)表于 02-13 10:37 ?1898次閱讀
    <b class='flag-5'>如何將</b>RT-Thread<b class='flag-5'>移植</b><b class='flag-5'>到</b>NXP MCUXPressoIDE上

    如何將python文件導(dǎo)入ROS系統(tǒng)中

    本文通過(guò)使用myCobot機(jī)械臂進(jìn)行QR碼視覺(jué)追蹤的實(shí)踐案例分析,介紹如何將 python 文件導(dǎo)入 ROS 系統(tǒng)中。
    的頭像 發(fā)表于 02-11 11:08 ?792次閱讀
    <b class='flag-5'>如何將</b>python文件導(dǎo)入<b class='flag-5'>到</b>ROS系統(tǒng)中

    藍(lán)鵬測(cè)控?cái)?shù)據(jù)采集新平臺(tái)適配機(jī)型 再添款雙軸測(cè)徑儀

    藍(lán)鵬測(cè)控新平臺(tái)適配機(jī)型再添款雙軸測(cè)徑儀,這消息標(biāo)志著藍(lán)鵬測(cè)控在跨行業(yè)應(yīng)用和技術(shù)創(chuàng)新方面取得了新的進(jìn)展。 藍(lán)鵬測(cè)控新代的測(cè)控平臺(tái)LP-S
    發(fā)表于 01-14 14:39

    玻色量子助力南京量子計(jì)算產(chǎn)業(yè)創(chuàng)新平臺(tái)發(fā)布

    近日,由南京市玄武區(qū)人民政府、北京電子城高科技集團(tuán)股份有限公司(以下簡(jiǎn)稱(chēng)“電子城高科”)主辦,北京玻色量子科技有限公司(以下簡(jiǎn)稱(chēng)“玻色量子”)等支持的“量子計(jì)算產(chǎn)業(yè)創(chuàng)新平臺(tái)發(fā)布暨玄武區(qū)未來(lái)產(chǎn)業(yè)創(chuàng)新交流會(huì)”在南京盛大召開(kāi)。
    的頭像 發(fā)表于 12-20 16:51 ?855次閱讀

    OpenAI正式推出Canvas:寫(xiě)作編碼新平臺(tái),支持Python

    近日,OpenAI在連續(xù)發(fā)布新功能的節(jié)奏中,正式向全體ChatGPT用戶(hù)開(kāi)放了全新交互界面Canvas。這款工具基于OpenAI最新的GPT-4o模型,旨在為用戶(hù)提供個(gè)強(qiáng)大的寫(xiě)作和編碼協(xié)作
    的頭像 發(fā)表于 12-12 10:06 ?710次閱讀

    TPA3118在解MUTE時(shí)會(huì)出現(xiàn)popo音,怎么解決?

    我這邊新平臺(tái)使用了TPA3118功放芯片,目前發(fā)現(xiàn)在解MUTE時(shí)(電平由高低)會(huì)出現(xiàn)popo音,測(cè)量功放輸出發(fā)現(xiàn)在解MUTE時(shí)會(huì)有過(guò)沖振鈴,從而導(dǎo)致popo音。 MUTE和解MUTE是否有相關(guān)時(shí)序?是否有辦法消除此類(lèi)popo?單端輸入
    發(fā)表于 10-25 14:22

    如何將WOLFSSL移植TI Sitara AM335入門(mén)套件

    電子發(fā)燒友網(wǎng)站提供《如何將WOLFSSL移植TI Sitara AM335入門(mén)套件.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 11:29 ?1次下載
    <b class='flag-5'>如何將</b>WOLFSSL<b class='flag-5'>移植</b><b class='flag-5'>到</b>TI Sitara AM335入門(mén)套件

    如何在RT-thread studio的裸機(jī)例程上移植freertos?

    如何在RT-thread studio的裸機(jī)例程上移植freertos
    發(fā)表于 09-13 06:32

    freertos最多支持多少個(gè)任務(wù)

    FreeRTOS個(gè)輕量級(jí)的實(shí)時(shí)操作系統(tǒng)(RTOS),其設(shè)計(jì)初衷就是為了提供簡(jiǎn)單、可靠且高效的實(shí)時(shí)任務(wù)管理。關(guān)于FreeRTOS最多支持多少個(gè)
    的頭像 發(fā)表于 09-02 14:21 ?2252次閱讀

    freertos和rtthread哪一個(gè)更好

    FreeRTOS FreeRTOS個(gè)小型、可裁剪的實(shí)時(shí)操作系統(tǒng)內(nèi)核,由Richard Barry于2003年發(fā)布。它主要面向微控制器(MCU)和小型嵌入式系統(tǒng),以其輕量級(jí)、可預(yù)測(cè)
    的頭像 發(fā)表于 09-02 14:06 ?7087次閱讀

    如何將個(gè)100MHz Vp-p=2V的正弦波放大Vp-p=4V?

    請(qǐng)問(wèn)如何將個(gè)100MHz Vp-p=2V的正弦波 放大 Vp-p=4V?
    發(fā)表于 08-16 08:32

    IR600怎樣從c.inhand.com.cn平臺(tái)遷移c.inhandcloud.com平臺(tái)

    c.inhand.com.cn 作為設(shè)備管理云平臺(tái)使用多年,會(huì)逐步停止維護(hù),公司新推出的c.inhandcloud.com設(shè)備管理云平臺(tái),能更靈活對(duì)所部署設(shè)備進(jìn)行遠(yuǎn)程管理配置。本文介紹如何將
    發(fā)表于 07-25 07:30

    如何將IR912路由器從c.inhand.com.cn遷移至iot.inhand.com.cn平臺(tái)

    在線(xiàn)的IR900系列路由器,為了能在新平臺(tái)對(duì)設(shè)備更好進(jìn)行管理,請(qǐng)對(duì)設(shè)備固件進(jìn)行次升級(jí),升級(jí)版本為1.0.0.r11700(請(qǐng)下載附件)。如果設(shè)備數(shù)量不大,可單獨(dú)對(duì)每臺(tái)設(shè)備進(jìn)行升級(jí),設(shè)備數(shù)量大可以選擇批量
    發(fā)表于 07-25 06:11