chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何將FreeRTOS移植到一個全新平臺?

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

掃碼添加小助手

加入工程師交流群

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

特定的微控制器;

特定的開發(fā)工具(編譯器、調試器等等);

特定的硬件平臺(樣機或評估板)。

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

1.修改例程使之運行到不同評估板

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

1.1初始編譯

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

1.2修改LED IO端口

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

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

1.3 RTOS調度器簡介

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

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

1.4 收尾工作

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

標準的“通訊測試(comtest)”(如果演示例程中有的話)任務使用到微控制器的一個UART外設。檢測硬件是可用的。

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

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

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

2.1識別用于特定微控制器的FreeRTOS內核文件

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

2.2識別用于特定編譯器的文件

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

2.3硬件底層文件

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

2.4工程設置

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

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

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

2.6 RAM和ROM的使用

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

原文標題:FreeRTOS系列第3篇---FreeRTOS移植指南

文章出處:【微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    68

    文章

    20215

    瀏覽量

    250049
  • 控制器
    +關注

    關注

    114

    文章

    17726

    瀏覽量

    191465
  • 硬件
    +關注

    關注

    11

    文章

    3577

    瀏覽量

    68909
  • FreeRTOS
    +關注

    關注

    14

    文章

    499

    瀏覽量

    66618

原文標題:FreeRTOS系列第3篇---FreeRTOS移植指南

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    長城汽車官宣全新戰(zhàn)略級平臺定名歸元

    2026年1月6日,長城汽車正式官宣新平臺的最終命名——“歸元”。這個命名,歷經(jīng)全網(wǎng)征名、熱議討論、用戶票選而定,是長城汽車與用戶共創(chuàng)的次命名,也是次回歸用戶需求、追溯產業(yè)本源的價值共鳴。
    的頭像 發(fā)表于 01-07 14:43 ?390次閱讀

    請問如何將蜂鳥E203移植Xilinx NEXYS A7 FPGA 開發(fā)板上?

    如何將蜂鳥E203移植Xilinx NEXYS A7 FPGA 開發(fā)板上?有參考教程嗎?小白求教 主要是引腳分配,我這邊有移植Xilin
    發(fā)表于 11-11 07:44

    蜂鳥E203的內核移植fpga之后該怎么進行二次開發(fā)呢?

    你們好!請問下我蜂鳥E203的內核移植fpga之后該怎么進行二次開發(fā)呢?比如我想點亮板子上的led?驅動攝像頭進行圖像識別?這些該如何進行呢?蜂鳥有類似freedom studi
    發(fā)表于 11-10 07:09

    貿澤電子開售全新Arduino UNO Q單板計算機

    貿澤電子開售全新Arduino UNO Q單板計算機。Arduino UNO Q單板計算機(SBC)高性能計算與實時控制結合,提供理想的創(chuàng)新平臺。
    的頭像 發(fā)表于 11-08 09:50 ?1237次閱讀

    力旺電子榮獲臺積公司2025年度開放創(chuàng)新平臺合作伙伴獎

    力旺電子今年再度榮獲臺積公司開放創(chuàng)新平臺(OIP)年度合作伙伴獎,這也是力旺連續(xù)第16年獲得此殊榮。該獎肯定了力旺電子在嵌入式內存硅智財?shù)某掷m(xù)創(chuàng)新與杰出表現(xiàn)、對臺積公司長期穩(wěn)健的技術支持,及能隨市場需求變化提供可靠服務的承諾。
    的頭像 發(fā)表于 10-31 10:28 ?332次閱讀

    新思科技斬獲2025年臺積公司開放創(chuàng)新平臺年度合作伙伴大獎

    新思科技作為重要的合作伙伴,再次獲臺積公司認可。在2025年臺積公司開放創(chuàng)新平臺(Open Innovation Platform,簡稱OIP)生態(tài)系統(tǒng)論壇上,我們榮膺六項年度合作伙伴大獎。這些獎項
    的頭像 發(fā)表于 10-24 16:31 ?1172次閱讀

    如何移植rt-thread野火imx6ull開發(fā)板上?

    求助如何將rt-thread移植野火imx6ull(coretex-A7)開發(fā)板上,官方的bsp中沒有imx6ull
    發(fā)表于 09-29 06:25

    FAQ_MA35_Family eMMC如何將映像編程其中分區(qū)中,并將其他分區(qū)用于其他目的?

    FAQ_MA35_Family eMMC如何將映像編程其中分區(qū)中,并將其他分區(qū)用于其他目的?
    發(fā)表于 09-02 08:05

    如何將 FreeMODBUS 從屬 RTU 模式移植 M032 系列微控制器?

    如何將 FreeMODBUS 從屬 RTU 模式移植 M032 系列微控制器
    發(fā)表于 08-19 07:20

    MULTICH_CONNECT_PCB如何將EVAL_PASCO2_SENSOR CYW943907AEVALF?

    MULTICH_CONNECT_PCB如何將EVAL_PASCO2_SENSOR CYW943907AEVALF ,請分享任何文檔或代碼以及些6EDL_SPI_LINK ,這對我有很大幫助。
    發(fā)表于 07-09 06:44

    BlackBerry QNX推出通用嵌入式開發(fā)平臺

    Platform,GEDP),這全新平臺旨在加速機器人、醫(yī)療和工業(yè)自動化等通用嵌入式行業(yè)的高性能、可擴展、網(wǎng)絡信息安全的系統(tǒng)開發(fā)。
    的頭像 發(fā)表于 03-11 16:04 ?1068次閱讀

    移植LWIP+FREERTOS時遇到的問題怎么解決?

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

    SPC56 P系列MCU移植FreeRTOS,port.c文件應該使用portable文件夾下的哪一個

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

    如何將RT-Thread移植NXP MCUXPressoIDE上

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

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

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