日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 技術讓夢想更偉大
[導讀]關注、星標公眾號 ,直達精彩內容 前言 FreeRTOS下載包中已經包含很多演示例程- 每一個例程都是針對于: 特定的微控制器; 特定的開發(fā)工具(編譯器、調試器等等); 特定的硬件平臺(樣機或評估板)。 可以在官方網站首頁左側的樹形菜單 'Supported Devices'


關注、星標公眾號 ,直達精彩內容

前言

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

  1. 特定的微控制器;
  2. 特定的開發(fā)工具(編譯器、調試器等等);
  3. 特定的硬件平臺(樣機或評估板)。

可以在官方網站首頁左側的樹形菜單 '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初始編譯

作為修改練習的起點,被修改的演示例程是要能使用的。因此,在未做任何修改之前,首先檢查下載的演示例程能否被正確的編譯。絕大多數情況下,演示例程編譯后是沒有任何錯誤和警告的。

關于演示例程所在目錄,參考《FreeRTOS系列第2篇---FreeRTOS入門指南》一文的第三節(jié)。

1.2修改LED IO端口

LED燈是用來指示演示例程運行的最簡單方法,因此點亮新硬件平臺上的LED燈通常是最容易的。

兩個不同評估板上的LED連接到相同的IO端口通常是不太可能的,因此,一些小幅度修改是必須的。

在partest.c文件中的vParTestInitialise() 函數包含IO端口的模式和方向配置。在main.c文件中的prvSetupHardware()函數包含更多的硬件初始化(比如,使能IO外設的時鐘模塊),可能需要根據不同的使用進行一些修改。

根據目標評估板的硬件,在上面兩個函數中做必要的修改,然后寫一段簡單程序,來檢查硬件LED是否完好。這個簡單程序不使用FreeRTOS,只是為了確保硬件LED能夠正常工作。因此,注釋掉之前的main()函數,使用下面的例子代替:

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()函數。

作為入門級的多任務應用程序應該盡量的簡單,LED閃爍測試程序常常擔任這樣的角色,可以堪比經典的“Hello Wold”。這個任務幾乎在所有演示例程中都能看到,在main()函數中調用vStartLEDFlashTasks() (使用協(xié)程版本時調用vStartFlashCoRoutines())來實現(xiàn)。如果你使用的演示例程main()函數中并沒有調用vStartLEDFlashTasks()(或vStartFlashCoRoutines()),那么需要你將FreeRTOS/Demo/Common/Minimal/Flash.c文件添加到你的工程,并在main()函數手動的增加vStartLEDFlashTasks()函數。

除了調用vStartLEDFlashTasks()外,注釋掉所有用于啟動一個或多個演示任務的函數。最后的main()函數僅調用三個函數:prvSetupHardware()、vStartLEDFlashTasks()和vTaskStartScheduler()。例如(基于典型的main()函數):

int main( void )
{
/* 設置用于演示的微控制器硬件 */
prvSetupHardware();
/* 留下這個函數 */
vCreateFlashTasks();
/* 所有的其它創(chuàng)建任務的函數統(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()函數,而是手動的增加了這個函數,那么應該再手動的刪除掉這個函數。主要有兩個方面的原因:第一是這個LED閃爍任務用到的IO可能也被演示例程的其它任務使用,第二是演示例程可能已經占用了所有的RAM,已經沒有空余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內核文件

對于一個特定平臺,大多數(不是全部)硬件接口代碼包含在一個叫做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語言擴展。比如某個特定關鍵字可以標識出一個函數是中斷處理服務函數。

擴展的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é)拍時鐘中斷

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

2.6 RAM和ROM的使用

FreeRTOS內存管理一章中描述了FreeRTOS如何使用RAM,并且描述了RAM是如何分配給RTOS內核的。

如果你要將演示例程移植到一個RAM稍小的微處理器上,那么你可能需要減少configTOTAL_HEAP_SIZE的值(位于FreeRTOSConfig.h),并且減少演示例程的任務個數。可以通過簡單的注釋掉不需要的任務來實現(xiàn)。

如果你要將演示例程移植到一個ROM較小的微處理器中,那么你可能需要減少應用例程的文件數目,他們位于FreeRTOS/Demo/common文件夾目錄下。同時你還要刪除main函數中對他們的調用函數。

注:可能你是通過搜索引擎找到這篇文章,滿懷希望的點進來,以為能解決自己移植的所有問題,但是看完后卻發(fā)現(xiàn)本文站的角度太高,并不是特別適合對移植一無所知的你。先別急著以為本文是標題黨而點踩,可能有一篇文章適合你,這篇文章以Cortex-M3硬件平臺為例,詳細的介紹移植過程,會在之后講到。


   

推薦閱讀

(點擊標題可跳轉閱讀)

【編程之美】用C語言實現(xiàn)狀態(tài)機(實用)

【編程之美】超時重傳,滑動窗口,可靠性傳輸原理C語言實現(xiàn)

【編程之美】論嵌入式架構的重要性

免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉