RTOS程序員-開發(fā)環(huán)境_第1頁
RTOS程序員-開發(fā)環(huán)境_第2頁
RTOS程序員-開發(fā)環(huán)境_第3頁
RTOS程序員-開發(fā)環(huán)境_第4頁
RTOS程序員-開發(fā)環(huán)境_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1,RTOS編程培訓(xùn),2,課程目的,掌握RGOS線程調(diào)度的基本原理 熟練應(yīng)用IPC進行多線程開發(fā) 掌握RGOS的中斷和定時器管理機制 掌握RGOS內(nèi)存管理的正確使用方法 學(xué)會搭建RGOS的編程環(huán)境,掌握基本的嵌入式開發(fā)和調(diào)試技能,3,考核方式,筆試(閉卷) 60% 上機 40% 編程練習(xí) 上機調(diào)試,4,課程內(nèi)容,開發(fā)環(huán)境與調(diào)試方法 系統(tǒng)調(diào)度、中斷與線程間通信 多線程開發(fā)常見問題、定時器與內(nèi)存管理,5,學(xué)習(xí)指導(dǎo),RGOS的一些基本概念注意理解和區(qū)分 理解并掌握各種機制的應(yīng)用場合 對開發(fā)過程中的約束和注意事項要牢記 接口只要在要用的時候會用即可,參考資料,Operating System Conc

2、epts Abraham Silberschatz Peter Baer Galvin,Greg Gagne John Wiley then define_bool CONFIG_SYS_ASSERT y fi config.in文件的包含關(guān)系 bool Support redundancy? CONFIG_RDND if $CONFIG_RDND = y ; then include kernel/rdnd/config.in fi,22,第二步:編寫配置文件,配置項的最終保存方式 Program/Project/conf/.config(配置結(jié)果文件) 以makefile中變量的形式保存所

3、有的配置項 用于指導(dǎo)makefile中的編譯和鏈接 Program/Project/conf/autoconf.h(配置結(jié)果頭文件) 以C語言中宏定義的形式保存所有的配置項 按模塊分解成多個.h,用于源文件中,23,第二步:編寫配置文件,Makefile文件的一般格式: O_TARGET := _sub_xxx.o #注意:xxx為當(dāng)前目錄名 subdir-y := d1 d2 #我想編譯當(dāng)前目錄下的哪些子目錄 obj-y := y1.o y2.o #我想編譯當(dāng)前目錄下的那些文件 EXTRA_CFLAGS += -Wall override EXTRA_INCLUDE += -I$(TOPMK

4、)/./include #我還想將哪些目錄作為系統(tǒng)頭文件目錄(可用包含) include $(TOPDIR)/Rules.make#這個必須加,24,第二步:編寫配置文件,Makefile中如何使用配置項 如:/driver/makefile中的一部分 O_TARGET := _sub_driver.o subdir-y := async subdir-$(CONFIG_I2C) += i2c subdir-$(CONFIG_MTD) += mtd subdir-$(CONFIG_PCI) += pci # 當(dāng).config文件中CONFIG_PCI=y時,實際上就等于: # subdir-y

5、+=pci,25,第二步:編寫配置文件,Makefile中如何使用配置項 Ifeq ($(CONFIG_UART_LL), y) obj-y += uart_debug.o else obj-y += uart.o Endif 思考:能否使用obj- $(CONFIG_UART_LL)這種方式?,26,第三/四步:配置與編譯,命令 配置:makes config 編譯:makes 進行配置操作后生成的文件 Program/Project/conf/.config(配置結(jié)果文件) Program/Project/conf/autoconf.h(配置結(jié)果頭文件) 進行編譯操作后生成的文件 xxx.

6、bin_可執(zhí)行程序 xxx.disasm.gz壓縮后的反匯編文件 其他文件,27,示例:如何添加一個新的模塊,1. 新的模塊目錄就位 2. 編寫模塊內(nèi)部的配置菜單config.in 3. 編寫這個新目錄內(nèi)的Makefile 4. 添加這個新模塊的加載菜單 5. 修改上一級目錄的Makefile,28,示例:如何添加一個新的模塊,例子:在driver目錄下加入AAA設(shè)備的驅(qū)動模塊. (假設(shè)該模塊代碼包括a1.c和a2.c) 1. 確定AAA設(shè)備驅(qū)動模塊所在的位置(/driver/aaa/目錄下) 2. 編寫AAA模塊的配置菜單(/driver/aaa/config.in): comment AA

7、A Driver config # # AAA driver module config # bool use A1 COFNIG_AAA_A1 bool use A2 COFNIG_AAA_A2,29,示例:如何添加一個新的模塊,3. 編寫aaa模塊的makefile文件(/driver/aaa/makefile): O_TARGET := _sub_aaa.o subdir-y := obj-y := obj- $(CONFIG_AAA_A1) += a1.o obj- $(CONFIG_AAA_A2) += a2.o include $(TOPDIR)/Rules.make,30,示例:

8、如何添加一個新的模塊,4. 修改driver模塊的配置文件( /driver/config.in ): 在/driver/config.in中加入對AAA的配置 bool Support AAA CONFIG_AAA # Config AAA if $CONFIG_AAA = y ; then include driver/aaa/config.in fi 5. 修改上一級目錄的makefile( /driver/makefile ): 在/driver/makefile中加入 subdir-$(CONFIG_AAA) += aaa,31,第五步:載入程序,Boot下更新程序的方法 按Ctrl

9、 + b進入Boot模式 使用Xmodem更新Boot或Ctrl Ctrl/Bootloader下載入程序的方法 Ctrl + c進入Ctrl模式或Bootloader模式 使用Xmodem或TFTP功能更新Ctrl/Bootloader或Main 注意:Boot/Bootloader/Ctrl不得輕易更新,否則會導(dǎo)致設(shè)備無法啟動。 Xmodem/TFTP的具體操作請參見各模式下的幫助信息(使用help命令),32,開發(fā)環(huán)境與調(diào)試方法,開發(fā)環(huán)境 開發(fā)基本流程 子系統(tǒng) 常用調(diào)試方法,33,子系統(tǒng)介紹,為何要使用子系統(tǒng) 可卸載性 模塊的初始化 子系統(tǒng)的類型 不可卸載的子系統(tǒng) - 內(nèi)存管理模塊 可卸

10、載的子系統(tǒng) - 一些協(xié)議模塊,34,子系統(tǒng)初始化階段劃分,基礎(chǔ)類初始化,鏈路層初始化,網(wǎng)絡(luò)層初始化,應(yīng)用層初始化,驅(qū)動初始化,最終階段,基礎(chǔ)類 (SUBSYS_CLASS_BASIC): 被后續(xù)所有模塊依賴的模塊并且不依賴于任何其他應(yīng)用模塊,鏈路層模塊(SUBSYS_CLASS_LINKLAYER): 鏈路層框架、鏈路層協(xié)議(不含驅(qū)動),網(wǎng)絡(luò)層模塊(SUBSYS_CLASS_NETWORKLAYER): 網(wǎng)絡(luò)層框架和協(xié)議。,應(yīng)用層模塊(SUBSYS_CLASS_APPLICATION): 網(wǎng)絡(luò)層框架和協(xié)議。,驅(qū)動(SUBSYS_CLASS_DRIVER): 各種驅(qū)動,如PCI等,最終階段(SU

11、BSYS_CLASS_LAST): 從初始化順序上講必須位于上述階段之后的模塊,35,可卸載子系統(tǒng)的創(chuàng)建,1. 編寫子系統(tǒng) 2. 編寫配置文件 3. 修改makefile文件,36,編寫子系統(tǒng),1. 明確本模塊需要在哪個階段初始化 2. 明確子系統(tǒng)的依賴關(guān)系和初始化順序關(guān)系 3. 明確本模塊的初始化函數(shù),37,子系統(tǒng)的定義,SUBSYS_DEFINE_00(subsysname,SUBSYS_CLASS_XXX, 1, xxx_init, dependance, sequence); dependance 子系統(tǒng)所依賴的其他子系統(tǒng)。 若所依賴的子系統(tǒng)不存在,那么該子系統(tǒng)不能被初始化。 sequ

12、ence 子系統(tǒng)初始化之前需要先初始化的子系統(tǒng)列表。 列表中的子系統(tǒng)如果不存在,不會影響到該子系統(tǒng)的初始化,38,子系統(tǒng)的定義,例子: SUBSYS_DEFINE_00(a1, SUBSYS_CLASS_DRIVER, 1, a1_init, “pci”, NULL); SUBSYS_DEFINE_00(a2, SUBSYS_CLASS_LINKLAYER, 1, a2_init, NULL, NULL); SUBSYS_DEFINE_00(a3, SUBSYS_CLASS_LAST, 1, a3_init, “a1, a2”, “a1, a2”);,39,子系統(tǒng)示例:Hello World,

13、static void hello_main(unsigned long argc, void *argv) while (1) printk(Hello World!n); sleep(HZ); static void init_helloworld() printk(KERN_INFO Start hello world task.n); hello_task = create_task(hello_world, hello_main, 0, NULL, HELLO_TASK_STACK, APP_TASK_TS); SUBSYS_DEFINE_00(helloworld, SUBSYS_

14、CLASS_LAST, 1, init_helloworld, NULL, NULL);,40,開發(fā)環(huán)境與調(diào)試方法,開發(fā)環(huán)境 開發(fā)基本流程 子系統(tǒng) 常用調(diào)試方法,41,嵌入式開發(fā)調(diào)試的特點,編譯與運行在不同平臺 交叉編譯 缺乏調(diào)試軟件的支持 PC端有g(shù)db之類軟件的支持 嵌入式系統(tǒng)無法直接單步跟蹤運行情況 單步跟蹤調(diào)試?yán)щy 調(diào)試器數(shù)量有限,且使用比較困難 通過打印變量值觀察分析,RGOS上的常用調(diào)試方法,打印分析+走讀代碼 最常用、最有效的調(diào)試手段 故障診斷命令的輔助 debug support模式下的故障診斷命令 show命令 exec命令 一鍵通命令,42,43,代碼審查,代碼自查與代碼評審 對照代碼審查表 上機調(diào)試前的必備工作 指針運算要特別小心 注意成對操

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論