FreeRTOS系列第2篇---FreeRTOS入門指南
FreeRTOS可以被移植到很多不同架構的處理器和編譯器。每一個RTOS移植都附帶一個已經配置好的演示例程,可以方便快速啟動開發。更好的是,每個演示例程都附帶一個說明網頁,提供如何定位RTOS演示工程原始碼、如何編譯演示例程、如何配置硬體平臺的全部資訊。
演示例程說明網頁還提供基本的RTOS移植細節資訊,包括如何編寫FreeRTOS相容的中斷服務例程,不同架構的中斷處理會稍有不同。
通過下面的簡單說明,可以在幾分鐘內執行RTOS。
1.查詢相關文件頁
FreeRTOS具有詳細的開發說明文件,可以在其官方網站上檢視。首先開啟官方網站,目前的網站地址是:http://www.freertos.org
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方法分別在