版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、MQX開(kāi)發(fā)入門(mén),蘇州大學(xué)飛思卡爾嵌入式系統(tǒng)研發(fā)中心2011年8月 V1.0,2024/3/31,1,1.MQX簡(jiǎn)介與發(fā)展歷史2.MQX基本結(jié)構(gòu)與源碼目錄3.MQX開(kāi)發(fā)環(huán)境搭建4.MQX移植與裁剪5.MQX下的工程框架6.MQX應(yīng)用實(shí)例7.MQX設(shè)備驅(qū)動(dòng)開(kāi)發(fā),2024/3/31,2,1.MQX簡(jiǎn)介與發(fā)展歷史,MQX(Message Queue eXecutive,消息隊(duì)列執(zhí)行)是一款用于單一處理器、多處理器和分布式處理器
2、等形式的嵌入式實(shí)時(shí)操作系統(tǒng)。MQX是Precise Software Technologies公司1989年開(kāi)發(fā)的,2000年3月,被ARC公司收購(gòu),主要用在飛思卡爾(Freescale)的ColdFire系列、IBM®/Freescale的PowerPC、ARM、ARC和i.MX等微控制器或微處理器系列中。2009年,飛思卡爾出售ColdFire MCU時(shí),附送MQX,并在官方網(wǎng)站上提供開(kāi)源源代碼,使其成為開(kāi)源RTOS。
3、目前,推薦在ARM Cortex-M4系列中使用。主要應(yīng)用方向是:電子系統(tǒng)的智能化,1.1 MQX簡(jiǎn)介,3,2024/3/31,MQX是面向應(yīng)用的、專(zhuān)用特制的嵌入式RTOS,具有如下系統(tǒng)特性:(1)可伸縮性、可裁減、多層次的系統(tǒng)體系結(jié)構(gòu)(2)具有優(yōu)化上下文切換和快速中斷響應(yīng),實(shí)時(shí)性高(3)可配置外形、直接應(yīng)用編程接口(API)和模塊化架構(gòu)(4)面向特定應(yīng)用的簡(jiǎn)化型調(diào)用接口,專(zhuān)門(mén)支持一類(lèi)嵌入式應(yīng)用(5)最小內(nèi)核處理集,系統(tǒng)開(kāi)銷(xiāo)
4、小,運(yùn)行效率高(6)具有各種即插即用的設(shè)備驅(qū)動(dòng)接口,如USB主機(jī)/設(shè)備堆棧(7)具有網(wǎng)絡(luò)功能,提供TCP/IP協(xié)議棧(RTCS)協(xié)議,支持統(tǒng)一的MAC訪問(wèn)層接口,1.2 MQX基本特點(diǎn),2024/3/31,4,從2009年,MQX推出第一個(gè)版本RTOS 3.0.1后,其版本不斷進(jìn)行升級(jí)和更新,功能不斷加強(qiáng),目前推出的最新版本號(hào)是3.7.0。根據(jù)freescale網(wǎng)站提供的信息,最新版MQX在CFV2可以配置最小占用12K Flas
5、h和2.5K RAM,包括兩個(gè)任務(wù)、一個(gè)輕量級(jí)信號(hào)、中斷、隊(duì)列和內(nèi)存管理。目前,MQX已經(jīng)提推出十幾個(gè)版本,包括3.6.2和3.7.0版。其中3.6.2版是目前實(shí)驗(yàn)室正在研究和使用的版本。從freescale官方網(wǎng)站可以下載到MQX 3.7.0。鏈接地址:http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MQX&nodeId=0152106079,
6、1.3 MQX發(fā)展歷史,2024/3/31,5,2.MQX基本結(jié)構(gòu)與源碼目錄,MQX由核心組件和可選組件構(gòu)成,為了滿(mǎn)足需要,可配置為低至6KB的ROM,包括內(nèi)核,中斷,信號(hào)量,隊(duì)列和內(nèi)存管理器。MQX的基本結(jié)構(gòu),2.1 MQX基本結(jié)構(gòu),2024/3/31,6,安裝MQX安裝包后,安裝目錄下有如下幾個(gè)文件夾。Config:該目錄下包含MQX配置文件Demo:幾個(gè)綜合性的示例工程Doc:MQX應(yīng)用文檔,包含用戶(hù)
7、手冊(cè)、MFS參考手冊(cè)和USB參考手冊(cè)等。,2.2 MQX源碼目錄,2024/3/31,7,Lib:編譯后的輸出結(jié)果,包含庫(kù)文件和所需的頭文件等。Mfs:MFS文件系統(tǒng)源碼和一些使用示例。MQX:MQX 操作系統(tǒng)源碼。RTCS:TCP/IP 協(xié)議棧源碼和一些使用示例。Shell:shell源碼。Tools:一些輔助工具。USB:USB協(xié)議棧源碼,分為設(shè)備和主機(jī)協(xié)議棧兩部分,每個(gè)部分有一些示例代碼。,2024/3/31,8,20
8、24/3/31,9,2.3 MQX RTOS目錄,3.MQX開(kāi)發(fā)環(huán)境搭建,1. 系統(tǒng)及工具 系統(tǒng):windows xp 開(kāi)發(fā)環(huán)境:IAR IDE 寫(xiě)入器:Jlink(固件版本:ARM V8) 開(kāi)發(fā)板:K60N5122. MQX源碼安裝包 版本:MQX 3.6.2,2024/3/31,10,4.MQX移植與裁剪,為了適應(yīng)不同體系結(jié)構(gòu)的處理器和開(kāi)發(fā)板,MQX必須把一部分與具體硬件設(shè)備相關(guān)的代碼作為抽象的接口保留出來(lái),硬件驅(qū)動(dòng)由硬
9、件設(shè)計(jì)方具體實(shí)現(xiàn),這就是MQX移植。安裝MQX源碼包后,打開(kāi)MQX工程,包括bsp和psp兩個(gè)子工程。PSP(Processor support Package),平臺(tái)支持包,與處理器本身相關(guān)的一些東西,就是MQX的kernel在該處理器上的移植。BSP(Board support Package),板級(jí)支持包,包括一些跟該板子相關(guān)的設(shè)置。因此如果你的處理器不變,而設(shè)計(jì)你自己的板子的話(huà),只需要移植和裁剪BSP,而不需要對(duì)PS
10、P做改動(dòng)。,4.1 MQX移植,2024/3/31,11,因?yàn)镸QX只提供了對(duì)Demo板的支持,用戶(hù)需要根據(jù)其設(shè)計(jì)的電路板來(lái)開(kāi)發(fā)新的BSP。移植一般是對(duì)于BSP來(lái)說(shuō)的,這是由于PSP是對(duì)于芯片和內(nèi)核相關(guān)的。假設(shè)MQX開(kāi)發(fā)包提供了 K40X256的樣例程序,而未提供K60N512的,由于K40X256和K60N512 使用的是同一系列的內(nèi)核,選擇twrk40x256作為基準(zhǔn)BSP進(jìn)行修改,可以避免內(nèi)核的移植,這樣可以降低開(kāi)發(fā)難度和提高開(kāi)發(fā)
11、效率。移植步驟:①創(chuàng)建一個(gè)新的BSP源目錄,如:\mqx\source\bsp\ TestK60N512。TestK60N512為用戶(hù)創(chuàng)建的bsp文件。②進(jìn)入基準(zhǔn)目錄,復(fù)制基準(zhǔn)目錄中的所有內(nèi)容到新目錄,即復(fù)制twrk40x256文件下的所有內(nèi)容到TestK60N512文件下。,2024/3/31,12,③創(chuàng)建與新BSP相關(guān)的其他的文件和目錄。新的BSP配置目錄,如:config\bsp\TestK60N512;新的構(gòu)件輸出目錄,如
12、lib\TestK60N512,并在lib\TestK60N512下創(chuàng)建子目錄mqx。④復(fù)制選擇的bsp和psp工程文件。–在\mqx\build\iar目錄下,復(fù)制bsp_twrk40x256.ewp和psp_twrk40x256.ewp,分別為bsp_TestK60N512.ewp和psp_TestK60N512.ewp。–在\mqx\build\bat目錄下,復(fù)制bsp_twrk40x256.bat和psp_twrk40x
13、256.bat,分別命名為bsp_TestK60N512.bat和psp_TestK60N512.bat。,2024/3/31,13,⑤修改–在bsp_TestK60N512.bat和psp_TestK60N512.bat中把所有的twrk40x256字符串替換為T(mén)estK60N512。同時(shí),打開(kāi)psp_TestK60N512.bat修改“copy /Y ..\..\..\mqx\ source\psp\cortex\MK40X256
14、VMD100.h.”為“copy /Y ..\..\..\mqx\source\psp\ cortex\MK60N512VMD100.h .”。–將新創(chuàng)建的\mqx\source\bsp\TestK60N512\目錄下的twrk40x256.h文件改為T(mén)estK60N512.h,打開(kāi)這個(gè)文件,將文件里的所有twrk40x256字符串替換為T(mén)estK60N512。–修改\mqx\source\bsp\TestK60N512\iar\
15、目錄下的intflash.icf⑥修改\config\TestK60N512\iar\目錄下的build_libs.eww文件,把字符串“twrk40x256”修改為“TestK60N512”。⑦修改工程設(shè)置使用iar打開(kāi)工程文件build_libs.eww。,2024/3/31,14,打開(kāi)工程后,做如下修改:修改組名“twrk40x256 BSP Files”為“TestK60N512 BSP Files”,刪除其子文件,添加
16、\mqx\source\bsp\TestK60N512目錄的文件到該組。打開(kāi)文件“TestK60N512.h”把其內(nèi)容中所有的“twrk40x256”都替換為“TestK60N512”,同時(shí)修改相應(yīng)的參數(shù)。如:寄存器基地址、RAM大小和基地址、ROM大小和基地址、芯片工作頻率、參考時(shí)鐘頻率、各個(gè)外圍模塊的工作頻率等參數(shù)和與具體板子有關(guān)的各種設(shè)置。打開(kāi)文件“bsp.h”修改其內(nèi)容。把“#include ”修改為“#include ”如
17、果需要使用到以太網(wǎng)就需要添加:#include #include ,2024/3/31,15,在“peripheral IO Drivers”組的各子目錄下的“XXX_mk40.*”替換成相應(yīng)的“XXX_mk60.*” 。這里與K60有關(guān)的文件需要自己編寫(xiě)。最后,編譯bsp和psp。編譯結(jié)束得到的包放在“\lib\TestK60N512.iar\mqx”目錄下。,2024/3/31,16,通過(guò)修改user_config.h文件來(lái)改
18、變BSP(板級(jí)支持包)和PSP(平臺(tái)支持包)的設(shè)置。開(kāi)發(fā)者通過(guò)在該文件中添加和移除標(biāo)志(即通過(guò)宏定義)來(lái)添加或移除組件,為不同的驅(qū)動(dòng)程序改變?cè)O(shè)置、添加或移除日志設(shè)置。user_config.h文件可以通過(guò)以下路徑找到: /config//user_config.h。修改user_config.h后,需要重新編譯庫(kù)。使用IAR打開(kāi)\config\twrk60n512\iar\build_libs.eww工程文件,重新編譯庫(kù)
19、文件,生成后的庫(kù)文件被保存在文件夾/lib/twrk60n512.iar中。,4.2 MQX裁剪,2024/3/31,17,user_config.h中提供了以下可以使能和禁止的模塊,2024/3/31,18,通過(guò)配置user_config.h,可以有效的降低MQX對(duì)芯片F(xiàn)lash和RAM的消耗。目的:在MQX中建立兩個(gè)任務(wù)。任務(wù)一、小燈閃爍任務(wù)二、串口接收數(shù)據(jù)并把接收到的數(shù)據(jù)返回給PC機(jī)。,2024/3/31,19,1. 不裁
20、剪MQX,即包含MQX支持所有的驅(qū)動(dòng)。,編譯后,代碼占用資源如下:,2024/3/31,20,2. 裁剪MQX,即只包含使用到的模塊驅(qū)動(dòng)。,編譯后,代碼占用資源如下:,效果很明顯,2024/3/31,21,5.MQX下的工程框架,2024/3/31,22,6.MQX應(yīng)用實(shí)例,1. 程序使用了兩種工作模式。 通過(guò)串口輸入(串口5):“*yes#”進(jìn)入MQX RTOS?!?no#”進(jìn)入非OS。2. 程序定義了7個(gè)任務(wù)。 任
21、務(wù)1. 主任務(wù),用于創(chuàng)建其余6個(gè)任務(wù) 任務(wù)2. 掛載SD卡、加載分區(qū)管理、加載文件系統(tǒng) 任務(wù)3. 調(diào)用shell命令,用于操作SD卡 任務(wù)4. 用于調(diào)用小燈閃爍 任務(wù)5. 蜂鳴器定時(shí)鳴響 任務(wù)6. 讀取任務(wù)七傳遞的信號(hào),并輸出鍵盤(pán)鍵值 任務(wù)7. 讀取鍵盤(pán),并通過(guò)信號(hào)量傳遞給任務(wù)六,2024/3/31,23,7.MQX設(shè)備驅(qū)動(dòng)開(kāi)發(fā),設(shè)備驅(qū)動(dòng)程序從字面上可以理解為一類(lèi)程序,這類(lèi)程序的目的一般是驅(qū)動(dòng)內(nèi)部和外圍的硬件正常
22、工作,因此設(shè)備驅(qū)動(dòng)程序都是針對(duì)特定的硬件來(lái)編寫(xiě)的。設(shè)備驅(qū)動(dòng)程序主要完成如下功能:(1)對(duì)設(shè)備進(jìn)行初始化和釋放設(shè)備;(2)把數(shù)據(jù)從內(nèi)核傳送到硬件,或從硬件中讀取數(shù)據(jù);(3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);(4)檢查處理設(shè)備出現(xiàn)的錯(cuò)誤。,2024/3/31,24,MQX設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和硬件設(shè)備之間的接口,它是為特定的硬件而提供給用戶(hù)程序的一組標(biāo)準(zhǔn)化接口,它隱藏了設(shè)備工作的細(xì)節(jié)。,MQX的驅(qū)動(dòng)程序
23、框架,2024/3/31,25,在MQX中設(shè)備驅(qū)動(dòng)程序的入口地點(diǎn)為FILE_STRUCT結(jié)構(gòu)體,F(xiàn)ILE_STRUCT結(jié)構(gòu)體可以看成為函數(shù)指針的集合,在MQX中通過(guò)API把設(shè)備看成文件,對(duì)設(shè)備文件的操作也就對(duì)應(yīng)成普通的文件操作。,文件句柄與I/O驅(qū)動(dòng)程序的關(guān)系,2024/3/31,26,MQX抽象了對(duì)硬件設(shè)備的處理,所有的硬件設(shè)備都作為文件。包括打開(kāi)(open)、關(guān)閉(close)、讀(read)、寫(xiě)(write)和I/O控制(ioct
24、l)這五種操作。,MQX系統(tǒng)API的調(diào)度過(guò)程,這是我們提供給MQX調(diào)用的,,,這是MQX提供的調(diào)用接口,2024/3/31,27,1. 在MQX的BSP工程” Peripheral IO Drivers”下添加兩個(gè)文件“my_io.h”和“my_io.c”。如:在工程下添加一個(gè)串口驅(qū)動(dòng)。2. 添加頭文件1)在my_io.h文件中包含以下幾個(gè)頭文件。#include "mqx.h" /* Structure
25、s and constants used by MQX */#include "fio.h" /* standard formatted I/O library */#include "io.h" /* I/O subsystem interface. */2)在my_io.c文件中添加以下頭文件#include "my_io.h" /*This is the head
26、er for this driver */,2024/3/31,28,3. 在my_io.h中聲明以下函數(shù)_mqx_uint _io_my_install(/* [IN] A string that identifies the device for fopen */char_ptr identifier//添加你定義的參數(shù)); //以下是MQX最基本的IO驅(qū)動(dòng)函數(shù)聲明//以下函數(shù)的參數(shù)是由操作系統(tǒng)定義的,除了
27、函數(shù)名,其他不能修改_mqx_int _io_my_open(FILE_PTR, char_ptr, char_ptr);_mqx_int _io_my_close(FILE_PTR);_mqx_int _io_my_read(FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_my_write(FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_my_ioc
28、tl(FILE_PTR, _mqx_uint, pointer);,2024/3/31,29,在“my_io.h”中聲明的六個(gè)函數(shù)需要在“my_io.c”中一一實(shí)現(xiàn)。其中:_io_my_open:打開(kāi)設(shè)備,驅(qū)動(dòng)程序初始化準(zhǔn)備工作 。_io_my_close:關(guān)閉設(shè)備,用來(lái)關(guān)閉驅(qū)動(dòng)程序和釋放所有的資源。_io_my_read:從打開(kāi)的設(shè)備中讀取數(shù)據(jù)。_io_my_write:向打開(kāi)的設(shè)備寫(xiě)入數(shù)據(jù)。_io_my_ioctl: I/
29、O操作擴(kuò)展,可根據(jù)設(shè)備情況來(lái)決定支持何種特殊的操作模式。_io_my_install:安裝設(shè)備驅(qū)動(dòng)程序,該函數(shù)調(diào)用_io_dev_install()向MQX注冊(cè)設(shè)備,告訴內(nèi)核有一個(gè)設(shè)備的驅(qū)動(dòng)程序要安裝到內(nèi)核。,2024/3/31,30,_mqx_uint _io_my_install( char_ptr identifier //添加你定義的參數(shù)){_mqx_uint result; //添加你的代碼resul
30、t = _io_dev_install(identifier,//identifier表示加載的驅(qū)動(dòng)的標(biāo)識(shí),如”ttya”標(biāo)識(shí)串口0 _io_my_open, _io_my_close,_io_my_read,_io_my_write,_io_my_ioctl, NULL);return result;},2024/3/31,31,驅(qū)動(dòng)編寫(xiě)完成,成功編譯工程后,編寫(xiě)串口任務(wù)驗(yàn)證驅(qū)動(dòng)的有效性。裝載驅(qū)動(dòng): _io_
31、my_uart_install(“ttyd:”, DataPTR, InitPTR, new_uart3_isr, NULL, UartInit, UartGetC, UartPutC,UartGetStatus);打開(kāi)設(shè)備: fopen(“ttyd:”, BSP_DEFAULT_IO_OPEN_MODE);使能中斷接收: ioctl(isr_ptr->serial_fd, UART_ENABLEINTERRUPT
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- engineforjava開(kāi)發(fā)入門(mén)
- bho插件開(kāi)發(fā)入門(mén)
- ios新手開(kāi)發(fā)快速入門(mén)
- 基于MQX的工控平臺(tái)設(shè)計(jì).pdf
- android app開(kāi)發(fā)入門(mén)教程
- android安卓程序開(kāi)發(fā)入門(mén)
- 《googleandroid開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)》目錄
- arm開(kāi)發(fā)步步深入之lcd入門(mén)
- stm32-開(kāi)發(fā)入門(mén)教程
- android應(yīng)用開(kāi)發(fā)經(jīng)典入門(mén)教程
- Google Android開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn).pdf
- 嵌入實(shí)時(shí)損傷系統(tǒng)MQX應(yīng)用框架研究.pdf
- 《c語(yǔ)言開(kāi)發(fā)入門(mén)教程》—習(xí)題答案
- flexpaper二次開(kāi)發(fā)入門(mén)教程
- 維控界面開(kāi)發(fā)快速學(xué)習(xí)進(jìn)步基礎(chǔ)入門(mén)
- avr開(kāi)發(fā)前準(zhǔn)備—熔絲位(fuse)快速入門(mén)
- iphone開(kāi)發(fā)入門(mén)(1)程序員眼中的iphone
- 鉗工入門(mén)基礎(chǔ)入門(mén)知識(shí)
- php5網(wǎng)頁(yè)游戲開(kāi)發(fā)入門(mén)教程
- 攝影入門(mén)知識(shí)學(xué)習(xí)入門(mén)(經(jīng)典學(xué)習(xí)入門(mén)級(jí)教學(xué)教材)
評(píng)論
0/150
提交評(píng)論