1. 程式人生 > >FreeRTOS系列第2篇---FreeRTOS入門指南

FreeRTOS系列第2篇---FreeRTOS入門指南

FreeRTOS可以被移植到很多不同架構的處理器和編譯器。每一個RTOS移植都附帶一個已經配置好的演示例程,可以方便快速啟動開發。更好的是,每個演示例程都附帶一個說明網頁,提供如何定位RTOS演示工程原始碼、如何編譯演示例程、如何配置硬體平臺的全部資訊。

      演示例程說明網頁還提供基本的RTOS移植細節資訊,包括如何編寫FreeRTOS相容的中斷服務例程,不同架構的中斷處理會稍有不同。

      通過下面的簡單說明,可以在幾分鐘內執行RTOS。

1.查詢相關文件頁

       FreeRTOS具有詳細的開發說明文件,可以在其官方網站上檢視。首先開啟官方網站,目前的網站地址是:http://www.freertos.org

。在首頁左側的導航欄中,展開"Supported Devices & Demos"選單項,單擊"OfficiallySupported Demos"連結,去檢視FreeRTOS支援的微控制器製造商列表。單擊微控制器製造商名稱,進入具體的製造商文件頁面列表。

2.獲取RTOS原始碼

       到FreeRTOS官方網站下載原始碼,下載包包含RTOS核心原始碼和官方移植演示工程。解壓縮後放到合適的目錄下。(如果你不想訪問慢吞吞的國外網站,我在CSDN做了一個映象,可以 點選此處 ,這篇文章中有最新的大部分FreeRTOS原始碼包下載連結)

       每一個RTOS移植包都附帶有預先配置好的演示例程 ,已經建立好了所有必須的RTOS原始檔幷包含了必須的RTOS標頭檔案。推薦在提供的演示例程的基礎上進行自己的FreeRTOS應用程式設計。

3.FreeRTOS原始碼目錄結構

       FreeRTOS下載包中包含每個處理器移植和演示例程的原始碼。將所有移植包放入一個下載檔案中大大簡化了分類處理,但是下載包中的檔案數量也多的驚人!無論如何,目錄結構還是非常簡單的,並且FreeRTOS實時核心僅僅只有3個檔案(如果需要,還有一些附加檔案,比如軟體定時器、事件組以及協程)。

      下載包目錄包含兩個子目錄:FreeRTOS和FreeRTOS-Plus。如下所示:

  • FreeRTOS-Plus          包含FreeRTOS+元件和演示例程;
  • FreeRTOS                   包含FreeRTOS實時核心原始檔和演示例程。

      FreeRTOS-Plus目錄樹包含多個自述檔案(Readme)。接下來本文只描述FreeRTOS核心的核心原始檔和演示例程,它們又被分成兩個主要的子目錄,如下所示:

    FreeRTOS
      |+-- Demo     包含演示例程工程;
      |+-- Source   包含實時核心原始檔。

      RTOS程式碼的核心包含在三個檔案中:tasks.c、queue.c、list.c。這三個檔案位於FreeRTOS/Source目錄。在該目錄下還包含三個可選的檔案:timers.c、event_groups.c、croutine.c,分別實現軟體定時、事件組和協程功能。

      FreeRTOS/Source目錄結構如下所示:

    FreeRTOS
        | +-- Source  FreeRTOS核心程式碼檔案
        |   |+-- include          FreeRTOS核心程式碼標頭檔案
        |   |+-- Portable         處理器特定程式碼
        |   |  |+--Compiler x     支援編譯器x的所有移植包
        |   |  |+--Compiler y     支援編譯器y的所有移植包
        |   |  |+--MemMang        記憶體堆實現範例

      每個支援的處理器架構需要一小段與處理器架構相關的RTOS程式碼。這個是RTOS移植層,它位於FreeRTOS/Source/Portable/[相應編譯器]/[相應CPU架構]子目錄。

      對於FreeRTOS,堆疊設計也屬於移植層。FreeRTOS/Source/portable/MemMang目錄下heap_x.c檔案給出了多種堆疊方案,後續文章將會詳細介紹堆疊操作。

      移植層目錄舉例:

  • 如果在GCC編譯器下使用TriCore1782:TriCore特定檔案(port.c)位於FreeRTOS/Source/Portable/GCC/TriCore_1782目錄下。FreeRTOS/Source/Portable 子目錄下的所有檔案,除了FreeRTOS/Source/Portable/MemMang目錄外都可以忽略或刪除。
  • 如果在IAR編譯器下使用Renesas RX600:RX600特定檔案(port.c)位於FreeRTOS/Source/Portable/IAR/RX600目錄下。FreeRTOS/Source/Portable 子目錄下的所有檔案,除了FreeRTOS/Source/Portable/MemMang目錄外都可以忽略或刪除。

      FreeRTOS下載包中還包含各種處理器架構和編譯器的演示例程。大多數的演示例程程式碼對所有移植都是通用的,位於FreeRTOS/Demo/Common/Minimal目錄。FreeRTOS/Demo/Common/Full目錄下的是歷史遺留程式碼,僅用於PC。

      FreeRTOS/Demo目錄結構如下所示:

    FreeRTOS
      |+-- Demo
      |  |+-- Common          所有例程都可以使用的演示例程檔案
      |  |+-- Dir x           用於x平臺的演示例程工程檔案
      |  |+-- Dir y           用於y平臺的演示例程工程檔案

      FreeRTOS/Demo目錄下剩餘的子目錄包含預先配置好的工程,可以用於構建個人演示例程。子目錄的命名與移植平臺和編譯器相關。每一個RTOS移植包都有自己的說明文件。

      演示例程目錄舉例:

  • 如果以英飛凌TriBoard開發板硬體構建TriCoreGCC演示例程:TriCore演示例程工程檔案位於FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC目錄。目錄FreeRTOS/Demo下的所有子目錄(Common目錄除外)都可以忽略或刪掉。
  • 如果以RX62N硬體構建Renesas RX600 IAR演示例程:IAR工程檔案位於FreeRTOS/Demo/RX600_RX62N-RDK_IAR目錄。目錄FreeRTOS/Demo下的所有子目錄(Common目錄除外)都可以忽略或刪掉。

4.編譯工程

      根據上一節FreeRTOS原始碼目錄結構說明的RTOS演示工程的所在的位置,開啟並編譯演示工程。

5.執行演示例程

      演示例程附帶的說明網頁會介紹如何配置硬體、下載程式和執行演示例程。說明網頁還會提供演示例程的功能資訊,這樣你就可以判斷演示例程執行是否正確。

相關推薦

FreeRTOS系列2---FreeRTOS入門指南

FreeRTOS可以被移植到很多不同架構的處理器和編譯器。每一個RTOS移植都附帶一個已經配置好的演示例程,可以方便快速啟動開發。更好的是,每個演示例程都附帶一個說明網頁,提供如何定位RTOS演示工程原

FreeRTOS系列3---FreeRTOS移植指南

 FreeRTOS下載包中已經包含很多演示例程- 每一個例程都是針對於:特定的微控制器;特定的開發工具(編譯器、偵錯程式等等);特定的硬體平臺(樣機或評估板)。      可以在官方網站首頁左側的樹形選

FreeRTOS系列13---FreeRTOS內核控制

使用方法 exp ole dfa pow cati 返回 有意 ng- 內核控制的一些功能須要移植層提供,為了方便移植。這些API函數用宏來實現,比方上下文切換、進入和退出臨界區、禁止和使能可屏蔽中斷。內核控制函數還包含啟動和停止調度器、掛起和恢復調度器以及用

FreeRTOS系列9---FreeRTOS任務概述

1. 任務和協程(Co-routines)      應用程式可以使用任務也可以使用協程,或者兩者混合使用,但是任務和協程使用不同的API函式,因此在任務和協程之間不能使用同一個佇列或訊號量傳遞資料。 

FreeRTOS系列7---Cortex-M核心使用FreeRTOS特別注意事項

      在閱讀本文之前,有兩個定義在FreeRTOSConfig.h中的巨集,你必須先明白它們是什麼意思,《FreeRTOS核心配置說明》一文中,講解了這兩個巨集: configKERNEL_I

FreeRTOS系列1---為什麼選擇FreeRTOS

1.為什麼學習RTOS?          作為基於ARM7、Cortex-M3硬體開發的嵌入式工程師,我一直反對使用RTOS。不僅因為不恰當的使用RTOS會給專案帶來額外的穩定性風險,更重要的是我認為絕大多數基於ARM7、Cortex-M3硬體的專案,還沒複雜到使用RTO

Java面試系列2-Object類中的方法

Java的Object是所有引用型別的父類,定義的方法按照用途可以分為以下幾種: (1)建構函式 (2)hashCode() 和 equals() 函式用來判斷物件是否相同 (3)wait()、wait(long)、wait(long,int)、notify()、notifyAll() 執行緒等待和喚醒 (4

Python入門系列——6

輸入函式(二) 上篇,我們已經學習了輸入函式,但是關於輸入函式還有一些東西沒有說。下面我們先來看一下上次程式碼的改進。 #python3 your_answer = input("Hello\n")

前端學PHP之面向對象系列——對象操作

fas get toolbar 影響 運算 描述 ssa reference 保持 對象克隆   對象復制,又叫對象克隆,可以通過 clone 關鍵字來完成   在多數情況下,我們並不需要完全復制一個對象來獲得其中屬性。但有一個情況下確實需要:如果你有一個窗口對象,該對象持

深入理解javascript作用域系列

彈出 例子 深入理解java logs title 最終 pre 有變 context 前面的話   對於執行環境(execution context)和作用域(scope)並不容易區分,甚至很多人認為它們就是一回事,只是高程和犀牛書關於作用域的兩種不同翻譯而已。但實際上,

深入理解ajax系列

blob selected 單選框 encode 展示 條目 種類型 %20 寫代碼 前面的話   現代Web應用中頻繁使用的一項功能就是表單數據的序列化,XMLHttpRequest 2級為此定義了FormData類型。FormData為序列化表單以及創建與表單格式相同的

深入理解ajax系列

row 用戶數據 方便 案例 默認方法 span target osi content 前面的話   在以前,網站的用戶與後端交互的主要方式是通過HTML表單的使用。表單的引入在1993年,由於其簡單性和易用性,直到電子商務出現之前一直保持著重要位置。理解表單提交,對於更深

深入理解ajax系列

gin 開發工程師 tar component fin hasattr mar tex 員工 前面的話   雖然ajax全稱是asynchronous javascript and XML。但目前使用ajax技術時,傳遞JSON已經成為事實上的標準。因為相較於XML而言,J

javascript面向對象系列——實現繼承的3種形式

編程語言 urn ash yahoo 實現 經典 ray obj 學習 前面的話   學習如何創建對象是理解面向對象編程的第一步,第二步是理解繼承。開宗明義,繼承是指在原有對象的基礎上,略作修改,得到一個新的對象。javascript主要包括類式繼承、原型繼承和拷貝繼承這

Arduino 101/Genuino101使用-2

digital oid 優先 不知道 clu tput 編程 應該 lin 1. Arduino 101編程只是在ARC的核心上進行,其具體架構為ARCv2EM。、 2. 而Quark核心,從目前可知的信息來看,其應該運行著名為Zephyr的RTOS 3.101並沒有EEP

乞丐版servlet容器2

spa after ola status sleep 執行 權限不足 ror mar 2. 監聽端口接收請求 上一步中我們已經定義好了Server接口,並進行了多次重構,但是實際上那個Server是沒啥毛用的東西。 現在要為其添加真正有用的功能。 大師說了,飯要一口一口吃,

Python學習【2】:Python之數據類型

msg ear sleep abc 命令 play bbbb 朋友 == 數字類型和字符串類型 1.bin()函數將十進制轉換成而進制 2.oct()函數將十進制轉換成八進制 3.hex()函數將十進制轉換成十六進制     十六進制表示:0-9 a b c

Python學習【2】:Python之數據類型(2

append 但是 iss 代碼 key 常用方法 uber ner ces 元組 #為何要有元組,存放多個值,元組不可變,更多的是用來做查詢 t=(1,[1,3],‘sss‘,(1,2)) #t=tuple((1,[1,3],‘sss‘,(1,2))) #

CYQ.Data 數據框架 使用入門指南

strong 數據 fail 127.0.0.1 this ORC client false nload 原文鏈接:http://www.cyqdata.com/cyqdata/article-detail-411 本文針對V5版本進行修改於(2016-07-04)

python爬蟲【2

multi 實現 from eat 進程 lun pid RR print 一、多進程 1.fork方法(os模塊,適用於Lunix系統) fork方法:調用1次,返回2次。原因:操作系統經當前進程(父進程)復制出一份進程(子進程),兩個進程幾乎完全相同,fork方法分別在