嵌入式系統(tǒng)與軟件-第九章_第1頁
嵌入式系統(tǒng)與軟件-第九章_第2頁
嵌入式系統(tǒng)與軟件-第九章_第3頁
嵌入式系統(tǒng)與軟件-第九章_第4頁
嵌入式系統(tǒng)與軟件-第九章_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)與軟件軟件學(xué)院桑楠sn@實(shí)驗(yàn)安排(暫定)14周-17周每周四下午14:30-17:30主樓A2-402肖xiaoxuanbai@163.com第九章嵌入式軟件開發(fā)環(huán)境核心內(nèi)容交叉開發(fā)技術(shù)

仿真開發(fā)技術(shù)開發(fā)環(huán)境提供的主要工具GNU的嵌入式開發(fā)環(huán)境Windriver的集成開發(fā)環(huán)境仿真開發(fā)工具ARMulator9.1

概述需要協(xié)調(diào)管理特殊的硬件資源軟件具有可配置/裁剪特性需要交叉編譯環(huán)境需要交叉調(diào)試環(huán)境需要交叉測(cè)試環(huán)境需要軟件固化工具嵌入式軟件開發(fā)的特點(diǎn):9.2

交叉開發(fā)技術(shù)宿主機(jī):開發(fā)系統(tǒng)目標(biāo)機(jī):運(yùn)行平臺(tái)宿主機(jī)與目標(biāo)機(jī)的差別硬件的差別:處理器不同軟件環(huán)境的差異:宿主機(jī)上有通用操作系統(tǒng)等系統(tǒng)軟件提供軟件開發(fā)支持,而目標(biāo)機(jī)上除了調(diào)試代理沒有其他用于嵌入式軟件開發(fā)的軟件資源一、常用的交叉開發(fā)方法

1.CrashandBurn方式在宿主機(jī)上編寫代碼;在宿主機(jī)編譯應(yīng)用程序,生成可執(zhí)行程序;固化到目標(biāo)機(jī)的非易失存儲(chǔ)器中;啟動(dòng)運(yùn)行,若正常則轉(zhuǎn)到⑦;不正確則根據(jù)目標(biāo)板上的信號(hào)顯示估計(jì)錯(cuò)誤位置,改寫代碼,糾正錯(cuò)誤;返回②重復(fù)操作;固化完成。2.ROMMonitor方式

優(yōu)點(diǎn):實(shí)時(shí)控制目標(biāo)機(jī)的內(nèi)存單元、寄存器、設(shè)置斷點(diǎn)等調(diào)試采用目標(biāo)機(jī)本身的串口、網(wǎng)口、USB口進(jìn)行ROMMonitor的缺點(diǎn):目標(biāo)機(jī)內(nèi)存使用與運(yùn)行時(shí)不一致目標(biāo)機(jī)CPU運(yùn)行與正常運(yùn)行時(shí)不一致無法調(diào)試通訊占用端口的相關(guān)代碼若目標(biāo)機(jī)CPU不支持硬件斷點(diǎn),則無法調(diào)試設(shè)置數(shù)據(jù)斷點(diǎn)無法調(diào)試系統(tǒng)啟動(dòng)初始化過程3.ROMEmulator方式

ROMEmulator是一種用于替代目標(biāo)機(jī)上ROM芯片的設(shè)備,插接到目標(biāo)機(jī)的ROM插座上,取代ROM內(nèi)存。4.ICE方式

ICE是一種用于替代目標(biāo)機(jī)上CPU的設(shè)備,可執(zhí)行目標(biāo)機(jī)CPU的指令,能將內(nèi)部的信號(hào)輸出到被控制的目標(biāo)機(jī),ICE上的內(nèi)存也可以被映射到用戶的程序空間。ICE方式

ICE方式的特殊調(diào)試功能

支持軟件斷點(diǎn)和硬件斷點(diǎn)的設(shè)置設(shè)置復(fù)雜的斷點(diǎn)和觸發(fā)器實(shí)時(shí)跟蹤目標(biāo)程序的運(yùn)行,并可實(shí)現(xiàn)選擇性的跟蹤支持“TimeStamp”允許用戶設(shè)置“Timer”提供“ShadowRAM”,支持非干擾調(diào)試查詢。5.OCD方式

采用兩級(jí)CPU模式:正常運(yùn)行模式調(diào)試模式OCD方式的優(yōu)點(diǎn)

性價(jià)比高不占用目標(biāo)機(jī)硬件資源調(diào)試環(huán)境和運(yùn)行環(huán)境一致能調(diào)試底層系統(tǒng)軟件OCD方式的缺點(diǎn)

調(diào)試的實(shí)時(shí)性不如ICE強(qiáng)不支持非干擾調(diào)試查詢

CPU必須有OCD功能

OCD標(biāo)準(zhǔn)不統(tǒng)一BDM方式

二、交叉開發(fā)過程

軟件生成軟件調(diào)試軟件固化應(yīng)用軟件生成階段

應(yīng)用軟件調(diào)試階段

應(yīng)用軟件固化階段

三、交叉開發(fā)環(huán)境

9.3

仿真開發(fā)技術(shù)利用計(jì)算機(jī)仿真技術(shù)模擬嵌入式硬件系統(tǒng)的真實(shí)運(yùn)行,使軟件開發(fā)和系統(tǒng)集成在虛擬平臺(tái)上進(jìn)行。仿真開發(fā)結(jié)構(gòu)示意

一、仿真開發(fā)分類

純軟件仿真開發(fā)是利用宿主機(jī)上的資源模擬目標(biāo)機(jī)實(shí)際硬件電路的運(yùn)行,構(gòu)建應(yīng)用軟件運(yùn)行所需的虛擬硬件環(huán)境,提供嵌入式軟件開發(fā)和調(diào)試的真正“軟”平臺(tái)。純軟件仿真開發(fā)分類

應(yīng)用級(jí)仿真編程接口級(jí)仿真硬件級(jí)仿真編程接口級(jí)仿真

硬件級(jí)仿真開發(fā)

二、仿真開發(fā)過程

三、仿真開發(fā)環(huán)境

四、仿真開發(fā)環(huán)境的特點(diǎn)

不需要提供實(shí)際的目標(biāo)硬件環(huán)境;編譯調(diào)試都在宿主機(jī)上進(jìn)行;可以最大限度地保證軟硬件同時(shí)開發(fā)。9.4

開發(fā)環(huán)境提供的主要工具項(xiàng)目管理器項(xiàng)目配置工具源碼編輯工具

CRTL(CRun-TimeLibrary)

RTOS開發(fā)支持包交叉編譯工具交叉調(diào)試工具交叉測(cè)試性能分析工具等一、項(xiàng)目管理

項(xiàng)目管理器一般采用通用的工作區(qū)、項(xiàng)目管理方式,這能較好的支持在不同硬件平臺(tái)上的軟件移植。二、配置剪裁

編譯參數(shù)配置工具實(shí)時(shí)操作系統(tǒng)裁剪工具內(nèi)存配置工具三、源碼編輯

標(biāo)準(zhǔn)的文本編輯功能支持語法色彩簡(jiǎn)單的語法檢查功能源程序函數(shù)索引、定位功能顯示調(diào)試信息文本保存的多中備份機(jī)制四、目標(biāo)代碼編譯生成

嵌入式開發(fā)環(huán)境一般提供工具make,它利用編譯器、匯編器、鏈接器和庫管理器等工具,根據(jù)Makefile文件,將源代碼轉(zhuǎn)換成目標(biāo)代碼。1.目標(biāo)代碼生成

設(shè)置目標(biāo)代碼生成選項(xiàng);

C源碼預(yù)處理;

C源碼編譯成匯編代碼;匯編語言程序轉(zhuǎn)換為可重定位目標(biāo)代碼;可重定位的目標(biāo)模塊鏈接成目標(biāo)程序;文件格式轉(zhuǎn)換。2.目標(biāo)代碼優(yōu)化

合并已有常量;公共子表達(dá)式刪除;控制流優(yōu)化;寄存器變量使用優(yōu)化;循環(huán)優(yōu)化;冗余指令刪除;窺孔優(yōu)化。3.編譯提示信息

錯(cuò)誤信息:致命錯(cuò)誤、一般錯(cuò)誤和警告。

過程信息

狀態(tài)信息4.庫的使用

在開發(fā)大中型軟件時(shí),常把一些編譯好的模塊統(tǒng)一放到一個(gè)庫中。5.常用文件后綴

.c或.cc或.cxx

或.cpp.h或.hpp.s或.asm.S.o或.obj.a或.lib.elf.omf.hex.eep.cof.s19或.s2或.s3.lst.map五、交叉調(diào)試

硬件:連接線、仿真頭、轉(zhuǎn)換板等連接硬件。

軟件:宿主機(jī)端調(diào)試工具和目標(biāo)機(jī)端ROMMonitor交叉調(diào)試定義

調(diào)試器能夠通過某種方式遠(yuǎn)程控制目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行模式,并且具備查看和修改目標(biāo)機(jī)上的內(nèi)存、寄存器以及被調(diào)試程序中的變量等功能。交叉調(diào)試與非交叉調(diào)試比較交叉調(diào)試本地調(diào)試Debugger和Debuggee運(yùn)行在不同的計(jì)算機(jī)Debugger和Debuggee運(yùn)行在同一臺(tái)計(jì)算機(jī)運(yùn)行時(shí)不一定需要操作系統(tǒng)的調(diào)試支持運(yùn)行時(shí)需要操作系統(tǒng)的調(diào)試支持Debuggee裝載由Debugger或Loader完成Debuggee的裝載是由專門的Loader程序完成需要通過外部通信的方式來控制Debuggee不需要外部的通信方式來控制Debuggee可以直接調(diào)試不同指令集的程序只能直接調(diào)試相同指令集的程序1.交叉調(diào)試支持的功能內(nèi)存寄存器斷點(diǎn)程序執(zhí)行變量顯示模式

OS-aware交叉調(diào)試的過程框架2.任務(wù)級(jí)調(diào)試調(diào)試對(duì)象是一個(gè)用戶任務(wù)(集),用戶可以自定義調(diào)試范圍。任務(wù)級(jí)調(diào)試3.系統(tǒng)級(jí)調(diào)試即內(nèi)核級(jí)調(diào)試,調(diào)試對(duì)象是目標(biāo)機(jī)上除調(diào)試代理外的所有程序,包括RTOS本身。系統(tǒng)級(jí)調(diào)試六、測(cè)試工具

嵌入式系統(tǒng)采用交叉測(cè)試,即嵌入式軟件測(cè)試必須由宿主機(jī)和目標(biāo)機(jī)協(xié)作完成。1.仿真測(cè)試

仿真測(cè)試環(huán)境可分為兩類:一類要求用戶改寫I/O部分代碼。無須改動(dòng)其源程序。純軟件仿真測(cè)試結(jié)構(gòu)框架

2.交叉測(cè)試

目標(biāo)機(jī)的測(cè)試分為兩類:仿真信號(hào)測(cè)試實(shí)物測(cè)試仿真信號(hào)測(cè)試的結(jié)構(gòu)

3.實(shí)時(shí)性測(cè)試

靜態(tài)時(shí)間分析。不執(zhí)行被測(cè)程序,通過分析估計(jì)執(zhí)行時(shí)間。

動(dòng)態(tài)實(shí)時(shí)檢測(cè)。實(shí)際執(zhí)行程序測(cè)試程序的時(shí)間特性。包括:在線仿真器、模擬器、插樁技術(shù)。

七、版本管理工具

版本管理是用戶對(duì)項(xiàng)目文件版本進(jìn)行控制的工具軟件。包括:版本庫和臨時(shí)工作區(qū)。嵌入式軟件版本管理工具的功能結(jié)構(gòu)

9.5GNU的嵌入式開發(fā)環(huán)境

C編譯器gccmake工具GNUmake

開發(fā)調(diào)試工具gdb一、gcc編譯器

gcc前端支持多種高級(jí)語言,后端支持多種平臺(tái),它是一個(gè)交叉編譯器,可以把源代碼編譯成在其他硬件平臺(tái)上運(yùn)行的可執(zhí)行代碼。1.編譯過程預(yù)處理編譯匯編鏈接預(yù)處理執(zhí)行源代碼的預(yù)處理,處理完后生成一個(gè)以“.i”為后綴名的臨時(shí)文件。編譯將預(yù)處理后生成的源代碼編譯為后綴名為“.s”的匯編文件。匯編

gcc調(diào)用as匯編程序,將匯編語言代碼轉(zhuǎn)換為以“.o”為后綴名的中間代碼。鏈接它調(diào)用ld鏈接程序,把所有目標(biāo)代碼以及靜態(tài)庫,定位鏈接生成最后的可執(zhí)行程序或其他格式的目標(biāo)文件。test.c的gcc編譯過程2.交叉gcc的生成

gcc的缺省配置是本地使用。當(dāng)需要交叉gcc時(shí),可利用Linux環(huán)境下提供的一些交叉gcc生成工具來重新配置。交叉gcc的生成過程重新生成binutils。生成LlinuxHeaders

生成目標(biāo)機(jī)的Glibc

生成交叉GCC二、項(xiàng)目編譯管理工具make

自動(dòng)查找已修改的源程序文件,并對(duì)它們進(jìn)行編譯;對(duì)未改動(dòng)的源程序文件,如果已經(jīng)存在中間代碼文件(“.o”文件)則不再重新編譯;將所有的中間代碼文件和庫鏈接成可執(zhí)行文件或特定格式的目標(biāo)文件。1.Make命令一般語法規(guī)則是:

make[-fmakefile文件名][其他選項(xiàng)][目標(biāo)名]說明:

-f:makefile的文件名字。

目標(biāo)名:所要更新目標(biāo)的名稱。兩個(gè)常用選項(xiàng)。:

-n:只顯示生成指定目標(biāo)的各命令,并不實(shí)際執(zhí)行,可以用來檢查make文件中的錯(cuò)誤。

-p:顯示并檢查make文件中的所有宏定義和所有內(nèi)部規(guī)則。2.目標(biāo)

make文件中描述了目標(biāo)依賴于哪些源程序文件,按照什么樣的規(guī)則生成。目標(biāo)的狀態(tài)取決于所依賴的源程序文件狀態(tài)。語法規(guī)則為:3.宏宏的基本定義語法為:

marco_name=string而已定義宏的引用語法規(guī)則為:$(marco_name)或者

${marco_name}Make內(nèi)部預(yù)定義的宏

$@,表示當(dāng)前目標(biāo)名。等價(jià)于語句:Make內(nèi)部預(yù)定義的宏

$*,表示去掉后綴的當(dāng)前目標(biāo)名。

$<,表示目標(biāo)所依賴文件名。4.符號(hào)

%,對(duì)應(yīng)于具體的文件名

@,表示命令本身不在屏幕上顯示。

:=,變量定義,它不是“=”符號(hào)。符號(hào)例如:結(jié)果是:5.函數(shù)語法格式如下:

$(funcnamearg1,…,argn)例如:

SOURCES=$(wildcard*.c)

產(chǎn)生一個(gè)所有以“.c”為后綴名的文件的列表,然后存入變量SOURCES中。

6.注釋

make文件的注釋是用“#”開頭的語句。示例三、gdb調(diào)試器

運(yùn)行程序,給程序加所需的執(zhí)行條件。使程序在斷點(diǎn)處暫停運(yùn)行,并可繼續(xù)運(yùn)行。顯示程序暫停時(shí)的狀態(tài)信息。允許在暫停的程序中改變運(yùn)行數(shù)據(jù)。程序運(yùn)行出錯(cuò)后可以事后分析。支持遠(yuǎn)程調(diào)試。支持源碼級(jí)調(diào)試。支持反匯編調(diào)試,可調(diào)試無源碼的可執(zhí)行文件。1.Gdb的調(diào)試過程串口接收程序test.cLinux環(huán)境下test.c的gdb調(diào)試過程2.Gdb遠(yuǎn)程調(diào)試宿主機(jī)端通訊系統(tǒng)目標(biāo)機(jī)端宿主機(jī)端宿主機(jī)上運(yùn)行g(shù)db主程序。調(diào)試步驟為:設(shè)置目標(biāo)機(jī)的類型、通訊斷口及通訊協(xié)議建立宿主機(jī)與目標(biāo)機(jī)的連接,進(jìn)行與本地調(diào)試相似的遠(yuǎn)程調(diào)試。宿主機(jī)端

gdb提供了target命令設(shè)置調(diào)試目標(biāo)及其參數(shù),建立連接,格式為:

targetTYPEPARAMETERSgdb的target命令支持多種類型的調(diào)試目標(biāo)設(shè)備。宿主機(jī)端在使用串口建立連接之前,須使用Set命令設(shè)置串口的波特率。如:setremotebaud9600

再使用targetremote命令指定與目標(biāo)機(jī)進(jìn)行串口通信端口。如:targetremote/dev/ttyS0通訊系統(tǒng)

硬件上:串口、并口、以太網(wǎng)口及紅外等。

軟件上:專門定義的遠(yuǎn)程串行通信協(xié)議(RSP)。調(diào)試信息數(shù)據(jù)包

調(diào)試信息,開始用“$”符號(hào)作為標(biāo)記,結(jié)尾用“#”符號(hào)。

校驗(yàn)碼,調(diào)試信息中所有字符的ASCII碼相加后取256的模。格式:$<調(diào)試信息>#<校驗(yàn)碼>常用調(diào)試命令及參數(shù)

g:查看CPU寄存器的值。

G:設(shè)置CPU寄存器的值。

maddr,count:從addr位置開始讀count字節(jié)的數(shù)據(jù)。

Maddr,count:從addr位置開始寫count字節(jié)的數(shù)據(jù)。常用調(diào)試命令及參數(shù)

c/caddr:在當(dāng)前位置繼續(xù)執(zhí)行程序或從addr開始。

s/saddr:?jiǎn)尾綀?zhí)行當(dāng)前的指令,或者執(zhí)行到指定的addr位置.k:殺掉target進(jìn)程。

?:打印出最近的信號(hào)值。

T:允許目標(biāo)機(jī)的stub發(fā)送gdb需要的基本寄存器信息。目標(biāo)機(jī)端目標(biāo)機(jī)上嵌入式應(yīng)用程序須預(yù)先加入了stub模塊,由stub模塊進(jìn)行串口驅(qū)動(dòng),進(jìn)行g(shù)db遠(yuǎn)程串口通信協(xié)議的解析,完成與宿主機(jī)gdb的通訊。目標(biāo)機(jī)端Stub種類

i386-stub.c:適用于Intel公司386系列及兼容處理器。

m68k-stub.c:適用于Motorola公司68K系列處理器。

sh-stub.c:適用于HitachiSH結(jié)構(gòu)的處理器。

sparc-stub.c:適用于SPARC結(jié)構(gòu)的處理器。

sparcl-stub.c:適用于Fujitsugongsi的SPARCLITE結(jié)構(gòu)的處理器。stub的基本結(jié)構(gòu)在被調(diào)試應(yīng)用程序的main()函數(shù)的開頭插入兩行代碼:

利用breakpoint()函數(shù)在程序中插入一個(gè)斷點(diǎn),使gdb獲得控制權(quán)。以i386-stub.c文件為例:Set_debug_traps()函數(shù)的源碼如下:Breakpoint()函數(shù)的源碼如下:BREAKPOINT宏定義如下:系統(tǒng)接到中斷請(qǐng)求后,調(diào)用中斷向量為3的中斷處理函數(shù),實(shí)現(xiàn)代碼如下:9.6

Windriver集成開發(fā)環(huán)境Tornado

內(nèi)核配置程序WindConfig

裝載器Loader

圖形化的交叉調(diào)試器WDB

工程配置工具集成仿真VxSimC/C++編譯環(huán)境ObjectCenter

命令行執(zhí)行工具WindSh

Tornado軟件邏輯分析儀WindView

對(duì)象瀏覽器Browser顯示軟件包ScopePak

性能檢測(cè)包PerformancePak

代碼測(cè)試器CodeTest

編輯工具VisualSlickEditforTornadoWorkbenchTornado與Workbench的功能對(duì)比

表9-2Tornado與Workbench的功能對(duì)比項(xiàng)目TornadoWorkbench工程管理基本的工程管理功能,對(duì)分級(jí)的工程支持有限,并需要手工修改makefile等,比較麻煩支持任意工程的分級(jí)控制,采用簡(jiǎn)單的“拖拉”方式就可完成工程項(xiàng)目的分級(jí)構(gòu)造,非常方便工程項(xiàng)目支持可下載的工程項(xiàng)目和客戶化的VxWorks工程項(xiàng)目增加了對(duì)系統(tǒng)引導(dǎo)工程項(xiàng)目、實(shí)時(shí)進(jìn)程工程項(xiàng)目、文件系統(tǒng)工程項(xiàng)目、用戶定制工程項(xiàng)目等的支持編輯器功能比較簡(jiǎn)單,只

溫馨提示

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

評(píng)論

0/150

提交評(píng)論