,,http://www.bjzhda.cnzh-cn曙海教育集團論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團論壇基于MPC860/VxWorks的嵌入式系統(tǒng)開發(fā)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2783&Page=1wangxinxin2010-12-19 15:59:39圖片點擊可在新窗口打開查看
WindRiver公司提供了很多基于不同硬件平臺的典型的板級支持包BSP。因此,開發(fā)基于VxWorks的實用板級支持包是盡量獲得一個與目標板硬件環(huán)境相近的參考板級支持包和相關代碼模板,再根據(jù)目標板硬件環(huán)境,完成板級支持包包含的驅(qū)動程序及設備初始化,從而完成板級支持包的開發(fā)[4]。
啟動Tornado II集成開發(fā)環(huán)境,使用工程向?qū)?chuàng)建一個可啟動工程(bootable VxWorks image)項目,選擇基于ads860的BSP。在這個工程項目里可以進行BSP的基本配置、VxWorks的基本配置、網(wǎng)卡配置等,結合實際電路和應用進行修改,創(chuàng)建用戶自己的BSP以支持特定硬件。前述bootrom程序也可由此生成。在此階段可以借助WDB調(diào)試代理和Tornado工具輔助開發(fā),也可以選擇在線仿真器ICE輔助開發(fā)。
BSP 調(diào)試完成,編譯此工程項目為一個VxWorks內(nèi)核鏡像文件*.img,在以后的應用程序調(diào)試過程中可通過Tornado的一個部件 ftp server下載。下載方法如下:
首先連接主機與目標板的網(wǎng)線和串口線,目標板上電后,在超級終端窗口3秒以內(nèi)按回車鍵進入boot shell;否則,目標機系統(tǒng)會進入自動尋找并運行程序狀態(tài)。
此時啟動和配置ftp server,選擇Security菜單中的user/rights命令,添加一個用戶名如target,密碼target,設置主目錄為C:\;然后點擊Done。ftp server配置完成。
現(xiàn)在需要設置主機ip地址。將主機ip設為192.168.1.1,子網(wǎng)掩碼255.255.255.0。將調(diào)試好的VxWorks鏡像文件*.img拷貝到C:\。
最后,在主機的串口超級終端中輸入設置好的下載命令@,目標板開始從主機的ftp server下載*.img(vxworks的ram鏡像)。
下載完成,*.img文件自動運行,在超級終端窗口顯示vxworks鏡像在目標板啟動成功的信息,此時vxworks內(nèi)核已經(jīng)成功裝載到目標板,可以同主機的tornado(vxworks的集成開發(fā)環(huán)境)進行連接了。
3.3  在tornado中編寫和運行應用程序
當上述環(huán)境配置成功后就可以進行應用程序開發(fā)了。在tornado集成開發(fā)環(huán)境中可以開發(fā)并調(diào)試各種應用程序,添加程序并編譯成功后就可以下載到目標板上進行調(diào)試了。下面通過一個應用程序調(diào)試示例加以說明。
4   開發(fā)應用程序示例
4.1 開發(fā)并編譯程序
啟動Tornado II集成開發(fā)環(huán)境,使用工程向?qū)?chuàng)建一個可下載工程(downloadable application modules)項目project1,在創(chuàng)建過程中選擇工具鏈(toolchain)為PPC860gnu。在工程項目中編寫或添加應用程序源文件,如一個Hello.c文件。
#include "vxworks.h"
#include "drv/multi/ppc860Siu.h"
void root()
{
printf("hello!How are you?\n");  /*在終端輸出此信息*/
}
#define PD10    (0x0020)
#define PD09    (0x0040)
#define RUNLIGHT  PD10
#define LINKLIGHT PD09
void RunLight(void)
{
 int immrVal = vxImmrGet();
        *PDDIR(immrVal)|=RUNLIGHT;
 while(1)
    {
  *PDDAT(immrVal) ^=RUNLIGHT;
  taskDelay(sysClkRateGet()/2);/*delay 0.5 second*/
    }                    
}
void run()
{
 taskSpawn ("RunLight", 100,0 /*switchTaskOptions*/,0x1000,
      (FUNCPTR)RunLight, 0,0,0,0,0,0,0,0,0,0);
} /*通過以上函數(shù)創(chuàng)建并激活一個新任務,點亮系統(tǒng)指示燈*/
4.2 配置和運行target server
使用Tornado編譯器編譯成功后下載。下載之前首先要配置和運行target server,在菜單tool/target server/configure中,先點擊new新建一個配置如configuration1, 然后開始配置。
在target server proportion 項的“Back End”的選項中選擇wdbrpc;
在target server proportion 項的“Core File and Symbols”的選項中設置vxworks鏡像文件位置為C:\;
在target name/ip address輸入目標板的ip 地址192.168.1.254;
配置完成,點擊Launch運行;
下面可以下載和運行應用程序了。
4.3下載和運行程序
在工程上點擊右鍵,選擇download project1.out下載應用程序到目標板,然后可以在Tornado中的shell里運行應用程序了,如在shell中運行hello.c中的root函數(shù)(在shell中打印hello!How are you?)和run(目標板的run燈會閃亮)。
在每次下載調(diào)試應用程序或添加新的應用程序時都不需要把它們和vxworks內(nèi)核編譯到一起,這樣節(jié)省了開發(fā)和調(diào)試時間。
5   總結
本文描述了基于嵌入式實時操作系統(tǒng)VxWorks的開發(fā)方法,憑借性能優(yōu)良的VxWorks和高度集成的開發(fā)環(huán)境,VxWorks的應用已成為新的研究熱點。在開發(fā)過程中使用相近的BSP開發(fā)用戶自己的板級支持包,難度降低了并縮短了開發(fā)時間,使用ftp server下載VxWorks內(nèi)核鏡像,使用Torndo 工具編譯、調(diào)試和下載應用程序。通過這樣的流程對應用程序的開發(fā)帶來了極大的方便,該方法已得到廣泛應用。
本文作者創(chuàng)新點:對基于VxWorks嵌入式操作系統(tǒng)在MPC8XX系列cpu上的開發(fā)過程進行了具體而實用的描述。有一定的應用價值。

]]>
嵌入式實時操作系統(tǒng)VxWorks入門(1)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2782&Page=1wangxinxin2010-12-19 15:09:14  VxWorks的實時性體現(xiàn)在能于限定的時間內(nèi)執(zhí)行完所規(guī)定的功能,并能在限定的時間內(nèi)對外部的異步事件作出響應。因此,實時性系統(tǒng)主要應用于過程控制、數(shù)據(jù)采集、通信、多媒體信息處理等對時間敏感的場合。本文將對這個操作系統(tǒng)進行一個入門級的、全面的介紹。為力求展示其全貌,全文共分五章:

  (1)搭建VxWorks嵌入式開發(fā)環(huán)境;

  (2)簡要介紹VxWorks的基本組成,內(nèi)核的基本結構;

  (3)概述VxWorks板級支持包(BSP)的概念及VxWorks的啟動過程;

  (4)介紹VxWorks設備驅(qū)動的架構及編寫方法;

  (5)指明VxWorks應用開發(fā)的思路,任務調(diào)度及任務同步、中斷與任務的同步機制。

  以上各章中將貫穿著許多實例,由于本文定位于入門級教程,所以文中的實例都將十分簡單。下面我們進入第一章內(nèi)容的講解。

  如圖1,嵌入式系統(tǒng)的調(diào)試方法一般為通過PC(宿主機)上的集成開發(fā)環(huán)境交叉編譯針對特定電路板(目標機)的程序,然后將程序通過目標板的JTAG、串口或網(wǎng)口等途徑下載到目標板上運行。因此,為了構造一個嵌入式系統(tǒng)的學習環(huán)境,擁有一塊包含CPU、存儲器及I/O電路(構造計算機系統(tǒng))的目標電路板往往是必要的。雖然許多集成開發(fā)環(huán)境附帶模擬軟件,但僅限于指令集的模擬,均無法模擬物理的目標機硬件平臺,因而在其上只能進行應用程序的象征性模擬開發(fā)。但是,并非所有人都能擁有一塊物理的電路板。在這種情況下,我們?nèi)绾螛嬙煲粋模擬的開發(fā)環(huán)境,其學習效果就如同擁有完全真實的電路板一樣呢?本文試圖解答此問題,主體內(nèi)容包括四個方面:

  (1) 利用VMware等軟件模擬真實的目標機;

  (2) 構建VMware虛擬PC上VxWorks BSP,建立Bootrom和OS映像;

  (3) 修改Tornado相關設置,連接宿主機與目標機,建立調(diào)試通道;

  (4) 寫一個簡單的應用程序并下載到目標系統(tǒng)運行。

  

圖片點擊可在新窗口打開查看

  圖1 嵌入式系統(tǒng)的調(diào)試

  本章工作的最終目標為:

  (1)VxWorks在VMware啟動成功并順利運行,如圖2;

  圖片點擊可在新窗口打開查看

圖2 在VMware中運行的VxWorks

(2)可在Tornado上針對目標板編譯程序并進行調(diào)試,如圖3。

  圖片點擊可在新窗口打開查看

圖3 與目標機建立調(diào)試通道的Tornado

  1. 模擬目標機

  PC也具有目標機的所有特點,實際上,我們可以把PC作為嵌入式系統(tǒng)的目標機,從而構造如圖4所示的開發(fā)模型:

  圖片點擊可在新窗口打開查看

  圖4 PC作為目標機

  很遺憾,這種方法實際上非常麻煩,同時開動兩臺PC進行調(diào)試將使你和你的室友飽受折磨,既然他如此地熱切于游戲和上網(wǎng)。因此,我們可以借助VMware來在本機上虛擬出另一PC。

  VMware的確是天才的作品!在同一PC上,利用VMware幾乎可以安裝所有的操作系統(tǒng),而且操作系統(tǒng)之間的切換不需要重新啟動電腦。VM的意義是Virtual Machine,即虛擬出一個邏輯的電腦,它可以提供基于Intel CPU的虛擬PC系統(tǒng)環(huán)境,包括CPU、內(nèi)存、BIOS、硬盤和其他外圍硬件設備。

  下面我們講解用VMware來建立一臺虛擬PC的步驟:

  (1)下載并安裝VMware;

  (2)使用VMware向?qū)Ы⒁粋針對VxWorks的虛擬機;

  此步驟中注意在操作系統(tǒng)中選擇“other”,如圖5:

  

圖片點擊可在新窗口打開查看

  由于目標機最終通過軟盤啟動,因此要求你的電腦具有軟驅(qū)。很遺憾,當年日常使用的軟盤如今成了古董,很少再有電腦配備軟驅(qū)。因此,我們再來制造一個假冒偽劣產(chǎn)品,虛擬一個軟驅(qū)。又一個天才的工具軟件RamDiskNT為我們提供了這一便利,圖6演示了用RamDiskNT虛擬一個1.44M軟盤的方法。

]]>
linux在vxworks開發(fā)過程中充當著怎樣的角色http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2781&Page=1wangxinxin2010-12-19 15:00:31現(xiàn)在的嵌入式產(chǎn)品配套大資料大多是和嵌入式linux相關的,提供的vxworks相關資料的卻相對較少.vxworks以其極強的實時行,一直勢頭強勁,linux以其非商業(yè)的特點一直深受廣大嵌入式開發(fā)者的青睞!

在這里我們撇開其商業(yè)性與否不談,但從利于我們學習的角度出發(fā),探討一下linuxvxworks開發(fā)學習過程中的作用,當然如果你非常精通linux對學習vxworks一定會有很大的幫助.當然你也可以完全撇開linux.但在這里,我們只是尋求一種學習vxworks的相對科學的途徑,怎樣在有限的時間內(nèi)把vxworks的學習效率提到最高?怎樣合理的把嵌入式開發(fā)商提供的linux資源運用到我們的vxworks開發(fā)中?是否有必要抽出時間去學習一下linux?研究到什么程度?這些問題對于做底層開發(fā)的廣大嵌入式愛好者尤為突出.

對于這些問題,希望大家從自己的開發(fā)經(jīng)歷談談自己看法,在這里只要你有過嵌入式開發(fā)的經(jīng)驗,你就可以暢所欲言,我們的目的是取長補短,相互提高!

]]>
VxWorks應用開發(fā)基本步驟http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2780&Page=1wangxinxin2010-12-19 14:53:28bootrom 是指on-chip bootrom,在CPU芯片內(nèi)部,內(nèi)嵌有小的boot程序(bootloader),類似于PC機主板上的BIOS的存儲區(qū)域。和boot image不是一回事。VxWorks文檔中的bootrom區(qū)是指boot image存放的位置。
boot image的作用是把VxWorks image 加載到主板。boot image只初始化很少的硬件系統(tǒng)如串口,網(wǎng)口等。為加載VxWorks image做準備,當VxWorks系統(tǒng)下載完畢后,boot image的作用也就完成了。
VxWorks image含有完整的VxWorks OS。是真正運行于目標板上的操作系統(tǒng)。應用程序運行于VxWorks系統(tǒng)之上。
boot image 和VxWorks image生成在使用BSP文件上的區(qū)別在于:在啟動順序中Bootrom調(diào)用bootConfig.c,而VxWorks調(diào)用usrConfig.c.

在ROM中vxworks運行的方式(和bootrom編譯到一起還是單獨固化到ROM中),在ROM中的內(nèi)存分配?
VxWorks加載到主板運行,分不同的情況,如果VxWorks是壓縮的,加載時解壓到RAM的RAM_HIGH_ADRS.
如果是ROM based VxWorks,VxWorks image的data段復制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中執(zhí)行。
既不壓縮又不ROM based的VxWorks直接copy到RAM_LOW_ADRS運行。

若在config.h中修改系統(tǒng)設置,如增加網(wǎng)卡等,是否需要重新燒bootrom?如果增加其他oem產(chǎn)品呢?

如果主板中有Boot image存在則不需要重新燒,用FTP等download加載VxWorks即可。

VxWorks 系統(tǒng)編程中任務級與中斷級的通訊如何實現(xiàn)?

中斷是由硬件觸發(fā),軟件的作用只是將中斷服務例程(ISP)與中斷事件連接起來.
1.使能中斷,函數(shù)intEnable().
2.用intConnect()登記中斷號,和相應的中斷例程ISR.
這樣一旦有中斷發(fā)生,系統(tǒng)自動跳轉(zhuǎn)到相應位置執(zhí)行ISR.
 
Bootloader怎么得到,如果對開發(fā)板有些改動,還能使用開發(fā)板的bootloader嗎?bootloader起到什么作用?
Bootloader相當于PC機主板上的BIOS,是最底層的引導軟件,初始化主板的基本設置,為接收外部程序做硬件上的準備.
有些bootloader已經(jīng)嵌在CPU內(nèi)了,沒有bootloader的CPU可以在片外的eeprom內(nèi)做bootloader,也可以不要bootloader,直接通過JTAG口灌入程序,開發(fā)板改動基本上不會影響bootloader.
 
VxWorks 應用程序編譯下載時常見問題及原因分析
 Tornado環(huán)境下編譯產(chǎn)生的錯誤:標準C函數(shù)或自己的函數(shù),變量不認識(undefined symbol),編譯失敗。
Tornado支持c 和 c++ ,文件后綴為.cpp時編譯器會認為是c++文件,這樣有些定義類型為C的函數(shù)在編譯或下載時不被認可。
解決方法是 1.把如果在c++文件(.cpp)中調(diào)用c函數(shù),應該把這些不被認可的c類型函數(shù)用語句extern "C"說明一下為c函數(shù)。
另外,如果將c文件的后綴小寫的.c誤寫為大寫的.C,也會出同樣的錯誤,編譯時不會編譯這個文件。
Tornado環(huán)境應用程序下載產(chǎn)生的錯誤:函數(shù)不認識(undefined symbol),下載失敗。
雖然編譯通過,可是下載時依然會有這樣的問題,仍然是函數(shù)或變量沒有定義。系統(tǒng)不認識,這是出錯的原因基本上時沒有定義的錯誤。查找包含函數(shù)或變量的頭文件是否加了進去。如果實在找不到定義的話,簡單的辦法是先把這他們?nèi)サ簦ó斎皇菦]有其他地方用到的情況下)試一試,先down下去,能運行后,然后添加,再繼續(xù)查找。

在ARM下不用Boot image,直接燒入VxWorks image的過程
有些ARM CPU一般分兩種運行方式,一種是Boot方式,一種是normal方式。
在Boot方式下直接燒寫VxWorks image到Flash, 這種VxWorks image包含有boot的功能(類似VxWorks.rom形式),中間那段燒寫到flash的程序是必須的,第一次通過串口下載VxWorks image到Dram是一個簡單的過渡,有boot loader控制。
當燒寫完成后,切換CPU到normal模式,系統(tǒng)啟動,開始逐行讀Flash中的指令,是由VxWorks BSP控制,根據(jù)不同的VxWorks image定義,執(zhí)行不同的操作,例如若VxWorks是壓縮的,則解壓復制到DRAM的高位地址,...。

VxWorks image 和Boot image中的兩次硬件初始化之間的區(qū)別
Boot image和VxWorks image都對硬件進行了初始化。兩次硬件初始化的是不同的。
BootRom映像主要作用是通過網(wǎng)口或串口下載VxWorks系統(tǒng),所以它只是初始化很少的硬件系統(tǒng)如串口,網(wǎng)口等來滿足下載VxWorks的需要,一旦VxWorks下載完畢。這些初始化過的硬件的作用也就完成了。
VxWorks啟動后會從新對幾乎所有的硬件設備進行完全的初始化來滿足VxWorks操作系統(tǒng)運行的需要。

匯編語言在VxWorks系統(tǒng)編程的使用: 
匯編語言主要出現(xiàn)在BSP文件roInit.s,sysAlib.s等,這些匯編指令是系統(tǒng)初始化硬件用的,硬件系統(tǒng)Power up時硬件特別是內(nèi)存沒有初始化,C函數(shù)庫沒有裝入內(nèi)存,系統(tǒng)此時不支持C語言程序,只支持它自己的32位匯編指令,所以只能用匯編指令來初始化硬件,為后續(xù)的操作系統(tǒng)包括C語言支持做準備.在OS正常運行后,就可以用C了.
Tornado不支持匯編指令,
匯編在編譯連接BSP,生成bootrom或VxWorks映像,才被編譯.有兩種方法:
1.現(xiàn)在可以在Tornado環(huán)境下生成bootrom或建 Bootable 的 project 生成 VxWorks
2.傳統(tǒng)的方法,在命令行方式,用make編譯生成.
在Tornado下的downloadable的project,application中不能用匯編.
不過一般匯編很少用.
可以與其他bsp文件在tornado下作成bsp或用命令行make.
VxWorks 下寫驅(qū)動需注意的問題
1。MMU 對該硬件的地址映射正確 (改 BSP )
2。中斷向量表該中斷的定義位置,知道相應中斷的中斷標志位等信息(改 BSP )
3。查出中斷號及中斷級別,硬件中斷登記 (INTCONNECT ),及 ISR
4。系統(tǒng)任務協(xié)調(diào),保證在該程序執(zhí)行時,沒有其它任務占用 CPU
]]>
VxWorks應用開發(fā)基本步驟http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2779&Page=1wangxinxin2010-12-19 14:40:13假設BSP部分已經(jīng)做好,下面說一下開發(fā)應用程序的基本步驟:

1.首先從Tornado中建立一個新的Project可以看出,有兩種映像可以選擇:Bootable和Downloadable,在開發(fā)初期通常是先建立一個不包含應用層模塊的bootable project,編譯出一個包含基本組件的VxWorks映像,將系統(tǒng)啟動起來;其實這一步編譯出的就是包含基本組建的一個VxWorks內(nèi)核,并沒有我們的應用代碼。

 

2.在和上面的Bootable工程相同的Workspace中建立一個Downloadable project,在這個工程中編寫、編譯應用層的模塊,然后動態(tài)下載到目標機中去調(diào)試;

3.應用層模塊調(diào)試完畢可以發(fā)布之后,可以將應用層模塊和第一步中的Bootable的VxWorks映像編譯到一起;這時候可以向Boottable Project中加入應用層代碼文件,加入方式是Add from project,然后把包含應用層代碼的Downloadable project中的文件導入Bootable project,重新編譯Bootable Project得到的就是包含應用層的可啟動的VxWorks影像。

4.把最終的映象放到軟盤、硬盤或者Ftp服務器相應的目錄下,這需要根據(jù)BootRom中bootline的啟動方式來決定。

 

]]>
提高效率的方法思考(基于Vxworks和Tornado的工作經(jīng)驗)歡迎大家討論指針http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2778&Page=1wangxinxin2010-12-19 14:35:38
敝人拋磚引玉版,出道時間短,只做過Tornado上的項目,想和大家討論一下如何提高工作效率的問題,看過人家寫過的一篇
文章,結合自己,寫了如下東西:

一.根據(jù)你從事的行業(yè),選擇合適你的工具。
俗話說:工欲善其事,必先利其器。
  1.一個穩(wěn)定的操作系統(tǒng):我用的是番茄花園SP2,不打任何補丁,打了我的Tornado就有問題,這個因人而異,看從事的具體工作;
  2.一個自己熟悉好用的輸入法:我的的是搜狗,以前用過紫光,Google,最后換到搜狗,畢竟這個是網(wǎng)絡時代的利器;
  3.一個好的閱讀pdf軟件:最好還再下載一個Adobe Acrobat,能制作PDF。
  4.一個好的Word版本:推薦Office 2007,帶上Visio。
  5.一個好的翻譯軟件:推薦谷歌金山詞霸版。
  6.一個或多個下載工具:我是迅雷,F(xiàn)lashGet,電驢,CuteFTP都用,一個自己想找的軟件不一定在正常渠道就能免費得到,要用心。
  7.一個好的瀏覽器:現(xiàn)在用Google的瀏覽器,單任務,不像IE慢,不過容易死,因為他相對比較快,這個看個人喜好。
  
  總結一下:軟件也是看人用的,用得不好,好的軟件也不好用;不好的軟件再熟練也不能提高的效率。
  所以說選對了好軟件只是提高效率的第一步,自己領進門,修行還是靠個人。
  
二.時刻總結,反思自己的弱點,到底慢在什么地方,如何改進彌補。

  1.對自己的電腦工作環(huán)境做到心中有數(shù),如果心中沒有數(shù),至少要在每個盤下面的目錄上體現(xiàn)出來所有工作資料的存放思路和方位。
  不要因為查找一個文件而浪費時間。 好的辦法是把常用的文件夾的快捷方式放在桌面上。
  
  2.整理好你的開始菜單,盡量把不用的刪除.用好任務欄上的”快速啟動“欄.三次鼠標雙擊就能找到你要的文件,這個一個目標。

  3.當然硬件有關的好多軟件也是要裝的,現(xiàn)在只裝了Protel99,我所從事的公司都用這個,其他的好軟件我只是聽說,沒有機會用,汗顏。

  4.一般來說,一個好的編譯器是很重要的,但是這個相對來說跟自己所處在的行業(yè)有關,這個東西一般都是確定的,如何用好編譯器的優(yōu)化等級,盡量打開所有編譯開關是需要的。在時間有空余的時候,研究一下你的編譯器,如何提高它的工作成效(注意不是效率,而是成效), 在編譯器上面我們考慮的不是編譯時間快慢,而是編譯器能找出多少錯誤,強烈推薦在Tornado中打開警告開關 -WALL,或者更多的編譯警告開關。
  這個還請大蝦指導,如何利用編譯器,在Vxworks的中文FAQ中有許多說明。
  也許還要看看GCC相關的資料。如能在Tornado中用上PC-Lint這樣的工具最好。

  5.一個好的帶編譯器的IDE往往不是一個好的編輯器,至少Tornado是這樣的。所以推薦一下Source Insight和UltraEdit,還有更好的請各位推薦。
  Source Insight的顏色區(qū)別和能快速查找子函數(shù),能根據(jù)函數(shù)形成調(diào)用的結構框圖對于閱讀程序很有幫助,但是它對中文支持不好。
  所以我們選擇UltraEdit來編寫,以前一直用其他工具來對比程序,如Beyond ComPare,現(xiàn)在我們用UltraEdit來對比,還是不錯的,小推薦一下。
  在Tornado中外掛UltraEdit:Tools->Option->External Tools->Command:輸入
  C:\Program Files\UltraEdit-32\Uedit32.exe $filename/$lineno,可以讓你編譯出錯的同時快速查找定位出錯的位置,可以快速修改。

  6.當然還有好多好的調(diào)試方式,最好的是深刻理解你所編寫的程序,明確知道你的程序運行結果應該是什么,如果出錯,第一步如果還是懷疑硬件, 或者懷疑編譯器,或者懷疑與自己無關的東西都是《代碼大全》作者所說的”迷信階段“,要相信科學,我們的程序不是到處亂跳的跳蚤,如果它到處亂跳,那就說明我們自己腦子中有Bug。

  7.單步調(diào)試是一個很重要的工具,用好它。

  8.學會用printf打印錯誤。用好快捷鍵,一個你天天打交道的軟件理所應當熟悉他的快捷鍵,這樣你也會快很多。

  9.學會用鉤子函數(shù),到了一定階段,你會發(fā)現(xiàn)出錯大多是指針錯誤(我只用過C,++都沒有用過,難免片面,見諒)。

  11.看看Shell命令,里面有好多好的命令,CheckStack,md,semShow,memShow,devs,iosFdshow,你都用好了么?

  12.你有兩個網(wǎng)卡么?沒有就打申請再買一個。串口夠用么?不要總把調(diào)試線拔來拔去,那不是給老板省錢,是給自己找罵。
  總是因為沒有插某根線而浪費10分鐘到半個小時時間來排查錯誤,那是浪費生命,這半個小時時間應該用來上CSDN或者看八卦新聞。
  
  

三.時刻學習,當然這個是最重要的,沒有積極向上的心態(tài)是不能讓我們做事情更有激情。
  聽人說過一句話,不是因為當前的工作不好你就懈怠,而是因為你懈怠而讓你工作不開心。
  不要讓環(huán)境左右你,如果那樣,你永遠也左右不了環(huán)境。
  
  從做硬件過度到嵌入式軟件或者是從上層軟件過度到嵌入式軟件都要學習的東西很多:
  《代碼大全2》,推薦指數(shù):*****
  《C++》,這是一個趨勢,而不是書,推薦指數(shù):*****
  學習軟件工程吧,UML的工具和語言,算法,重構,敏捷,都看看,學學。
  系統(tǒng)分析師?要不要考,這是個問題。至少可以看看,上面還有什么樣子的天空。
  還有好多,想起來再寫。
  Vxworks的書就不寫了,操作系統(tǒng)的概念才是核心,而到了最后還是行業(yè)應用,最重要的是市場。
  
  四.埋頭搞技術也不現(xiàn)實,抬頭看看前面的路,關心一下市場。
  
  別亂喝牛奶,人家是奶酸了加堿,堿多了加硫酸,還加雙氧水。
  努力掙錢,給孩子買外國奶粉。
  看看《南方周末》,即使丫漲價了,3塊錢。
  經(jīng)常上上天涯,看看今年的百大人物評選。
  沒事的時候改一下QQ簽名。
  熱愛生命,遠離國足。
  如果有可能,學個樂器。
  保持鍛煉,經(jīng)常運動。
]]>
基于ARM7核處理器VxWorks系統(tǒng)BSP設計http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=2777&Page=1wangxinxin2010-12-19 14:32:30ARM7TDMI核S3C4510B微處理器,并詳細介紹了利用該處理器所設計嵌入式系統(tǒng)以及VxWorks操作系統(tǒng)下BSP(Board Supported Package)的開發(fā)

    關鍵詞:ARM7TDMI S3C4510B VxWorks BSP  

1 介紹  

S3C4510B是三星公司推出的針對嵌入式應用的16/32 位嵌入式處理器,該微控制器專為以太網(wǎng)通信系統(tǒng)的集線器和路由器而設計,具有低成本和高性能的特點, S3C4510B中內(nèi)置了ARM公司設計的16/32位ARM7TDMI處理器, 可以執(zhí)行32位的ARM指令,也可執(zhí)行16位的THUMB指令, 并集成了多種外圍部件,主要有:  

● 時鐘頻率50MHz  

內(nèi)核/IO電壓3.3V  

● 8KB的Cache/SRAM  

● 一個10/100Mbps 以太網(wǎng)控制器,MII接口  

● 兩個HDLC通道,每個通道可支持10Mbps  

● 兩個UART通道  

● 兩個DMA通道  

● 兩個32位定時/計數(shù)器  

● 18個可編程I/O口  

● 中斷控制器,支持21個中斷源,包括4個外部中斷  

● 支持SDRAM,EDO DRAM,SRAM,F(xiàn)lash等  

● 具有擴展外部總線  

● JTAG接口,支持軟件開發(fā) ,硬件調(diào)試  

S3C4510B支持目前常用的嵌入式操作系統(tǒng),如VxWorks、pSoS、ucLinux等,本文將主要介紹VxWorks操作系統(tǒng)下的軟件開發(fā)。  

ARM7TDMI是ARM家族通用的一款32位微處理器,它主要為用戶提供了高性能、低價格解決方案。  

ARM7TDMI具有三級流水線的32位RISC處理器,處理器結構為馮·諾依曼Load/Store。該CPU具有兩種指令集,即ARM和Thumb指令集。ARM指令集是32位,它可以利用CPU最大性能;而Thumb指令集則是16位指令集。  

ARM7TDMI內(nèi)核方塊圖如圖1所示。



















圖片點擊可在新窗口打開查看





2 系統(tǒng)硬件圖  

該系統(tǒng)主要以S3C4510B為核心,外圍集成了以太網(wǎng)卡、SDRAM、FLASH、UART以及HDLC等。圖2是以S3C4510B為核心的最小系統(tǒng)設計圖。



















圖片點擊可在新窗口打開查看



    SDRAM選用HY57V653220(8Mbyte)、兩片F(xiàn)LASH分別為AM29F040(存放bootrom)和T28F160BT(作為文件系統(tǒng)用)。  

3 VxWorks操作系統(tǒng)下BSP構建  

在完成板上基本硬件的測試后,下面我就開始對vxWorks操作系統(tǒng)下BSP進行開發(fā),開發(fā)前需要做一些準備工作,如準備開發(fā)工具等。  

① 開發(fā)工具用的是Tornado2.2 for ARM;  

② 參考資料有BSP Kit、S3C4510B DataSheet;  

③ 參考Tornado2.2 for ARM下自帶的wrSBCArm7 BSP;  

④ 燒寫程序采用編程器。  

通常在開發(fā)BSP的時候,我們需要在Tornado原帶BSP目錄下找一個與我們所用的處理器相同或相近。與BSP相關的文件有:romInit.s、sysAlib.s、bootInit.c、bootConfig.c、sysLib.c、config.h、configNet.h、makefile以及與我們硬件相關的,如串口sysSerial.c等。由于篇幅所限,具體的文件作用在此就不說了。下面主要根據(jù)S3C4510B來闡述一下BSP開發(fā)步驟。  

(1)拷貝BSP  

將wrSBCArm7 BSP拷貝一份并命名為4510BSP,接下來的工作就是修改該目錄下的文件,從而得到自己的BSP。  

(2)修改MakeFile文件  

修改4510BSP目錄下的makefile文件,修改如下幾行:  

TARGET_DIR = 4510BSP # changed by caiyang  

VENDOR = CAI # changed by caiyang  

BOARD = MyArmBoard # changed by caiyang  

ROM_TEXT_ADRS = 01000000 # ROM entry address  

ROM_WARM_ADRS = 01000004 # ROM warm entry address  

ROM_SIZE = 00080000 # number of bytes of ROM space  

RAM_LOW_ADRS = 00006000 # RAM text/data address (bootrom)  

RAM_HIGH_ADRS = 00486000 # RAM text/data address (bootrom)  

MACH_EXTRA =  

注解:ROM_TEXT_ADRS:BOOT ROM的入口地址。對大多數(shù)板來說,這就是ROM地址區(qū)的首地址,然而也有的硬件配置使用ROM起始的一部分地址區(qū)作為復位向量,因此需要根據(jù)此設置偏移量作為它的地址。這個偏移量因CPU結構而定。  

ROM_WARM_ADRS:BOOT ROM熱啟動入口地址。它通常位于固定的ROM_TEXT_ADRS+4的地方。當需要熱啟動時,sysLib.c文件中sysToMonitor( )函數(shù)代碼明確的跳轉(zhuǎn)到ROM_WARM_ADRS地址處開始執(zhí)行。  

ROM_SIZE:ROM實際大小。  

RAM_LOW_ADRS:裝載Vxworks的地址。  

RAM_HIGH_ADRS:將Boot Rom Image拷貝到RAM的目的地址。  

注意:RAM_LOW_ADRS 和 RAM_HIGH_ADRS 都是絕對地址,通常位于DRAM起始地址的偏移量處,該偏移量取決于CPU結構,這需要參考VxWorks內(nèi)存分布。對于ARM的內(nèi)存分布請看圖3,從圖3可以看出RAM_LOW_ADRS在DRAM+0x1000處。這些地址對于S3C4510B來說都應該是重映射后的地址。  

(3)修改config.h文件  

主要是修改ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和undef掉不需要的部分。注意這些應該和makefile文件中設置的一致。  

(4)修改romInit.s文件  

CPU一上電就開始執(zhí)行romInit( )函數(shù),因此在romInit.s代碼段中它必須是第一個函數(shù)。對于熱啟動,處理器將會執(zhí)行romInit( )加上4后的代碼(具體參考sysLib.c中的sysToMonitor( )函數(shù))。更多的硬件初始化在sysLib.c中sysHwInit( )函數(shù)中,romInit( )的工作就是做較少的初始化并把控制權交給romStart( )(在bootInit.c文件)。  

在S3C4510B處理器中,romInit.s文件主要做了以下幾個工作:  

① 禁止CPU中斷并切換到SVC32模式;  

② 禁止中斷控制器;  

③ 初始化SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器,同時初始化了FLASH、SDRAM、DM9008等外圍設備;  

④ 將FLASH的內(nèi)容拷貝到SDRAM中;  

⑤ 改變FLASH和SDRAM的基地址,將SDRAM基地址改為0;  

⑥ 初始化堆棧指針;  

⑦ 跳轉(zhuǎn)到C程序romStart( )函數(shù)中。  

在這里,只需要修改SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器來設置FLASH、SDRAM、DM9008的基地址和大小即可。這需要根據(jù)板上的配置來修改,修改的內(nèi)容在wrSbcArm7.h文件中。  

BSP基本部分就已經(jīng)修改完成,至于bootInit.c和bootConfig.c文件,我們一般不需要修改它,只是在調(diào)試過程中為了方便調(diào)試,可以將他們拷貝到BSP目錄下,然后修改makefile文件,在makefile文件中添加如下兩句。  

BOOTCONFIG = bootConfig.c  

BOOTINIT = bootInit.c  

(5)利用tsfs(target server file system)下載  

要利用tsfs下載VxWorks,首先需要配置以下內(nèi)容:  

① 在config.h文件中添加如下內(nèi)容  

/* Serial port configuration */  

#define INCLUDE_SERIAL  

#undef NUM_TTY  

#define NUM_TTY N_SIO_CHANNELS  

#undef CONSOLE_TTY  

#define CONSOLE_TTY 0  

#undef CONSOLE_BAUD_RATE  

#define CONSOLE_BAUD_RATE 38400  

/*** WDB ***/  

#ifdef SERIAL_DEBUG  

#define WDB_NO_BAUD_AUTO_CONFIG  

#undef WDB_COMM_TYPE  

#undef WDB_TTY_BAUD  

#undef WDB_TTY_CHANNEL  

#undef WDB_TTY_DEV_NAME  

#define WDB_COMM_TYPE WDB_COMM_SERIAL /* WDB in Serial mode */  

#define WDB_TTY_BAUD 38400 /* Baud rate for WDB Connection */  

#define WDB_TTY_CHANNEL 1 /* COM PORT #2 */  

#define WDB_TTY_DEV_NAME "/tyCo/1" /* default TYCODRV_5_2 device name */  

#endif /* SERIAL_DEBUG */  

/* tsfs added by caiyang */  

#define INCLUDE_TSFS_BOOT  

并修改引導行為  

#define DEFAULT_BOOT_LINE \par "tsfs(0,0)host:vxWorks f=8 h=169.254.72.67 e=169.254.72.68 u=caiyang pw=caiyang"  

注:串口1用來顯示引導信息,相當于PC機中的顯示器,串口2用來下載VxWorks和調(diào)試。同時串口2波特率不能太高,經(jīng)測試115200好像不行。  

② 配置target server  

啟動Tornado開發(fā)環(huán)境,選擇Tool->target server菜單。在下拉菜單中選“target server file system”并選中Enable File System,然后目錄指向Vxworks所在的地方。同時注意要把Tornado Registry打開,這樣配置完后點擊Launch按鈕即可連接成功,此后就可以通過串口2下載VxWorks和調(diào)試。





















圖片點擊可在新窗口打開查看

  

一般情況下,我們首先調(diào)試好BSP,然后在調(diào)試網(wǎng)卡。所以在調(diào)試網(wǎng)卡前,我們需要用串口來下載VxWorks映像。  

至此,我們的BSP就開發(fā)完成。  

4 結論  

在沒有調(diào)試BSP的硬件工具如仿真器的時候,我們只能通過點燈或者串口輸出來定位程序執(zhí)行的正確性。這大大增加了調(diào)試難度和進程。對于BSP開發(fā),一般需要從一個模板來修改。BSP開發(fā)的正確性直接影響到VxWorks系統(tǒng)運行的穩(wěn)定性。  (52RD.com)]]>
VxWorks WTX C API函數(shù)庫應用簡介http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1964&Page=1wangxinxin2010-12-1 14:04:59WTX概況
Tornado 公開了應用程序接口和協(xié)議。對 Tornado 工具而言 ,有兩個重要的協(xié)議 WTX (Wind River Tool eXchange)和 WDB (Wind DeBug) ,它們是聯(lián)系 Tornado 工具和目標機的媒介。
WTX協(xié)議負責目標服務器和駐留主機的開發(fā)工具之間的通信。該協(xié)議是可擴展的 ,允許添加新工具設計中需要的新的服務。
WDB 協(xié)議負責目標服務器和目標機代理器之間的通信。


WTX語言支持
WTX協(xié)議通常是通過TCL命令與C函數(shù)來進行訪問的。分別提供了TCL接口函數(shù)庫與C語言的函數(shù)庫。


WTX協(xié)議的通信機制
WTX協(xié)議提供了Tool 與Target Server之間的接口。他們之間的通信機制如下,一個Tool向Tareget Sever請求信息或執(zhí)行動作,WTX將這些請求傳達給Target Server,而后Target Server 將作出適當?shù)捻憫?/font>



WTX 消息格式
所有的WTX消息都在installDir/host/include/wtxmsg.h中被詳細定義了,這些消息都有一個同樣的前綴“WTX_MSG_”。這些消息的定義中都包括一個WTX_CORE結構(如下所示),該結構中包括了這個消息的標識符與相應的錯誤代碼errCode。當消息被正確的調(diào)用則返回OK,errCode錯誤代碼為0,否則如果調(diào)用失敗則返回相應的errCode錯誤代碼(非零值)?筛鶕(jù)錯誤的返回值errCode到installDir/host/include/wtxerr.h中找到相應的錯誤信息。
typedef struct wtx_core               

/* WTX message core */

{
UINT32       objId;                 /* identifier */
WTX_ERROR_T  errCode;               /* service error code */
UINT32       protVersion;           /* WTX protocol version */

} WTX_CORE;



WTX
協(xié)議應用范圍
Sessions交互時域與日志的管理;
系統(tǒng)級與任務級的調(diào)試;
Tool與Target Sever的綁定
目標機內(nèi)存的訪問
Tool與Target Server的斷開
管理目標模塊
管理符號表
管理上下文
支持虛擬輸入輸出
管理事件
支持Gopher


WTX
協(xié)議的C語言API
WTX C API是專為ANSI C而設計的,其將允許C應用程序可以享受Target Sever 的服務。任何的WTX應用都可以通過WTX C API來實現(xiàn)。
每一個WTX 的請求都被配備了相應的C語言子函數(shù)。例如,WTX_MEM_READ被配備了C函數(shù)wtxMemRead( ),所有的WTX C API 函數(shù)名都是從WTX的協(xié)議請求而來的。所欲的WTX C API都被保存在installDir/host/hostType/lib/libwtxapi中。

WTX C API調(diào)用框架

Tornado提供了wtx庫wtxapi.dll,其函數(shù)聲明在\host\include\wtx.h中,下面闡述了如何調(diào)用這些函數(shù)。
①包含庫文件說明:
#include “wtx.h”
②定義句柄結構:
HWTX
hwtx;
/* HWTX是句柄結構 */
③初始化WIX句柄:
/*initialize WTX session handle */
if(wtxInitialize(&hWtx)!=WTX_OK)

return (WTX_ERROR);
④連接到名字為“xulifeng”的目標機服務器:
/* attach to Target Sever named “xulifeng” * /
if(wtxToolAttach(hWtx,“xulifeng”,“wtxApp”)!=WTX_OK)

return(WTX_ERROR);
⑤ 注冊事件(缺省是全部的事件):
if(wtxRegisterForEvent(hwtx,".*") != WTX_OK)
{
wtxToolDetach(hWtx);
return(WTX_ERROR);
}

這里添加wtx應用程序部分
.
.
.
.

斷開連接
wtxToolDetach(hWtx);

結束任務
wtxTerminate(hWtx);
在wtx應用程序部分,用戶可以根據(jù)需要調(diào)用相應函數(shù)來完成自己想要實現(xiàn)的功能。如查看內(nèi)存、查看任務、下裝程序、運行任務等等。
]]>
一種VxWorks內(nèi)存管理方案http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1963&Page=1wangxinxin2010-12-1 13:51:45摘要:探討嵌入式開發(fā)對內(nèi)存管理的基本要求、嵌入式開發(fā)內(nèi)存管理的關鍵問題以及給出一種VxWorks內(nèi)存管理方案,即把除VxWorks系統(tǒng)保留內(nèi)存以外的內(nèi)存分為三種類型進行管理:固定大小的緩沖池、動態(tài)可變的堆以及由各種固定大小的緩沖區(qū)組成的隊列。

   目前,針對有內(nèi)存管理單元MMU(Memory Management Unit)的處理器設計的一些桌面操作系統(tǒng),如Windows、Linux,使用了虛擬存儲器的概念。虛擬內(nèi)存地址被送到MMU映射為物理地址,實際存儲器被分割為相同大小的頁面,采用分頁的方式載人進程。
   大多數(shù)嵌人式系統(tǒng)針對沒有MMU的處理器設計,不能使用處理器的虛擬內(nèi)存管理技術,而采用實存儲器管理策略。因而對于內(nèi)存的訪問是直接的,它對地址的訪問不需要經(jīng)過MMU,而是直接送到地址線上輸出,所有程序中訪問的地址都是實際物理地址;而且,大多數(shù)嵌人式操作系統(tǒng)對內(nèi)存空間沒有保護,各個進程實際上共享一個運行空間。一個進程在執(zhí)行前,系統(tǒng)必須為它分配足夠的連續(xù)地址空間,然后全部載人主存儲器的連續(xù)空間。
    由此可見,嵌人式系統(tǒng)的開發(fā)人員不得不參與系統(tǒng)的內(nèi)存管理。從編譯內(nèi)核開始,開發(fā)人員必須告訴系統(tǒng)這塊開發(fā)板到底擁有多少內(nèi)存;在開發(fā)應用程序時,必須考慮內(nèi)存的分配情況并關注應用程序需要運行空間的大小。另外, 由于采用實存儲器管理策略,用戶程序同內(nèi)核以及其他用戶程序在一個地址空間,程序開發(fā)時要保證不侵犯其它程序的地址空間,以使得程序不至于破壞系統(tǒng)的正常工作,或?qū)е缕渌绦虻倪\行異常;因而,嵌人式系統(tǒng)的開發(fā)人員對軟件中的一些內(nèi)存操作要格外小心。

1 嵌入式系統(tǒng)中對內(nèi)存分配的要求
    嵌人式系統(tǒng)開發(fā)對內(nèi)存分配有很高的要求:
① 內(nèi)存能快速申請和釋放,即快速性。嵌人式系統(tǒng)中對實時性的保證,要求內(nèi)存分配過程要盡可能地快;
② 內(nèi)存分配保持原子性,即可靠性。也就是內(nèi)存分配的請求必須得到滿足,如果分配失敗可能會帶來災難性的后果;
③ 內(nèi)存應該各盡其用,即高效性。內(nèi)存分配要盡可能地少浪費。不可能為了保證滿足所有的內(nèi)存分配請求而將內(nèi)存配置得無限大。

2 VxWorks內(nèi)存管理機制
    VxWorks采用用戶程序、內(nèi)核處于同一個地址空間的內(nèi)存管理策略,軟件開發(fā)人員在開發(fā)程序時必須保證不侵犯其他程序和內(nèi)核的地址空間,以免破壞系統(tǒng)的正常工作或?qū)е缕渌绦虍惓_\行。內(nèi)核負責為程序分配內(nèi)存、動態(tài)分配內(nèi)存和回收內(nèi)存。VxWorks為用戶提供兩種內(nèi)存區(qū)域:內(nèi)存域region和內(nèi)存分區(qū)partitionregion是可變長的內(nèi)存區(qū),可以從創(chuàng)建的region中在分配段segment,region的特點是容易產(chǎn)生碎片,但靈活、不浪費;partition是定長的內(nèi)存區(qū),用戶可以從創(chuàng)建的partition中分配內(nèi)存塊或在某個內(nèi)存分區(qū)中再創(chuàng)建一個內(nèi)存分區(qū),partition的特點是無碎片、效率高,但浪費。通常,VxWorks內(nèi)核和應用程序?qū)?nèi)存的操作是基于內(nèi)存分區(qū)進行的。內(nèi)存池是一塊連續(xù)的內(nèi)存區(qū)域,包含一個或多個內(nèi)存塊。內(nèi)存分區(qū)包含分區(qū)自身的描述信息(一個結構體)和一個或多個內(nèi)存池,描述信息保存在系統(tǒng)內(nèi)存分區(qū)中,內(nèi)存池是該分區(qū)實際擁有的內(nèi)存空間。內(nèi)存分區(qū)剛創(chuàng)建完畢時,只有一個內(nèi)存池,以后用戶程序可往該分區(qū)中添加內(nèi)存池。內(nèi)存池之間的地址不一
定連續(xù),VxWorks在啟動過程中會創(chuàng)建一個包含系統(tǒng)內(nèi)存池的系統(tǒng)內(nèi)存分區(qū),如圖1所示。VxWorks的內(nèi)存管理采用自由鏈管理內(nèi)存空閑塊。用首先適配算法動態(tài)分配內(nèi)存,內(nèi)存釋放時,采用上下空閑區(qū)融合的方法,即把相鄰的空閑內(nèi)存塊合并,沒有清理碎片的功能。
圖片點擊可在新窗口打開查看

3 對VxWorks內(nèi)存管理的改進
    改進的緩沖區(qū)管理模塊的作用在于加強VxWorks實時操作系統(tǒng)對內(nèi)存的管理,并為上層應用程序提供所需內(nèi)存申請和釋放工作。因此本改進模塊位于VxWorks實時操作系統(tǒng)模塊和應用程序模塊之間。
    CPU實際物理內(nèi)存在bootRoom啟動時劃分為兩部分:VxWorks內(nèi)核操作系統(tǒng)內(nèi)存和保留給用戶管理的內(nèi)存。為了便于管理,對為用戶保留內(nèi)存作進一步劃分,使用memPartCreate函數(shù)創(chuàng)建兩個內(nèi)存分區(qū):一個分區(qū)用來生成預先申請好固定大小緩沖池;另一分區(qū)以堆方式向上層提供的緩沖池。這樣就把物理內(nèi)存劃分成3個部分:
(1)Paal:VxWorks系統(tǒng)內(nèi)存,在物理低端;
(2)Part2:預先申請好的固定大小的緩沖池,每種固定長度的內(nèi)存緩沖區(qū)形成一個隊列;
(3)Pan3:以堆方式提供給上層應用程序的緩沖池;
內(nèi)存劃分如圖2所示。
圖片點擊可在新窗口打開查看
3.1 不同大小固定長度緩沖區(qū)管理
    為了避免內(nèi)存碎片,我們采用預先分配內(nèi)存塊的方式實現(xiàn)對堆內(nèi)存分區(qū)進行管理:分區(qū)內(nèi)的所有內(nèi)存隊列,每個隊列管理一定數(shù)量大小相同且已經(jīng)申請好的內(nèi)存塊,這些內(nèi)存塊永久占用。然后對每個內(nèi)存隊列管理數(shù)據(jù)結構進行維護。上層應用程序調(diào)用模塊接口函數(shù)從緩沖池中
申請和釋放。每塊緩沖區(qū)的用戶區(qū)填充默認內(nèi)容。

3.2 堆方式內(nèi)存的管理
    對于堆內(nèi)存的使用,我們對VxWorks的兩個內(nèi)核函數(shù)memPartAlloc()和memPartFree()進行了封裝,并在調(diào)試版本中加入信息,如圖3所示。
圖中:BLOCK- HDR表示內(nèi)存塊頭,OAHEAD表示塊附加信息頭,pbuf指向?qū)嶋H的堆空間,size為堆的大小。
圖片點擊可在新窗口打開查看
3.3 快速內(nèi)存分配管理
    對于協(xié)議等存在大量、快速地申請/釋放內(nèi)存的操作而言,在系統(tǒng)運行一段時間后內(nèi)存都變成了碎片,再申請大塊內(nèi)存時容易失敗。提供一種快速的內(nèi)存申請/釋放的方式,并且最大程度地減少系統(tǒng)的內(nèi)存碎片。提供64/128/……/524 288大小的內(nèi)存使用快速內(nèi)存分配管理機制,則在一個大的內(nèi)存塊內(nèi)部進行內(nèi)存使用,申請/釋放時不涉及到系統(tǒng)對內(nèi)存的拆鏈/建鏈過程,比較快速,并且對釋放的內(nèi)存進行合并,保證系統(tǒng)有盡可能多的大塊內(nèi)存。如圖4所示。
圖片點擊可在新窗口打開查看
4 小結
    許多嵌入式應用開發(fā)在實時操作系統(tǒng)提供的malloc()和free()函數(shù)的基礎上編寫自己的內(nèi)存管理方案。編寫這樣的內(nèi)存管理方案,一方面可以減少對malloc()和free()函數(shù)的依賴,統(tǒng)一內(nèi)存應用接口,從而避免此之帶來的內(nèi)存碎片、時間不確定等缺點,另一方面可以增強程序的查錯能力,減少內(nèi)存使用錯誤。對于在嵌入式系統(tǒng)中廣泛存在的數(shù)據(jù)庫類型的內(nèi)存需求,把由用戶管理的內(nèi)存分為固定大小的緩沖區(qū)、以堆方式分配的緩沖區(qū)和不同固定大小內(nèi)存隊列的分配方式,體現(xiàn)了內(nèi)存管理的優(yōu)越性

]]>
基于μC/OS的嵌入式系統(tǒng)應用開發(fā)研究http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1962&Page=1wangxinxin2010-12-1 13:49:25關鍵詞:嵌入式系統(tǒng)  μc/os  微處理器

Abstract: The paper bring forward the conception of Embedded System ,Analyse the core kere of μc/os ,moreover  detailedly introduce grafting the μC/OS‘s operating system on the ARM‘s architectural structure of S3C44B0‘s microprocessor and empolder  on application and driver program 。

Key words:  Embedded System   μc/os   MicroProcessor

一、嵌入式系統(tǒng)概述

嵌入式系統(tǒng)是將先進的計算機技術、半導體技術和電子技術與各個行業(yè)的具體應用相結合后的產(chǎn)物,目前嵌入式系統(tǒng)已經(jīng)滲透到日常生活的各個方面,其在工業(yè)、服務業(yè)、消費電子等領域的應用范圍都不斷擴大,嵌入式計算機系統(tǒng)的正式定義為:以應用為中心,以計算機技術為基礎,軟件硬件可裁減,符合應用系統(tǒng)對功能、可靠性、成本、體積、功耗的嚴格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)的主要特征有:系統(tǒng)內(nèi)核;專用性強;系統(tǒng)精簡;嵌入式軟件要求高實時性的操作系統(tǒng)軟件;軟件要求高質(zhì)量和高可靠性;嵌入式系統(tǒng)開發(fā)需要專門的開發(fā)工具和環(huán)境。

 嵌入式系統(tǒng)由硬件和軟件兩大部分組成,在本開發(fā)應用中,選擇ARM7TDMI內(nèi)核結構的samsung公司的s3c44b0作為微處理器芯片,該芯片具有主頻高、運算速度快,超低功耗、價格低廉、結構簡單等特點,在該內(nèi)核基礎上擴展了一系列完整的通用外圍器件,主要有:片內(nèi)8KB高速緩存、帶有1個專用DMA通道的LCD控制器、2個通用DMA通道、1個多主機I2C總線控制器、5個PWM定時器及1個內(nèi)部定時器、71個通用I/O口、8個外部中斷源、8個10位ADC等資源,主頻為66MHZ,系統(tǒng)支持大小端模式,共256MB的地址空間,支持8/16/32位數(shù)據(jù)總線編程。

開發(fā)平臺外配與用戶交互接口有RS-232串口電路、外擴flash、sdram,USB控制電路、以太網(wǎng)電路、鍵盤,JTAG接口電路部分。

實時嵌入式操作系統(tǒng)的種類繁多,大體上可以分為兩種:商用型和免費型,前者系統(tǒng)功能穩(wěn)定、可靠,并有完善的技術支持和售后服務,建立應用開發(fā)較為容易,但價格昂貴,代表性的有美國WindRiver公司的VxWorks操作系統(tǒng)、Microsoft公司的WinCE操作系統(tǒng);免費型可以節(jié)約成本,且源碼公開,便于開發(fā),代表性的有嵌入式Linux系統(tǒng)、μC/OS系統(tǒng)。

 

二、嵌入式μC/OS的體系結構介紹

由于μC/OS結構簡單,編程工具絕大部分是C語言編程,可以在大多數(shù)界面友好的編譯器中編譯生成目標代碼,如Borland C、Keil等工具,且其內(nèi)核最小可以到幾十K,可以在多種體系結構的微處理器上移植,用戶的工作較小,源代碼開放,便于學習。μC/OS-II的幾大組成部分有

核心部分(OSCore.c) 是操作系統(tǒng)的處理核心,包括操作系統(tǒng)初始化、操作系統(tǒng)運行、中斷進出的前導、時鐘節(jié)拍、任務調(diào)度、事件處理等多部分。

  任務處理部分(OSTask.c)完成任務的操作;包括任務的建立、刪除、掛起、恢復等等。

  時鐘部分(OSTime.c)主要完成任務延時等操作。
  任務同步和通信部分 為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標志等部分;  μC/OS-II的軟件體系結構如圖1所示。從圖1中可以看到,如果要使用μC/OS-II, 必須為其編寫OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM三個文件。

三、μC/OS在ARM微處理器上的移植

μC/OS-II的全部源代碼量大約是6000-7000行,一共有15個文件。將 μC/OS-II 移植到ARM處理器上,需要完成的工作也非常簡單,只需要修改三個和ARM體系結構相關的文件,代碼量大約是500行。以下分別介紹這三個文件的移植工作

OS_CPU.H 文件  數(shù)據(jù)類型定義,這部分的修改是與所用的編譯器相關的,不同的編譯器會使用不同的字節(jié)長度來表示同一數(shù)據(jù)類型,這里采用的編譯器為集成可視化開發(fā)環(huán)境ARM SDT 2.5,相關的數(shù)據(jù)類型的定義

 

#define BYTE   INT8S     /* Define data types for  backward compatibility */              

#define UBYTE   INT8U     /*  .to uC/OS V1.xx.  Not actually needed for .  */

#define WORD   INT16S   /*    ... uC/OS-II.          */             

#define UWORD   INT16U

#define LONG   INT32S

#define ULONG   INT32U

堆棧單位因為處理器現(xiàn)場的寄存器在任務切換時都將會保存在當前運行任務的堆棧中,所以OS_STK 數(shù)據(jù)類型應該是和處理器的寄存器長度一致的。

typedef unsigned int   OS_STK;   /*   Each stack entry is 16-bit wide    */

堆棧增長方向該設置由編譯器選項決定,在本開發(fā)中設定堆棧由高地址向低地址增長。

#define OS_STK_GROWTH   1      //define the stack to grow from high to low

2、OS_CPU_C.C 文件

任務堆棧初始化  這里涉及到任務初始化時的一個堆棧設計,也就是在堆棧增長方向上如何定義每個需要保存的寄存器位置,在ARM體系結構下,任務堆棧空間由高至低依次將保存著pc、lr、r12、r11、r10、… r1、r0、CPSR、SPSR。

void  *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt)

{

   unsigned int *stk ;

   opt   = opt;          /*  ‘opt‘ is not used, prevent warning   */

   stk   = (unsigned int *)ptos;   /*    Load stack pointer        */                

   *--stk = (unsigned int) task;     / *    lr           */

   ……;            /*    r12—r0   */

   *--stk = ARM_MODE_SYS;        /*   system mode   */

   *--stk = ARM_MODE_SYS;        /*   system mode   */

   return ((void *)stk);

}

當前任務堆棧初始化完成后,OSTaskStkInit 返回新的堆棧指針stk,在 OSTaskCreate()執(zhí)行時將會調(diào)用 OSTaskStkInit 的初始化過程,然后通過OSTCBInit()函數(shù)調(diào)用將返回的sp指針保存到該任務的TCB塊中。

OSStartHighRdy()  該函數(shù)是在主程序OSStart( )多任務啟動后執(zhí)行,負責從最高優(yōu)先級任務的TCB控制塊中獲得該任務的堆棧指針sp,通過sp依次將cpu現(xiàn)場恢復,這時系統(tǒng)就將控制權交給用戶創(chuàng)建的該任務進程,僅執(zhí)行一次,此后多任務優(yōu)先級調(diào)度由下面函數(shù)執(zhí)行

]]>
SOLID正式發(fā)布solidDB for VxWorkshttp://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1961&Page=1wangxinxin2010-12-1 13:39:27數(shù)據(jù)庫解決方案供應商Solid? Information Technology日前正式發(fā)布solidDB for VxWorks,并藉此機會進一步加強其與 Wind River的戰(zhàn)略合作伙伴關系。solidDB關系型數(shù)據(jù)庫已經(jīng)被全球超過300萬關鍵任務系統(tǒng)所采用,而Wind River 的 VxWorks 平臺是全球應用最為廣泛的實時操作系統(tǒng)和設備軟件應用平臺,采用該平臺的開發(fā)人員長期依賴于solidDB,以實現(xiàn)其在性能、可用性和可擴展性方面最嚴苛的要求。剛剛發(fā)布的solidDB for VxWorks 在各方面都做了更進一步的優(yōu)化,以滿足 VxWorks 用戶的獨特要求。

  Solid? Information Technology的旗艦產(chǎn)品solidDB是知名的關系型數(shù)據(jù)庫,并因可嵌入到超快速、永不間斷數(shù)據(jù)訪問的應用程序中而廣受業(yè)界肯定。solidDB也是當今唯一將全事務處理的內(nèi)存數(shù)據(jù)庫與功能強大的磁盤數(shù)據(jù)庫集成到一個小型低成本產(chǎn)品中的數(shù)據(jù)管理平臺,其內(nèi)存引擎與磁盤引擎可同時運行,并可共享同一標準編程接口。特別指出的是,這些特性還可應用于高級功能,例如復制及高可用性,從而極大地降低了開發(fā)新應用的復雜性,縮減了時間和成本。

  VxWorks環(huán)境要求在極短的響應時間內(nèi)執(zhí)行應用程序,并將所需的內(nèi)存及處理資源降至最低程度,而solidDB for VxWorks 專門針對其與VxWorks環(huán)境的無縫集成進行了特別優(yōu)化。

  Wind River 產(chǎn)品管理總監(jiān) Warren Kurisu 說:“伴隨著設備最終用戶技術水平的提高,他們也對設備軟件中的新功能和新服務提出了更多的需求,例如 e911、一鍵通(Push-To-Talk)和VoIP。solidDB for VxWorks 的優(yōu)越性能、高可用性及嵌入式特性使得需要為跨越多個行業(yè)從事應用開發(fā)的軟件人員能夠更好地滿足上述需求!

  Monash Information Services 總裁 Curt Monash 博士說:“正如傳統(tǒng)應用程序所印證的那樣,當實時應用程序更加豐富時,一定會需要強大可靠的數(shù)據(jù)管理功能。Solid 的產(chǎn)品長期致力于可嵌入的實時數(shù)據(jù)庫系統(tǒng),并已在這個市場占據(jù)了領先的地位!

  Solid Information Technology 副總裁 Paola Lubet 說:“在幫助開發(fā)人員超越應用程序性能要求方面,Solid具有無與倫比的成功經(jīng)驗,而且可以縮短產(chǎn)品上市時間,有效降低項目成本。因此,對于任何使用業(yè)界領先的 VxWorks 實時操作系統(tǒng)的開發(fā)人員而言,solidDB for VxWorks 無疑是他們最理想的解決方案。這項產(chǎn)品發(fā)布不僅強調(diào)了 Solid 為現(xiàn)有 VxWorks 客戶提供持續(xù)支持的承諾,同時也擴大了Solid 在 VxWorks 市場的整體份額!


]]>
嵌入式系統(tǒng)原理及應用開發(fā)技術http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1960&Page=1wangxinxin2010-12-1 11:39:15點擊瀏覽該文件 北航社新書介紹元   本書以32位新型微控制器的應用開發(fā)為主線,介紹了嵌入式系統(tǒng)的基本概念和軟/硬件體系結構,描述了應用支撐平臺及其構件的原理與功能,并以PDA的設計為例,系統(tǒng)地介紹了嵌入式應用系統(tǒng)的開發(fā)過程、工具環(huán)境和開發(fā)技術,還提供了豐富的設備驅(qū)動程序編寫示例。 本書取材新穎、內(nèi)容翔實、技術實用、系統(tǒng)性強。它不僅可作為高等學校嵌入式應用技術課程的教材,還可供從事嵌入式產(chǎn)品開發(fā)的廣大工程技術人員自學與參考,對采用EPSON S1C33系列MCU的產(chǎn)品設計更具有直接的指導作用。 內(nèi) 容 簡 介   本書以32位新型微控制器的應用開發(fā)為主線,介紹了嵌入式系統(tǒng)的基本概念和軟/硬件體系結構,描述了應用支撐平臺及其構件的原理與功能,并以PDA的設計為例,系統(tǒng)地介紹了嵌入式應用系統(tǒng)的開發(fā)過程、工具環(huán)境和開發(fā)技術,還提供了豐富的設備驅(qū)動程序編寫示例。   本書取材新穎、內(nèi)容翔實、技術實用、系統(tǒng)性強。它不僅可作為高等學校嵌入式應用技術課程的教材,還可供從事嵌入式產(chǎn)品開發(fā)的廣大工程技術人員自學與參考,對采用EPSON S1C33系列MCU的產(chǎn)品設計更具有直接的指導作用。 前  言   伴隨著21世紀的曙光,人類迎來了一個充滿希望的新時代。而作為20世紀人類社會最偉大的發(fā)明之一,計算機已邁入了另一個充滿機遇的階段--后PC時代。不知不覺中,形式多樣的數(shù)字化智能產(chǎn)品已經(jīng)開始繼PC機之后成為信息處理的一大主力,并且正在逐步形成一個充滿商機的巨大產(chǎn)業(yè)。 后PC時代的到來,使得人們開始越來越多地接觸到一個新的概念--嵌入式產(chǎn)品,如手機、PDA、DVD、機頂盒、GPS和PLC等。   嵌入式軟件是智能產(chǎn)品的核心。如果說PC機的發(fā)展帶動了整個桌面軟件的發(fā)展,那么,數(shù)字化產(chǎn)品的廣泛普及必將為嵌入式軟件產(chǎn)業(yè)的蓬勃發(fā)展提供了無窮的推動力。   我國擁有世界上最大的家用電子產(chǎn)品消費市場和制造業(yè),隨著消費品位的提高,人們對家電的靈活性和互動性提出了更高的要求,即智能化和網(wǎng)絡化在家電中必不可少;社會開放的擴大和人際交往的頻繁,使得PDA等移動設備成為今后個人數(shù)據(jù)通信和事務處理的最佳選擇之一;此外,現(xiàn)代化的醫(yī)療、測控儀器和機電產(chǎn)品等也需要有嵌入式系統(tǒng)的支持。以上這些需求都將極大地刺激了嵌入式系統(tǒng)的發(fā)展和產(chǎn)業(yè)化進程。   雖然目前智能產(chǎn)品還廣泛使用4位和8位的嵌入式處理器,如8051、DSP,但隨著應用的升級和微電子技術的發(fā)展,32位微處理器的大量使用已成為必然趨勢。   目前,我國嵌入式應用技術的教學基本上停留在8位單片機的水平,既沒有開設32位嵌入式系統(tǒng)開發(fā)的課程,也缺乏介紹32位嵌入式系統(tǒng)開發(fā)技術的教材,制約了后PC時期我國IT產(chǎn)業(yè)的發(fā)展。   為了改變嵌入式技術教育滯后的局面,特以32位先進微控制器應用設計為基礎,編寫了這本嵌入式系統(tǒng)應用開發(fā)技術教程。   本書各章節(jié)內(nèi)容安排如下:   第一章概要介紹了嵌入式系統(tǒng)和實時系統(tǒng)的基本概念、特點、軟硬件基本體系結構和應用領域,使讀者對嵌入式系統(tǒng)有一個基本的了解;第二章以軟件生命期為引導,介紹可用于嵌入式應用開發(fā)的一些基本方法;第三章介紹了嵌入式系統(tǒng)的硬件構成,并以EPSON S1C33系列的32位MCU為例,較為詳細地介紹了各組成部分的功能、特點和電路原理;第四章是基于嵌入式系統(tǒng)運行平臺的結構,介紹了嵌入式操作系統(tǒng)、應用編程中間件和設備驅(qū)動程序等構件;第五章介紹了嵌入式應用軟件的調(diào)試方法,并重點講述EPSON的開發(fā)環(huán)境、目標監(jiān)控程序MON33、在線調(diào)試器ICD33;在第六章的應用示例中,以PDA的系統(tǒng)開發(fā)為線索,具體介紹嵌入式應用開發(fā)各環(huán)節(jié)的支持技術。   本書主要用于高等學校嵌入式應用技術教學,還可作為從事嵌入式產(chǎn)品開發(fā)的廣大工程技術人員的技術參考,特別是對采用EPSON S1C33系列〖KG*2〗MCU的產(chǎn)品設計具有直接的指導作用。   在本書編寫的過程中,作者閱讀和消化了國內(nèi)外大量的參考資料,融入了電子科技大學嵌入式實時系統(tǒng)研究室多年的寶貴經(jīng)驗與技術積累,并整合了EPSON S1C33系列的應用設計參考資料,從而使本書內(nèi)容具有較強的先進性和實用價值。   值得指出的是,嵌入式實時計算專家、博士生導師熊光澤教授對本書的編寫做出了重要貢獻。他不僅是我進入嵌入式領域的引路人,提供了編寫本書的機會,而且對本書的初稿進行了認真地審閱,并提出了寶貴的意見,在此表示衷心感謝!   還要感謝嵌入式實時系統(tǒng)研究室的其他老師。正是他們積累的嵌入式應用開發(fā)的經(jīng)驗對豐富本書的內(nèi)容起了重要作用。   同時感謝EPSON公司為本書的寫作提供了大量的S1C33系列MCU資料并允許在本書中引用,還要感謝該公司的蘇斌等先生,他們認真審閱了本書中有關S1C33的內(nèi)容。    也要感謝研究室的雷紅衛(wèi)、楊霞等研究生,他們都為本書做出了一定的貢獻。   特別感謝我的家人:父母、妻子和兒子。他們雖然沒有提供技術上的幫助,但在精神上的支持和生活上的照顧,對我順利完成本書編寫工作起到了必不可少的作用。    最后,衷心感謝所有為本書的編寫和出版提供了幫助的人們!   由于本書成書倉促,錯漏難免,歡迎有關專家賜教和讀者指正。                                          作者                                         2002年2月 目  錄 第一章 嵌入式系統(tǒng)概論 1.1 基本概念 1.2 嵌入式系統(tǒng)的特點 1.3 嵌入式系統(tǒng)的設計要求 1.4 硬件基本結構 1.5 軟件結構體系 第二章 嵌入式應用開發(fā)方法 2.1 軟件生存周期 2.2 嵌入式系統(tǒng)開發(fā)模式 2.3 嵌入式硬件開發(fā) 2.3.1 電子設計自動化 2.3.2 硬件描述語言HDL 2.3.3 知識產(chǎn)權核 2.3.4 軟、硬件協(xié)同開發(fā) 2.4 嵌入式軟件開發(fā) 2.5 面向?qū)ο箝_發(fā)方法 2.5.1 面向?qū)ο蟮母拍?2.5.2 面向?qū)ο蠓治?2.5.3 面向?qū)ο笤O計 2.5.4 面向?qū)ο缶幊?2.5.5 面向?qū)ο鬁y試 2.6 構件式開發(fā)方法 2.6.1 構件技術的起源 2.6.2 構件及構件模型 2.6.3 構件開發(fā)方法 2.6.4 軟件復用 第三章 嵌入式硬件平臺 3.1 嵌入式處理器 3.1.1 概 述 3.1.2 S1C33處理器 3.1.3 S1C33處理器的特性 3.1.4 S1C33處理器的核心塊 3.1.5 S1C33處理器的操作模式 3.1.6 總線控制單元 3.1.7 S1C33的寄存器 3.1.8 數(shù)據(jù)類型 3.1.9 S1C33的地址空間 3.1.10 引導地址 3.1.11 S1C33指令系統(tǒng) 3.1.12 中斷處理程序 3.2 片內(nèi)周邊電路 3.2.1 可編程時鐘產(chǎn)生器 3.2.2 8位可編程定時器 3.2.3 16位可編程定時器 3.2.4 時鐘定時器 3.2.5 串 口 3.2.6 I/O端口 3.2.7 AD轉(zhuǎn)換器 3.2.8 直接存儲器存取 3.3 基本外圍電路 3.3.1 供 電 3.3.2 復位電路 3.3.3 存儲器連接電路 3.3.4 端 口 3.3.5 調(diào)試連接 3.4 其它支持 3.4.1 S1C33的語音處理接口 3.4.2 LCD支持 3.4.3 紅外接口 3.4.4 USB接口 第四章 嵌入式應用軟件的運行平臺 4.1 嵌入式軟件的特點 4.2 嵌入式操作系統(tǒng) 4.2.1 概 述 4.2.2 分 類 4.2.3 發(fā)展動向 4.2.4 體系結構 4.3 ROS33實時操作系統(tǒng) 4.3.1 概 述 4.3.2 任務管理 4.3.3 任務獨立部分 4.3.4 一個應用程序創(chuàng)建示例 4.4 S1C33應用編程接口 4.4.1 編程中間件GUI 4.4.2 語音處理 4.4.3 圖像處理 4.5 板級支持包 4.5.1 液晶顯示器 4.5.2 手寫筆 4.5.3 觸摸屏 4.5.4 通用串行總線 4.5.5 設備驅(qū)動接口 第五章 嵌入式軟件開發(fā)平臺 5.1 嵌入式應用軟件的開發(fā)過程 5.1.1 應用軟件的生成階段 5.1.2 應用軟件的調(diào)試階段 5.1.3 應用軟件的固化運行階段 5.2 嵌入式開發(fā)工具概況 5.2.1 開發(fā)方法簡介 5.2.2 交叉開發(fā)工具 5.2.3 仿真開發(fā)工具 5.3 S1C33編程工具包 5.3.1 EPSON C33 TOOLS CHAIN 5.3.2 S1C33 C編譯器gcc33 5.3.3 C語言語法 5.3.4 匯編語言語法 5.3.5 調(diào)試器db33 5.4 調(diào)試監(jiān)控器 5.4.1 資源要求 5.4.2 啟 動 5.4.3 創(chuàng)建應用程序 5.4.4 通信控制程序 5.4.5 目標程序 5.4.6 調(diào) 試 5.5 在線調(diào)試器 5.5.1 DIP開關 5.5.2 監(jiān)控終端 5.5.3 信號燈 5.5.4 信號線 5.5.5 供電支 5.5.6 通信接口 5.5.7 啟動/關閉 5.5.8 目標系統(tǒng)連接測試 第六章 應用示例的開發(fā)過程 6.1 PDA概述 6.1.1 PDA硬件配置 6.1.2 PDA軟件配置 6.1.3 PDA發(fā)展趨勢 6.1.4 幾款較新的PDA 6.2 PDA的硬件設計 6.2.1 硬件配置 6.2.2 原理圖設計 6.2.3 邏輯電路圖設計 6.2.4 PCB圖與制板 6.3 PDA的軟件配置與設計 6.3.1 軟件配置 6.3.2 系統(tǒng)軟件開發(fā) 6.3.3 應用軟件開發(fā) 附 錄 db33 的調(diào)試命令 附1 存儲器操作 附2 寄存器操作 附3 執(zhí)行程序 附4 CPU復位 附5 中 斷 附6 設置斷點 附7 顯示程序 附8 Flash 操作 附9 跟 蹤 參考文獻
]]>
實時操作系統(tǒng)VxWorks下電子海圖系統(tǒng)打印功能的實現(xiàn)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1959&Page=1wangxinxin2010-12-1 11:34:461 前 言

  電子海圖系統(tǒng)是一種把需要向航海人員顯示和解釋的各種各樣信息融成一體的實時導航系統(tǒng),是地理信息系統(tǒng)在艦船組合導航系統(tǒng)中的重要應用,被認為是繼雷達/ARPA之后在艦船導航方面又一項偉大的技術革命。與簡單地用顏色顯示的紙海圖相比,電子海圖系統(tǒng)包括更多的使用簡單、操作容易的地理和文字信息。作為一種自動判定儀器,它能夠連續(xù)測定船舶相對于陸地、圖示物標、導航標志和不可見礙航物的位置,對海上航行、安全和商業(yè)都有重要意義。

  VxWorks是一種嵌入式的實時操作系統(tǒng)。將應用較為廣泛的電子海圖系統(tǒng)移植到VxWorks操作系統(tǒng)下的主要原因有兩個:一是VxWorks系統(tǒng)的實時性,能夠很好的滿足導航系統(tǒng)實時性的要求;二是基于信息安全方面的考慮,海圖系統(tǒng)要求一種保密性好、沒有漏洞的操作系統(tǒng),使用VxWorks操作系統(tǒng),程序開發(fā)者可以進行最底層的程序開發(fā),能夠完全控制系統(tǒng)的資源,確保海圖信息的安全。

2 電子海圖系統(tǒng)打印功能的總體設計思路

  在VxWorks操作系統(tǒng)中,實現(xiàn)電子海圖信息打印功能設計的總體思路是:首先將打印內(nèi)容,包括圖像和報表,轉(zhuǎn)換成恰當格式的圖像文件,如PostScript文件,而后對于沒有內(nèi)置PostScript語言解釋器的打印機,需要將PostScript語言解釋成打印機可以識別的語言,最后把圖像文件輸送到打印機。

  本文介紹基于內(nèi)置有PostScript語言解釋器的HP LaserJet 1200打印機,在VxWorks操作系統(tǒng)下,完成電子海圖信息打印功能的實現(xiàn)過程。

3 打印驅(qū)動

  打印機驅(qū)動程序中的各個函數(shù)的實現(xiàn):

  (1)基本的I/O函數(shù)的實現(xiàn)
  根據(jù)打印機并口的特點,驅(qū)動程序中要實現(xiàn)的基本的I/O函數(shù)應該是lptOpen(…)、lptRead(…)、lptWrite(…)和lptIoctl(…)。這4個基本函數(shù)的聲明分別是:

  LOCAL int lptOpen(LPT_DEV*pDev,char*name,int mode);  LOCAL int lptRead(LPT_DEV*pDev,char*pBuf,int size);
  LOCAL int lptWrite(LPT_DEV*pDev,char*pBuf,int size);
  LOCAL STATUS lptIoctl(LPT_DEV*pDev,int function,int arg);  其中LPT_DEV結構的定義為:
  typedef struct lptDev
  {
  DEV_HDR devHdr;
  BOOL created;/*TRUE if this device has been created*/
  BOOL autofeed;/* TRUE if enable autofeed */
  BOOL inservice;/* TRUE if interrupt in service */
  USHORT data; /* data register */
  USHORT stat; /* status register */
  USHORT ctrl; /* control register */
  int intCnt;/* interrupt count */
  int retryCnt; /* retry count */
  int busyWait; /* loop count for BUSY wait */
  int strobeWait;/* loop count for STROBE wait */
  int timeout; /* timeout second for syncSem */
  int intLevel; /* interrupt level */
  SEMAPHORE muteSem;/* mutex semaphore */
  SEMAPHORE syncSem;/* sync semaphore */
} LPT_DEV

  DEV_HDR是所有設備的頭結構,是由VxWorks系統(tǒng)定義的,定義為:

  typedef struct/* DEV_HDR device header for all device structures*/
{
  DL_NODE node; /* device linked list node */
  short drvNum; /* driver number for this device */
  char * name; /* device name */
} DEV_HDR

  (2)設備的硬件初始化函數(shù)xxDrv(…)的實現(xiàn)

  該函數(shù)的聲明為:
  STATUS lptDrv(int channels, LPT_RESOURCE *pResource)

  其中,參數(shù)channels 為打印并口的通道號;參數(shù)pResource是指向結構LPT_RESOURCE的指針,結構LPT_RESOURCE的定義為:

  typedef struct lptResource /* LPT_RESOURCE */
{
  int ioBase;/* IO base address */
  int intVector;/* interrupt vector */
  int intLevel; /* interrupt level */
  BOOL autofeed;/* TRUE if enable autofeed */
  int busyWait; /* loop count for BUSY wait */
  int strobeWait;/* loop count for STROBE wait */
  int retryCnt; /* retry count */
  int timeout; /* timeout second for syncSem */
}LPT_RESOURCE;

  該函數(shù)lptDrv(int channels, LPT_RESOURCE *pResource)完成了打印機并口的初始化,其中調(diào)用函數(shù)intConnect(…)和iosDrvInstall(…)的具體形式為:

  (void)intConnect((VOIDFUNCPTR*)INUM_TO_IVEC(pResource->intVector),
  (VOIDFUNCPTR)lptIntr, (int)pDev);
  lptDrvNum = iosDrvInstall (lptOpen, (FUNCPTR) NULL, lptOpen,
  (FUNCPTR) NULL, lptRead, lptWrite, lptIoctl);

  (3)設備的創(chuàng)建函數(shù)xxDevCreate(…)的實現(xiàn)

  該函數(shù)的聲明為:
  STATUS lptDevCreate (char *name, int channel)

  該函數(shù)將設備的創(chuàng)建標志置為TRUE,然后調(diào)用函數(shù)iosDevAdd (&lptDev[annel],devHdr.name, lptDrvNum) 將創(chuàng)建的設備加入I/O系統(tǒng)中。

  對于打印驅(qū)動程序,重點在于函數(shù)lptWrite(…)的編寫,這個函數(shù)的實現(xiàn)可采用兩種方式。一種是中斷方式,即將控制寄存器中的允許中斷位置為1,這樣,打印機每打印輸出一個字符后,立即向主機發(fā)出中斷請求信號,要求發(fā)送下一個字符;主機方面只要在中斷服務程序中實現(xiàn)數(shù)據(jù)傳輸即可,而不必循環(huán)查詢打印機的“忙”信號。另一種是查詢方式,用這種方式時,主機不停地測試打印機的“忙”信號,當檢測到打印機不忙時,便向其發(fā)送打印數(shù)據(jù),若打印忙,則主機必須等待,直到打印機不忙。

  根據(jù)編寫打印機驅(qū)動程序的兩種方式,選用查詢方式,其流程如圖1。

圖片點擊可在新窗口打開查看

4 PostScript文件的生成

  在VxWorks操作系統(tǒng)的開發(fā)環(huán)境Tornado下,軟件包ZINC中的ZafPrinter類及ZafDisplay類提供的函數(shù)可完成PostScript文件的生成。ZafPrinter類繼承ZafDisplay 類而來,因此,在ZafPrinter 中除了繼承來的圖形顯示函數(shù)之外,還定義了與打印機接口相關的函數(shù),如BeginJob(),EndJob(),BeginPage(),EndPage()等。

  在用ZINC自帶的程序生成PostScript文件時,需注意以下幾點:

  (1)將自定義的顏色值加入顏色表中,在i_print.cpp文件(在目錄…\Tornado\target\src\zinc\generic下)中,原來的顏色表定義為:

  static unsigned long psColorTable[16]=
  {
  0x00000000L, // 0-ZAF_CLR_BLACK
  0x00000080L, // 1-ZAF_CLR_BLUE
  0x00008000L, // 2-ZAF_CLR_GREEN
  0x00008080L, // 3-ZAF_CLR_CYAN
  0x00800000L, // 4-ZAF_CLR_RED
  0x00800080L, // 5-ZAF_CLR_MAGENTA
  0x00808000L, // 6-ZAF_CLR_BROWN
  0x00C0C0C0L, // 7-ZAF_CLR_LIGHTGRAY
  0x00808080L, // 8-ZAF_CLR_DARKGRAY
  0x000000FFL, // 9-ZAF_CLR_LIGHTBLUE
  0x0000FF00L, // 10-ZAF_CLR_LIGHTGREEN
  0x0000FFFFL, // 11-ZAF_CLR_LIGHTCYAN
  0x00FF0000L, // 12-ZAF_CLR_LIGHTRED
  0x00FF00FFL, // 13-ZAF_CLR_LIGHTMAGENTA
  0x00FFFF00L, // 14-ZAF_CLR_YELLOW
  0x00FFFFFFL, // 15-ZAF_CLR_WHITE
  };

  保留原有的16種顏色,再增加48種海圖中的顏色:

  0x00000000, 0x00000080, 0x0000b400, 0x0080ffff,
  0x00d20000, 0x00ff00ff, 0x00dc8000, 0x00c0c0c0,
  0x00ffc7ab, 0x000000ff, 0x0000ff00, 0x00c8ffff,
  0x00ff0000, 0x00ff96ff, 0x00ffffc0, 0x00ffffff,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00ff02fd, 0x00ff02fd, 0x00ff02fd, 0x00ff02fd,
  0x00000000, 0x000000ff, 0x0033aa00, 0x0060c0c0,
  0x00b03030, 0x00c040c0, 0x00804040, 0x00a0a0a0,
  0x00404040, 0x008080ff, 0x0080ff80, 0x0016edfe,
  0x00e02020, 0x00e010e0, 0x00ffff80, 0x00ffffff,

  這樣顏色表中共有64種可用顏色。

  同時將
  for(index = 0; index < 16; index++)
    colorTable[index]= psColorTable[index];

  改為:
  for(index = 0; index < 64; index++)
  colorTable[index]= psColorTable[index];

  (2)為使生成的PostScript文件盡可能的小,對原來海圖的畫圖程序做了一點改動。在原程序中,多邊形的繪制是通過畫兩點線完成的,這樣,生成PostScript文件比較大,可將其改為直接調(diào)用畫多邊形的函數(shù)Polygon()。經(jīng)過這樣的改動,生成的PostScript文件減小了很多,原來的一頁圖生成的PostScript文件為3.65M,改動后不足1M。

5 PostScript 文件在VxWorks操作系統(tǒng)下的打印輸出

  要使用打印驅(qū)動程序,首先要調(diào)用函數(shù)lptDevCreate(char*name,intchannel)為LPT端口創(chuàng)建設備,其中端口號由參數(shù)channel指定,創(chuàng)建的設備的名稱為name。只能為一個端口號創(chuàng)建一個設備。
  創(chuàng)建設備成功之后,主機就可以向打印機發(fā)送PostScript文件了,其程序流程如圖2。

圖片點擊可在新窗口打開查看

6 漢字打印輸出的實現(xiàn)

  在VxWorks操作系統(tǒng)下,實現(xiàn)電子海圖中漢字的顯示和打印輸出功能的基本思路是:利用Windows操作系統(tǒng)中的TrueType字庫,根據(jù)需要顯示漢字的Unicode編碼,在TrueType字庫中找到該漢字的相應信息,按照TrueType字庫中存儲的信息,將漢字顯示或打印輸出。

  TrueType字庫由很多表組成,它是用一些閉合的輪廓線來描述每個字符的。若能夠訪問TrueType字庫獲得相應漢字的描述信息,就能將漢字畫出來。對于TrueType字庫的訪問,網(wǎng)上有開放的資源可以實現(xiàn),這就是FreeType2,它為應用程序訪問字庫文件提供了統(tǒng)一的接口,支持的格式包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。要使用FreeType, 就要在相應的操作系統(tǒng)下對源代碼進行編譯,生成一個庫文件,然后在應用程序中調(diào)用相應的API庫函數(shù)。

  通過FreeType提供的庫函數(shù),應用程序可以訪問TrueType字庫,根據(jù)所得到的TrueType漢字信息,就能實現(xiàn)TrueType字體的顯示或打印輸出。但是TrueType字庫的訪問是通過Unicode編碼進行的,也就是說,只有獲得了字符的Unicode編碼,才能在TrueType字庫中得到該字符的描述信息。在電子海圖程序中,字符的Unicode編碼的獲得是通過查表實現(xiàn)的。所謂的查表,是指將國際漢字字符集中所有字符的Unicode編碼,存在一個數(shù)組unsigned long gb2312_uni_data[87][94],根據(jù)字符的區(qū)位碼就可以得到相應的Unicode編碼。例如區(qū)號為qh,位號為wh的字符的Unicode編碼就是數(shù)組元素gb2312_uni_data[qh-1][wh-1]的值。

  保存所有字符的Unicode編碼的數(shù)組gb2312_uni_data[87][94]是在Windows操作系統(tǒng)下轉(zhuǎn)換得到的。具體的做法是將國際漢字字符集中的所有字符按照一定的格式保存成文本文件,然后從文件中讀出每個字符,調(diào)用函數(shù)MultiByteToWideChar(…)將其轉(zhuǎn)換成Unicode編碼,并將其保存。

  根據(jù)TrueType字庫中字符的信息,顯示或打印輸出字符有兩種途徑:一種是調(diào)用FreeType的API函數(shù)得到相應字符的輪廓線,然后將其填充;另一種是調(diào)用FreeType的API函數(shù)直接得到字符的位圖,再調(diào)用相應操作系統(tǒng)中的打點函數(shù)實現(xiàn)位圖的顯示。由于第二種方法實現(xiàn)起來比較簡單,并且海圖系統(tǒng)中的漢字不是很多,所以在海圖程序中使用的是第二種方法。

  在獲得相應漢字的字形位圖信息的基礎上,實現(xiàn)漢字打印輸出功能的關鍵是如何使用PostScript語言描述相應漢字字形的位圖信息。在程序的設計中,通過畫1個像素長度的直線來實現(xiàn)點的輸出,然后用一系列的點輸出位圖信息。其中,點的輸出用PostScript語言表示為:

  x y moveto
  x+1 y lineto

  根據(jù)漢字橫多豎少的特點,可以對以上產(chǎn)生的PostScript文件進行優(yōu)化,如果N點在一條橫線上,就直接畫N長度的直線,用PostScript語言表示為:

  x y moveto
  x+N y line to

  這樣,就將原來的N條PostScript語句轉(zhuǎn)化為1條語句,從而減少了PostScript文件的長度。

7 結束語

  VxWorks實時操作系統(tǒng)的特點決定了在此操作系統(tǒng)中開發(fā)驅(qū)動程序的重要性。根據(jù)需要配置相應的設備,并實現(xiàn)硬件的驅(qū)動,是VxWorks系統(tǒng)中進行軟件設計與開發(fā)的前提。本文介紹的電子海圖系統(tǒng)打印功能的總體設計思想及實現(xiàn)方法,已在哈爾濱工程大學研制的某型電子海圖系統(tǒng)的二次開發(fā)中得到應用。

]]>
實時仿真與嵌入式系統(tǒng)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1958&Page=1wangxinxin2010-12-1 11:33:30    對于程序開發(fā)和許多交互式應用來說,UNIX和Windows可以算是優(yōu)秀的操作系統(tǒng)。然而,它們都不適于實時應用。Tornado是美國WindRiver公司為用戶提供的嵌入式開發(fā)平臺,VxWorks是Tornado的運行期組件,也是嵌入式行業(yè)應用最為廣泛的實時操作系統(tǒng)。VxWorks的實時性做的非常好,其系統(tǒng)本身的開銷很小,任務調(diào)度、任務間通信和中斷處理等系統(tǒng)公用程序精煉而高效,他們造成的延遲很短。VxWorks提供的多任務機制對任務的控制采用了優(yōu)先級搶占調(diào)度和輪轉(zhuǎn)調(diào)度機制,也充分保證了可靠的實時性,使同樣的硬件配置能夠滿足更強的實時性要求,為應用的開發(fā)留下更大的余地。

    RTW(Real-Time Workshop)是Matlab圖形建模和仿真環(huán)境Simulink的一個重要的補充功能模塊,它是一個基于Simulink的代碼自動生出環(huán)境,它能直接從Simulink的模型中產(chǎn)生優(yōu)化的、可移植的和個性化的代碼,并根據(jù)目標配置自動生成多種環(huán)境下的程序。

    RTW提供了幾個快速原型化的目標,其中包括提供了從Simulink模型到VxWorks應用代碼的自動轉(zhuǎn)換接口Tornado Real-Time Target,可以讓用戶的模型在VxWorks上執(zhí)行。

    2、Tornado(VxWorks)實時目標運行時結構

    開發(fā)VxWorks實時應用系統(tǒng)的典型配置,如圖1所示:

圖片點擊可在新窗口打開查看
圖1 VxWorks實時應用開發(fā)的經(jīng)典配置

    實時代碼在主機上,用Tornado提供的交叉編譯器編譯。通過RTW的Tornado實時目標生成目標文件(vxmodel.lo),可通過Tornado集成開發(fā)環(huán)境的WindSh下載到VxWorks目標機。實時程序在VxWorks目標機上執(zhí)行,通過IO設備和外部硬件交換數(shù)據(jù),并保持和主機之間的相互通信。

    實時程序運行在VxWorks目標機上,而Simulink運行在主機上。Simulink需要VxWorks目標機上運行的任務來處理通信過程。Tornado(VxWorks)Real-Time Tartget生成如下VxWorks任務:一個用于和Simulink通信,其他用于完成模型功能[2]。

    3、Tornado(VxWorks)實時目標的實現(xiàn)過程

    3.1 實驗環(huán)境

    我的實驗環(huán)境如下表:

表1 實驗環(huán)境
圖片點擊可在新窗口打開查看

    3.2 實時目標的具體實現(xiàn)步驟

    為了通過Real-Time Workshop實現(xiàn)和運行一個基于VxWorks的實時程序,用戶可按如下的步驟進行:

    (1) 在Matlab/Simulink下建立一個模型,這里以一個經(jīng)典的PID模型為例:

圖片點擊可在新窗口打開查看
圖2 實驗所采用的經(jīng)典PID模型

    模型采用外部工作模式(External Mode),并設置Simulink Parameters對話框中的參數(shù):

圖片點擊可在新窗口打開查看
圖3 仿真參數(shù)Solver設置

圖片點擊可在新窗口打開查看
圖4 仿真參數(shù)Real-Time Workshop設置

圖片點擊可在新窗口打開查看
圖5 仿真參數(shù)code generation options設置

(2) 配置模板聯(lián)編連文件tornado.tmf,該文件位于%matlabroot%/rtw/c/tornado目錄下,要對這個文件作如下修改:

    #------------ Macros read by make_rtw -------------
    MAKECMD = C:Tornado2.2hostx86-win32 inmake
    HOST = PC
    #-------------Tool Locations-----------------------------
    WIND_BASE= C:Tornado2.2
    WIND_REGISTRY=$(COMPUTERNAME)
    WIND_HOST_TYPE=x86-win32
    #------------Vxworks Configuration------------------
    VX_TARGET_TYPE = pentium
    CPU_TYPE = PENTIUM2
    #-------------Macros for Downloading to Target-----
    TARGET=target
    TGTSVR_HOST=host
    VX_CORE_LOC    = $(WIND_BASE)/target/config/ pcPentium3/vxWorks

    (3) 程序的生成、編譯、連接

    設置完參數(shù),保存后,開始創(chuàng)建程序,單擊上圖中的Build按鈕,開始編譯程序,成功后可在當前的目錄中產(chǎn)生了一個vxmodel_tornado_rtw的文件夾和一個目標文件vxmodel.lo。

    (4) 手動下載和運行可執(zhí)行文件

    現(xiàn)在可以將實時程序下載到目標機中,具體的方法是在Tornado集成開發(fā)環(huán)境中啟動WindSh,在WindSh窗口執(zhí)行如下命令:

    ld<vxmodel.lo

    請注意要保證lo文件在WindSh的工作路徑下。VxWorks實時程序定義了一個函數(shù)rt_main(),用來創(chuàng)建和執(zhí)行模型代碼、完成與Simulink的通信(如果選擇了外部模式方式)。rt_main函數(shù)在文件rt_main.c中定義,這個文件位于目錄%matlabroot% twc ornado中。

    在WindSh窗口中調(diào)用rt_main函數(shù),開始運行程序:sp(rt_main,vxmodel,"-tf 100 -w ","*",0,30,17725)

    參數(shù)的含義分別是:

    rt_main()是實時程序定義的函數(shù),用來產(chǎn)生任務執(zhí)行代碼和與Simulink進行通信;?
    -tf用于指定仿真時間,此處設為100秒;?
    -w表示在外部模式時,運行前等待來自Simulink消息的觸發(fā);?
    “*”為安裝所有的信號;?
    0表示使用各自的模塊名;?
    30表示使用默認作為tBaseRate優(yōu)先級;?
    17725為TCP默認端口號(可以設置在256~65535之間)。?

    運行后我們可以看到目標機上的屏幕上顯示:
    waiting for start message from host

    (5) 建立連接

    在External Target Interface對話框中的MEX-file arguments指定目標機的IP、冗長度和TCP端口號,如圖6所示,就可以建立連接了。

圖片點擊可在新窗口打開查看
圖6 External Target Interface對話框設置

    打開External Mode Control Panel,如圖7所示。點擊Connect按鈕,執(zhí)行Start real-time code,可以看到Scope上的圖形輸出。此時,可以改變模型的參數(shù)(如增益的數(shù)值),參數(shù)下載后Scope的曲線將隨之改變。仿真時間結束以后,可以看到產(chǎn)生了一個external.mat文件,由目標機會傳到主機,放在Tornado的安裝根目錄下。

圖片點擊可在新窗口打開查看
圖7 External Mode Control Panel對話框

    4、結論

    針對Matlab的仿真特性和VxWorks操作系統(tǒng)的實時特點,本文介紹了RTW面向Tornado(VxWorks)實時目標的運行結構,并且較為詳細的闡述了Tornado(VxWorks)實時目標的具體實現(xiàn)流程,實現(xiàn)了Simulink在Tornado(VxWorks)實時目標下的仿真。

    在結合相關文檔的同時,筆者加入了親身實驗的經(jīng)驗,增補了一些必要的內(nèi)容,完善了實驗的具體步驟,降低了為讀者今后實驗的調(diào)試難度

]]>
Tornado/Vxworks 概述http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1957&Page=1wangxinxin2010-12-1 11:31:57 1.  概述

    VxWorks 是美國 Wind River System 公司( 以下簡稱風河 公司 ,即 WRS 公司)推出的一個實時操作系統(tǒng)。WRS 公司 組建于1981年,是一個專門從事實時操作系統(tǒng)開發(fā)與生產(chǎn)的軟件公司,該公司在實時操作系統(tǒng)領域被世界公認為是最具有領導作用的公司。

 

VxWorks 是一個運行在目標機上的高性能、可裁減的嵌入式實時操作系統(tǒng)。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛(wèi)星通訊、軍事演習、彈道制導、飛機導航等。在美國的 F-16、FA-18 戰(zhàn)斗機、B-2 隱形轟炸機和愛國者導彈上,甚至連1997年4月在火星表面登陸的火星探測器上也使用到了VxWorks。

 

1984年 WRS 公司推出它的第一個版本--VxWorks 1.0.1,在 1999年推出了它的最新版本VxWorks 5.4。從1995年以后, WRS 公司推出了一套實時操作系統(tǒng)開發(fā)環(huán)境-- Tornado。

 

1.1       Tornado2.0 組件

   Tornado是嵌入式實時領域里最新一代的開發(fā)調(diào)試環(huán)境。Tornado給嵌入式系統(tǒng)開發(fā)人員提供了一個不受目標機資源限制的超級開發(fā)和調(diào)試環(huán)境。Tornado包含三個高度集成的部分:

. 運行在宿主機和目標機上的強有力的交叉開發(fā)工具和實用程序;

. 運行在目標機上的高性能、可裁剪的實時操作系統(tǒng)VxWorks;

. 連接宿主機和目標機的多 種通訊方式,如:以太網(wǎng),串口線,ICE或ROM仿真器等。

 

對于不同的目標機,Tornado給開發(fā)者提供一個一致的圖形接口和人機界面。當使用Tornado的開發(fā)人員轉(zhuǎn)向新的目標機時,不必再花費時間學習或適應新的工具;對深嵌入式應用開發(fā)者來說更重要的是,Tornado所有的工具都是駐留在開發(fā)平臺上的。在嵌入式系統(tǒng) 工具發(fā)展歷史上,Tornado是第一個實現(xiàn)了當目標機資源有限時開發(fā)工具仍可使用而且功能齊全的開發(fā)環(huán)境。另外,所有工具都通過一個中央服務器(Target Server)處理與目標機的通訊。所以無論連結方式是Ethernet,還是串口線、ICE仿真器、ROM仿真器或客戶設計的調(diào)試通道,所有工具均可使用。

 

 

1.1.1  實時系統(tǒng)

 


特點:

l         實時,能滿足嚴格的時間要求;

l         多任務內(nèi)核:

實時調(diào)度(基于優(yōu)先級或搶占式的);

任務間通訊;

互斥;

l         其他標準設備作為庫的形式支持內(nèi)核;

l         系統(tǒng)可重新配置,根據(jù)需要裁減組件,空間小;

l         所有任務駐留在同一地址空間(任務間通訊快而容易,上下文切換快,但一個任務崩潰會影響別的任務);

l         所有任務運行在超級(supervisor)模式(沒有哪個系統(tǒng)調(diào)用具有壓倒一切的優(yōu)勢,所有的設備都作為普通子程序調(diào)用);

l         在主機上編寫代碼和編譯;在目標機上進行調(diào)試和執(zhí)行;

 

1.1.2  tornado 開發(fā)工具

l         CrossWind:

源程序(C 或 C++ 以及匯編程序等)的調(diào)試工具。 CrossWind結合了圖形方式和命令行方式的最大特點。 最普通的調(diào)試方式,例如斷點設置和程序執(zhí)行控制,可 以通過便捷的點擊方式實現(xiàn)。同樣,程序顯示框和數(shù) 據(jù)偵察窗也提供了一個直接的可視窗口來觀察應用程 序中最關鍵的一部分。如果需要更復雜的調(diào)試,CrossWind 也提供了命令行的方式來調(diào)用它提供的各種命令。

 

l         Browser:

可對系統(tǒng)對象(任務、消息隊列、信號量等)和存儲 器使用情況進行觀察的瀏覽器?梢苑奖愕乇O(jiān)視用戶的 目標系統(tǒng)。Browser匯總了應用進程,內(nèi)存消耗和一個目 標內(nèi)存的映射。通過 Browser,用戶可以觀察信號量、 消息隊列、內(nèi)存分配、看門狗計時器、堆棧使用情況、 目標 CPU使用率、對象模塊結構和符號表以及每個任務的詳細信息。

 

l         WindSh:

提供從宿主機到目標機之間的一個命令 shell。WindSh 是一種非常受歡迎的開發(fā)工具,它具有很強的交互性和可操作性,允許用戶調(diào)用內(nèi)存中的應用程序模塊或是 VxWorks模塊中的任何例程。它不但具有一般命令語言的功能,而且也具有 C 語言的設計特點,能夠解釋幾乎任何 C 語言表達式, 執(zhí)行大多數(shù) C 語言算子,解析符號表數(shù)據(jù)。對初用者來說,WindSh學習起來比較簡單,使用比較方便,對熟練用戶而言,則有較為高級的手段可以應用。

 

l         WindView:

非常出色的系統(tǒng)可視診斷和分析工具?煞浅H菀椎赜^察各任務,中斷程序之間的相互作用。它是在嵌入式系統(tǒng)應用開發(fā)期間的可視工具。

 

l         VxSim:

快速原型仿真器?稍谟布O備未完成之前,在宿主機上對應用程序進行仿真分析。

 

l         Project Facility:

工程管理工具,配制應用程序或vxworks本身。

]]>
基于Vxworks實時操作系統(tǒng)的串口通信程序設計與實現(xiàn)計算機應用論文http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1956&Page=1wangxinxin2010-12-1 11:30:251前言

目前市場上比較著名的實時操作系統(tǒng)有:VxWorks、PSOS、Nucleus、QNX、VRTX、Windows  CE、Palm  0S、Lynx0S等。  其中,VxWorks是一個具有微內(nèi)核、可裁剪的高性能強實時操作系統(tǒng),在實時操作系統(tǒng)市場上處于領先地位。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛(wèi)星通訊、彈道制導、飛機導航等。在美國的 F-16戰(zhàn)斗機、B-2 隱形轟炸機和愛國者導彈上,甚至火星探測器上都使用了VxWorks實時操作系統(tǒng)。在嵌入式實時操作系統(tǒng)中使用串口通信,不僅可擴展嵌入式設備通信能力,而且可擴大其應用范圍。

2 VxWorks簡介

    VxWorks是由wRS(wind River Systems,Inc.)公司開發(fā)的一套具有微內(nèi)核、高性能、可伸縮的實時操作系統(tǒng),支持廣泛的網(wǎng)絡通信協(xié)議,并能夠根據(jù)用戶的需求進行組合,其開放式的結構和對工業(yè)標準的支持使開發(fā)者只需做最少的工作即可設計出有效的適合于不同用戶要求的系統(tǒng)。除了性能出眾的操作系統(tǒng)之外,wRS公司還提供了優(yōu)秀的實時操作系統(tǒng)開發(fā)工具Tornado。Tornado由三個高度集成的部分組成:Tornado工具,一整套強有力的交叉開發(fā)工具;VxWorks運行系統(tǒng),是運行在目標機上的高性能、可裁剪的實時操作系統(tǒng);連接目標機和宿主機的通信選項,加以太網(wǎng)、串行線路、在線仿真等。Tornado能夠支持Windows、Unix等流行的工作平臺和PowerPC、X86、ARM等幾乎所有的目標處理器,所提供的工具可用于所有目標機,并具有兩種調(diào)試模式(系統(tǒng)模式和任務模式)。除了基本的功能和開發(fā)工具外,Tornado還具有先進的系列網(wǎng)絡產(chǎn)品,極大地擴展了Tornado的網(wǎng)絡特性,并增強了嵌人式微處理器的網(wǎng)絡特性。[1] 

3 串口通信基本原理

串口在嵌入式系統(tǒng)當中是一類重要的數(shù)據(jù)通信接口,其本質(zhì)功能是作為CPU和串行設備間的編碼轉(zhuǎn)換器。當數(shù)據(jù)從CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位;在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。應用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求(打開串口),通信完成后必須釋放資源(關閉串口)。

串口通信的優(yōu)點是開發(fā)簡單,在傳輸數(shù)據(jù)量不大、要求速度不高而傳輸距離較大的通信場合得到廣泛應用。

在VxWorks中,將I/O系統(tǒng)設計成為任何類型的設備提供一個簡單、統(tǒng)一、獨立于設備的接口,任何對于串口的操作都可以視為對一個文件的操作,而不必了解串口設備或程序驅(qū)動實現(xiàn)的細節(jié)。在串口通信軟件的設計中,當串口初始化完成后,在使用之前利用open()打開相應串口,然后進行配置。

VxWorks提供終端和偽終端設備驅(qū)動。Tty驅(qū)動針對實終端;pty針對仿真終端的程序。Tty設備有兩種操作模式:raw模式和line模式。在raw模式下,每個剛從設備輸入的字符對讀者都是有效的;在line模式下所有輸入字符被存儲,直到NEWLINE字符輸入。設備選項字使用帶FIOSETOPTIONS 功能的ioctl()程序來設置。[2]

配置完成后,依據(jù)串口打開時的讀寫標志,調(diào)用函數(shù)write()、read()對串口進行只讀操作、只寫操作或同時進行讀寫操作。

為提高數(shù)據(jù)接收的實時性,可采用中斷方式,利用VxWorks提供的select函數(shù)的事件觸發(fā)機制,將讀串口的任務阻塞使其一直等待數(shù)據(jù),當有數(shù)據(jù)來到的時候該任務會立刻自動響應,提高系統(tǒng)的實時性。

4 環(huán)境配置

在本實時應用系統(tǒng)中采用486機作為目標機,串口通信時目標機VxWorks系統(tǒng)啟動盤的制作步驟:

(1) 修改通用配置文件\\Tornado\target\config\pc486\config.h。在config.h文件中加入以下宏定義:

#define INCLUDE_WDB

#define INCLUDE_WDB_TTY_TEST

#undef WDB_COMM_TYPE

#define WDB_COMM_TYPE WDB_COMM_SERIAL /*定義通信方式為串口聯(lián)結*/

#define WDB_TTY_CHANNEL 1 /*通道號*/

#define WDB_TTY_BAUD 9600 /*串口速率,可設置至38400*/

#define WDB_TTY_DEV_NAME "tyCo/1"

#define CONSOLE_TTY 0

#define DEFAULT_BOOT_LINE "fd=0,0(0,0)hostname:/fd0/vxWorks \ h=主機

ip e=目標機ip u=主機上的登錄用戶名"

(2) 在Tornado集成環(huán)境中執(zhí)行菜單命令Project > Make PC486 > Common Targets > clean刪除以前生成的文件,執(zhí)行菜單命令Project > Make PC486 > Boot Rom Targets > bootrom_uncmp編譯鏈接生成bootrom_uncmp ;再選擇VxWorks Target,編譯生成vxworks;

(3) 拷貝\\Tornado\target\config\pc486\bootrom_uncmp至\\Tornado\host\bin下

(4) 重命名文件bootrom_uncmp為bootrom;

(5) 準備一張已格式化的空盤插入軟驅(qū);

(6) 在目錄\\Tornado\host\bin下執(zhí)行命令 mkboot a: bootrom;

(7)拷貝\\Tornado\target\config\pc486\VxWorks至軟盤;

(8) 將系統(tǒng)制作盤插入目標機軟驅(qū),加電啟動目標機即載入VxWorkst系統(tǒng)。[3]

5程序示例

5.1 在程序中加入下列頭文件

#include <vxWorks.h>

#include "strLib.h"

#include <string.h>

#include <sioLib.h>

#include <ioLib.h>

#include <stdio.h>

#include <ioctl.h>

#include <selectLib.h>

#include "types/vxTypesOld.h"

5.2 打開串口

int open_com1(void) //打開串口1函數(shù)

{    int sfd;//串口設備文件描述符

sfd =open(”/tyCo/0”,0_RDWR,0);//打開串口并返回串口設備文件描述符

if(sfd ==ERROR)  //如果不能打開串口1則打印出錯信息

printf("You can’t open port com1 !")

 

5.3 配置串口

int config_com1(void)                               //串口1配置函數(shù)

{ ioctl(sfd,FIOSETOPTIONS,OPT_LINE);  //設置串口工作模式為行模式:LINE_MODE

ioctl(sfd,FIOBAUDRATE,9600);        //設置串口波特率為9600bps

ioctl(sfd,FIOFLUSH,0);                                 //清空輸入輸出緩沖

ioctl(sfd,SIO_HW_OPTS_SET,CS8|STOPB|PARENB|PARODD);

//設置 8 位數(shù)據(jù)位,2位停止位,帶校驗位,奇校驗

}

5.4 串口接收數(shù)據(jù)

int accept _com1(void) //從串口1接收數(shù)據(jù)函數(shù)

{  while(1)

   {  char * accept _buf;

FD_ZERO(&fds_data);//位碼置零 

FD_SET(sfd,&fds_data);//初始化位碼

width=sfd +1; 

//任務阻塞等待讀串口準備完畢;

if(select(width,&fds_data,NULL,NULL,NULL)==ERROR)

  return(ERROR);

read(sfd, accept _buf,sizeof(accept _buf));  //從串口讀字符

printf("accept message is : %s \n\n", accept _buf);   //輸出接收到的信息

 }

}

5.5 串口發(fā)送數(shù)據(jù)

int send_com1(void) //向串口1發(fā)送數(shù)據(jù)函數(shù)

   {              char *send_buf =" Data had accept!";  //待發(fā)送數(shù)據(jù)

              //任務阻塞等待寫串口準備完畢

if(select(width,NULL,&data_fds,NULL,NULL==ERROR)

   return(ERROR) ;

if(FD_ISSET(sfd,&fds_data))  //檢查串口準備好就向串口寫數(shù)據(jù)

write(sfd,send_buf,sizeof(send_buf)) ;

}

5.6 關閉串口

close(sfd);

6結束語

RS-232串口通信雖速率不高,但RS-422標準串行口通信則采用了雙線傳輸,大大增加了抗共模干擾的能力,最大數(shù)據(jù)傳輸速度可以達到10Mb/s,這對于遠程數(shù)據(jù)交換具有極大的優(yōu)勢。

本文描述了在實時操作系統(tǒng)VxWorks中利用串口實現(xiàn)數(shù)據(jù)通信的方法,并給出了示例程序,目前已經(jīng)在我們開發(fā)的風洞測控系統(tǒng)中獲得了應用。該方法可將其串口通信可適用于工業(yè)控制等多方面,具有廣泛的適應性。在嵌入式實時操作系統(tǒng)中使用串口通信,不僅可擴展嵌入式設備通信能力,而且可擴大其的應用范圍。

]]>
基于DSP芯片和VxWorks操作系統(tǒng)的RTOS視頻網(wǎng)絡檢測系統(tǒng)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1955&Page=1wangxinxin2010-12-1 11:29:02在視頻卡設計中,電源模塊的設計也非常關鍵,它直接影響著視頻卡的最后實現(xiàn)和穩(wěn)定運行。

本監(jiān)控系統(tǒng)采用TI公司的TPS3307-33D來作為電源檢測IC。該器件的Reset有效電源復位電壓值定義為VDD=1.1V。TPS3307-33D可同時監(jiān)視兩種獨立電壓,還可控制另外一種電壓,這種電壓可以獨立調(diào)整并在內(nèi)部與復位邏輯電路相連。

3 通信平臺的嵌入式系統(tǒng)設計

本設計的軟件系統(tǒng)包括底層軟件和系統(tǒng)軟件兩部分,其中底層軟件主要是DSP圖像處理算法以及啟動等運行程序,這些程序可在CCS環(huán)境下由C語言編寫并進行匯編優(yōu)化,CCS是TI公司發(fā)布的DSP軟件運行環(huán)境;

在系統(tǒng)軟件方面,基于PCI總線的圖像處理系統(tǒng)所面臨的難點頗多,其中難度最大的是PCI驅(qū)動問題。

3.1 系統(tǒng)軟件的設計

系統(tǒng)軟件可以選用以VxWorks為操作系統(tǒng)的嵌入式設計方法。

VxWorks操作系統(tǒng)的集成環(huán)境叫Tornado。Tor-nado集成環(huán)境是一個高效明晰的圖形化實時應用開發(fā)平臺,它包括一套完整的、面向嵌入式系統(tǒng)的開發(fā)和調(diào)測工具。VxWorks的優(yōu)點如下:

(1)具有較好的可裁減性;

(2)支持應用程序的動態(tài)鏈接和動態(tài)下載;

(3)具有較好的兼容性;

(4)具有很高的可靠性和穩(wěn)定性;

(5)具有很好的實時性;

VxWorks的多任務機制對任務的控制采用優(yōu)先級搶占和輪轉(zhuǎn)調(diào)度機制,從而充分保證了實時性,并可用同樣的硬件配置滿足更強的實時性要求,以便為應用開發(fā)留下更大的余地。

PCI設備有三種物理存儲空間:配置空間、存儲器空間和I/O空間。其中配置空間是長度為256字節(jié)的一段連續(xù)空間,空間定義如圖4所示,在配置空間中, 只讀空間包括設備標識、供應商代碼、修改版本、分類代碼以及頭標類型。其中供應商代碼用來標識設備供應商的代碼;設備標識用來標識某一特殊的設備;修改版 本標識設備的版本號;分類代碼用來標識設備的種類;而頭標類型用來標識頭類型以及是否為多功能設備。除供應商代碼之外,其他字段的值可由供應商分配。

基地址寄存器最重要的功能是分配PCI設備的系統(tǒng)地址空間。在基地址寄存器中,bit0(最低位)可用來標識到底是存儲器空間還是I/O地址空間。基地址 寄存器映射到存儲器空間時,bit0為“0”,而當其映射到I/O地址空間時,bit0為“1”。

在驅(qū)動PCI設備時,首先是PCI設備的查找。嵌入式操作系統(tǒng)一般都提供有相應的API函數(shù)查找。而在VxWorks操作系統(tǒng)中,通過函數(shù) pciFindDevicePCI_VENDOR_IDPCI_DEVICEindex &pciBus &pciDevice,&pciFunc_可以找到供應商代碼為PCI_VENDOR_ID、設備標識為PCI_DEVICE的第n(index+1)個 設備,并且返回總線號、設備號以及功能號,然后分別保存于&pciBus、&pciDevice、&pci-Func中。

其次是PCI設備的配置。通過操作系統(tǒng)提供的API函數(shù)可以訪問PCI設備的配置空間,從而完成PCI設備基址寄存器的配置、中斷配置、以及ROM基地址 寄存器的配置,最終得到PCI存儲器空間和I/O地址空間的映射以及設備中斷號等。在VxWorks操作系統(tǒng)中,訪問PCI設備配置空間的API函數(shù)有: pciConfigOutLong和pciConfigInLong等,它們可分別完成對PCI設備配置空間的讀寫操作。

然后是根據(jù)PCI設備的配置參數(shù)來編寫不同設備的初始化程序、中斷服務程序以及對PCI設備存儲空間的訪問程序。

3.2 遠程控制與通信鏈路

由于基于串行口的PPP協(xié)通信方式現(xiàn)已被各種ISP所接受。而且VxWorks系統(tǒng)也支持PPP協(xié)議,因此,在VxWorks下通過Modem建立與ISP的物理連接,然后再完成設備的PPP數(shù)據(jù)鏈路設置,就可以通過Internet實現(xiàn)遠程控制。

]]>
VxWorks下實時多任務程序的實現(xiàn)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1954&Page=1wangxinxin2010-12-1 11:25:07

 

2  VxWorks操作系統(tǒng)簡介

  Vxworks就是一個由WRS公司推出的嵌入式實時操作系統(tǒng),具有多任務、可裁減、可靠性好、實時性高等特點, 是業(yè)界公認的性能出色的一種實時操作系統(tǒng)。VxWorks實時操作系統(tǒng)由400多個相對獨立的、短小精煉的目標模塊組成,用戶可根據(jù)需要選擇適當模塊來裁剪和配置系統(tǒng),這有效地保證了系統(tǒng)的安全性和可靠性。系統(tǒng)的鏈接器可按應用的需要自動鏈接一些目標模塊。這樣,通過目標模塊之間的按需組合,可得到許多滿足功能需求的應用。VxWorks操作系統(tǒng)的基本構成模塊主要包括以下部分:高效的實時內(nèi)核Wind、兼容實時系統(tǒng)標準POSIX、I/O系統(tǒng)、本機文件系統(tǒng)、文件I/O系統(tǒng)、網(wǎng)絡特性、虛擬內(nèi)存(可選單元VxVMI)、共享內(nèi)存(可選單元VxMP)、駐留目標工具、Wind基類、工具庫、性能優(yōu)化、目標代理、板級支持包、VxWorks仿真器(VxSim)。

VxWorks中與構建實時多任務系統(tǒng)有關的內(nèi)容如下:

1)wind內(nèi)核任務調(diào)度策略

Wind內(nèi)核采用基于優(yōu)先級的搶占式調(diào)度法作為它的缺省策略,同時它也提供了輪轉(zhuǎn)調(diào)度法。

     基于優(yōu)先級的搶占式調(diào)度,具有很多優(yōu)點。這種調(diào)度方法為每個任務指定不同的優(yōu)先級。沒有處于阻塞或懸置態(tài)的最高優(yōu)先級任務將一直運行下去。當更高優(yōu)先級的任務由就緒態(tài)進入運行時,系統(tǒng)內(nèi)核立即保存當前任務的上下文,切換到更高優(yōu)先級的任務。而輪轉(zhuǎn)調(diào)度法分配給處于就緒態(tài)的每個同優(yōu)先級的任務一個相同的執(zhí)行時間片。

2)信號量

VxWorks信號量是提供任務間通信、同步和互斥的最優(yōu)選擇,也是提供任務間同步和互斥的主要手段。VxWorks 提供3 種信號量來解決不同的問題。

a.  二進制信號量:二進制信號量(Binary)能夠滿足任務間的互斥和同步,需要的系統(tǒng)開銷最小。當一個任務調(diào)用semTake()請求一個信號量時,如果此時信號量可用,信號量會被清零,并且任務立即繼續(xù)執(zhí)行;如果信號量不可用,任務會被阻塞來等待信號量。

b.  互斥:互斥信號量(Mutex)用來實現(xiàn)對共享資源的保護,當兩個以上的任務共享同一塊內(nèi)存緩沖區(qū)或同一個I/O設備之類的資源時,可能會發(fā)生競爭狀態(tài);コ庑盘柫靠梢酝ㄟ^對共享資源上鎖,實現(xiàn)高效的互斥訪問。

c.  計數(shù)器信號量:計數(shù)器信號量(Count)是實現(xiàn)任務同步和互斥的另一種手段。計數(shù)器信號量除了像二進制信號量那樣工作外,還保持對信號量釋放次數(shù)的跟蹤。

3) 中斷服務程序

  VxWorks的所有中斷服務程序使用同一中斷堆棧,它在系統(tǒng)啟動時就已根據(jù)具體的配置參數(shù)進行了分配和初始化,因此,必須保證它的大小,以使它能滿足最壞的多中斷情況。為了快速響應中斷,中斷服務程序ISR運行在特定的空間,不同于其它任何任務,中斷處理沒有任務的上下文切換。中斷也有缺陷:ISR不運行在常規(guī)的任務上下文,它沒有任務控制塊。對于ISR的基本約束就是它們不能激活那些可能使調(diào)用程序阻塞的函數(shù)。

 

實時多任務程序設計

  在一個實時系統(tǒng)中,中斷處理是至關重要的,系統(tǒng)通過中斷機制響應外部事件,并對外部事件作出處理,系統(tǒng)對中斷的響應速度和中斷服務程序的處理速度直接反映了實時系統(tǒng)的性能。VxWorks提供函數(shù)intconnect(),它允許將指定的C函數(shù)與任何中斷相聯(lián)系。這個指定的C函數(shù)就是這個中斷的中斷服務程序, 中斷服務程序必須盡快結束,以免阻塞低優(yōu)先級的中斷,它不同于普通的任務模塊,必須滿足特殊的要求就是不許阻塞。為了既保證中斷服務程序盡快結束而且又避免ISR在調(diào)用函數(shù)時受到約束,這時可以使用信號量來將中斷與任務相聯(lián)系,用任務來完成IRS的功能,建立實時多任務系統(tǒng)。

     具體的做法為,先利用函數(shù)taskSpamn()來創(chuàng)建多個任務,建立多任務環(huán)境,與中斷相聯(lián)系的任務處于高優(yōu)先級,利用semTake(semID)使該任務等待信號量而處于阻塞狀態(tài),只有當相應的中斷到來時,中斷服務程序執(zhí)行semGive(semID)給出信號量,任務得到相應的信號量而執(zhí)行。任務間通信利用互斥信號量實現(xiàn)內(nèi)存共享。

下面以一個數(shù)據(jù)采集的程序?qū)嵗齺碚f明這種實時多任務程序的設計方法。

     對于一個需要定周期采樣并且還要等待外部數(shù)據(jù)準備好后,讀入數(shù)據(jù)并與采樣數(shù)據(jù)融合的系統(tǒng),我們進行了如下設計,系統(tǒng)劃分為三個任務,按優(yōu)先級高低排列的任務為:

a.     采樣與數(shù)字濾波(tsample);

b.     讀入數(shù)據(jù)與數(shù)據(jù)處理(tdataprocess);

c.     系統(tǒng)監(jiān)控(tmonitor)。

  其中,tsample和tdataprocess通過信號量分別與定時中斷和外部數(shù)據(jù)準備好中斷相聯(lián)系,它們之間的通信利用互斥信號量實現(xiàn)內(nèi)存共享。當沒有中斷到來時,任務得不到信號量而處于阻塞狀態(tài),執(zhí)行tmonitor;當中斷到來時,中斷服務程序產(chǎn)生信號量,相應的高優(yōu)先級任務得到信號量而搶先執(zhí)行,當高優(yōu)先級的任務執(zhí)行完后再執(zhí)行低優(yōu)先級任務。程序如下:

1)主程序創(chuàng)建三個任務和兩個中斷連接。

STATUS main (void)

{…

tidsample=taskSpawn("tsample",200,0,STACK_SIZE,(FUNCPTR)sample,0,0,0,0,0,0,0,0,0,0); tiddataprocess=taskSpawn("tDataprocess",210,0,STACK_SIZE,(FUNCPTR)dataprocess,0,0,0,0,0,0,0,0,0,0);

…}

2) 中斷服務程序只產(chǎn)生相應的信號量。

void intSample(void){semGive(sampleSemID);}

void intDataprocess(void){semGive(dataprocessSemID);}

3)高優(yōu)先級任務等待信號量而處于阻塞狀態(tài),要取得相應的中斷服務程序發(fā)出的信號量才能運行。

void sample (void)

{semTake(sampleSemID,WAIT_FOREVER);

…}

void dataprocess (void)

{semTake(DataprocessSemID,WAIT_FOREVER);

…}

該程序在WxSim下運行,在軟件邏輯分析儀WindView下顯示的運行結果如圖1—4。     

 

      

              圖 3                                       圖 4

  其中,圖3顯示的運行過程是,任務tmonitor執(zhí)行à中斷intrupptà中斷服務程序給出信號量semGive(sampleSemID)à中斷tintà中斷服務程序給出信號量semGive(dataprocessSemID)à任務tsample得到信號量semTake(sampleSemID)à任務tsample執(zhí)行完后退出à任務dateprocess得到信號量semTake(dataprocessSemID)à任務tdataprocess執(zhí)行完后退出à任務tmonitor繼續(xù)執(zhí)行。

   圖4顯示的運行過程是:任務tmonitor執(zhí)行à中斷tintà中斷服務程序給出信號量semGive(dataprocessSemID)à任務dataprocess得到信號量semTake(dataprocessSemID)à任務tdataprocess執(zhí)行à中斷intrupptà中斷服務程序給出信號量semGive(sampleSemID)à任務tsample得到信號量 semTake(sampleSemID)à任務tsample執(zhí)行完后退出à任務tdataprocess繼續(xù)執(zhí)行,執(zhí)行完后退出à 任務tmonitor繼續(xù)執(zhí)行。

  由運行結果可以看出,與中斷對應的任務在得到信號量后沒有立即執(zhí)行,當中斷服務程序返回中斷點后,有幾微秒的延遲(Pentium ,100M),這是由于任務切換上下文造成的,這一延遲量對于系統(tǒng)的實時性影響不大,是可以接受的,程序的運行結果達到了預期要求。

 

結束語

  本文作者創(chuàng)新點:在VxWorks實時操作系統(tǒng)中,使用信號量將中斷與任務相聯(lián)系,中斷服務程序只產(chǎn)生信號量,保證了中斷服務程序盡快結束,以免阻塞低優(yōu)先級的中斷;用任務來完成中斷服務程序所需要完成的功能,避免了VxWorks對中斷服務程序的約束。在軟件邏輯分析儀WindView下看到的程序運行結果表明,該方法建立實時多任務系統(tǒng)是可行的

]]>
基于Rhapsody和VxWorks的自動取款機系統(tǒng)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1953&Page=1wangxinxin2010-12-1 11:21:02摘要:介紹如何運用UML設計簡單的自動取款機系統(tǒng)模型并在操作系統(tǒng)VxWorks上實現(xiàn)它:首先,介紹如何運用基于UML的嵌入式實時應用軟件開發(fā)環(huán)境Rhapsody設計和實現(xiàn)自動取款機系統(tǒng)的模型,以使它能獨立于實際的硬件和使用的操作系統(tǒng);然后詳細介紹上述模型如何在實時多任務操作系統(tǒng)VxWorks上實現(xiàn)。

    關鍵詞:Rhapsody VxWorks 自動取款機

引 言

  隨著嵌入式應用的不斷增長,嵌入式系統(tǒng)需求的復雜性、不確定性不斷提高,系統(tǒng)規(guī)模也逐步擴大;而產(chǎn)品的研發(fā)周期又在很快地縮短,給嵌入式應用軟件的開發(fā)帶來了新的挑戰(zhàn)。同時,嵌入式軟件的開發(fā)者必須面對由于芯片性能的增長、嵌入式操作系統(tǒng)平臺等技術方面不斷變化所帶來的各種壓力。嵌入式軟件開發(fā)環(huán)境的發(fā)展,使一直“深埋”于系統(tǒng)的嵌入式應用軟件變得開放而易于開發(fā),從而促進了嵌入式技術的廣泛應用。

1 基于UML的嵌入式軟件開發(fā)環(huán)境結構

??圖1所示為一種支持基于UML(Unified Modeling Language,統(tǒng)一建模語言)的迭代式開發(fā)方法的開發(fā)環(huán)境的結構,虛框部分為基于UML的軟件開發(fā)環(huán)境。

??系統(tǒng)分析和設計用UML來描述,對系統(tǒng)建模;實現(xiàn)過程利用代碼自動生成技術來實現(xiàn);測試過程將依賴于生成的代碼,通過在代碼中拆裝一些用于支持模型調(diào)試的調(diào)試信息來實現(xiàn);而代碼的編譯、鏈接則采用目標系統(tǒng)的操作系統(tǒng)開發(fā)環(huán)境來完成,代碼的運行與源程序級的調(diào)試仍然采用一般的嵌入式軟件調(diào)試環(huán)境。

??Rhapsody是一個基于UML的面向嵌入式實時應用開發(fā)的集成、可視化環(huán)境。軟件開發(fā)者可以在這個環(huán)境里進行分析、設計、實現(xiàn)及驗證。Rhapsody支持基于模型的調(diào)試;提供專門為實時嵌入式應用設計的可執(zhí)行的框架,可以產(chǎn)生基于VxWorks、POS、OSE等多種操作系統(tǒng)的C語言、C++語言、Java語言的源程序。本文所給出的自動取款機系統(tǒng)的模型正是基于Rhapsody設計的。

2 自動取款機系統(tǒng)模型的設計

    2.1 需求分析

??我們設計的自動取款機系統(tǒng)要滿足如下要求:

??在自動取款機系統(tǒng)中,當顧客在自動取款機操作面板上插入信用卡并輸入密碼和現(xiàn)金支取數(shù)額(每次最多只能取一千元)后,由自動取款機讀取卡上的內(nèi)容,并把相應信息傳送到銀行。銀行把自動取款機送來的信息與銀行帳號上的信息進行比較,如果兩者一致,則銀行傳送確認信息到自動取款機,由自動取款機輸出現(xiàn)金,然后顧客取出卡和現(xiàn)金;如果兩者不一致,則要求顧客再次輸入密碼和現(xiàn)金支取數(shù)額,然后重復上述操作;若密碼輸入三次不正確,自動取款機就會吞掉信用卡,顧客就不能取出信用卡和現(xiàn)金。

??該自動取款機系統(tǒng)包括1個鍵盤(10個數(shù)字鍵、ENTER鍵和CANCEL鍵)、1個LCD液晶顯示屏、1個插卡孔和1個現(xiàn)金出口;通過雙絞線與銀行中的電腦進行串行通信。該自動取款機系統(tǒng)不包括銀行中的電腦,只是通過軟件與銀行中的上位機進行串行通信。

    2.2 可視化建模

??建模是面向?qū)ο蠓治龊驮O計的核心,也是分析和設計過程中最基本和最關鍵的活動之一。UML不僅適用于以面向?qū)ο蠹夹g描述的任何類型的系統(tǒng),而且適用于系統(tǒng)開發(fā)的不同階段。根據(jù)開發(fā)過程中不同階段的具體要求,利用UML不同類型的圖來描述系統(tǒng)的各種靜態(tài)結構模型和動態(tài)行為模型。下面介紹如何利用基于UML的面向嵌入式實時應用開發(fā)的集成可視化環(huán)境Rhapsody創(chuàng)建自動取款機系統(tǒng)的模型。

圖3 取出現(xiàn)金的黑匣子場景

    第一步:根據(jù)要求建立用例圖。

??圖2所示為用例圖。圖中給出了自動取款機系統(tǒng)的主要用途,并表明由誰使用自動取款機系統(tǒng)。有一個主要成員——顧客。一個用例圖應該具有這樣的系統(tǒng)功能:對操作者而言,它返回可觀察的結果但并不顯示系統(tǒng)的內(nèi)在結構。

??自動取款機系統(tǒng)的主要用途是“取出現(xiàn)金”用例。顧客參與其中的兩個實例是“輸入密碼”和“取出現(xiàn)金”。這兩個實例都包含了另一個用例“讀取卡上內(nèi)容并驗證”。對每一個用例而言,我們都可以增加文本描述。假如需要的話,這些用例能夠被細化成另一張更多用例的圖。這些用例并沒有顯示任何內(nèi)在的結構,僅是一個功能性的視圖。

    第二步:設計黑匣子場景。

??建立了一個用例圖后,下一步便是細化用例,即設計一些黑匣子場景。這些黑匣子場景的主要作用是表明模型和對象之間的相互關系。把整個系統(tǒng)看作一個整體,對 “取出現(xiàn)金” 用例,我們細化為圖3所示的場景。(由于每次最多只能取一千元,所以最多只需要按鍵4次。)

??圖3所示的場景能被MSD(消息序列表)捕獲,用來描述在顧客和自動取款機系統(tǒng)之間的通信行為。當創(chuàng)建這樣的圖表時,關于系統(tǒng)的更多細節(jié)被隱藏了;同時,這些場景幫助我們更好地理解使用者如何使用報警系統(tǒng)以及需要做哪些事情?偠灾恳挥美加泻芏嗟膱鼍靶枰东@,每一個場景都是用例的一個有效的實例。

    第三步:設計子系統(tǒng)圖。

??下一步是如何把模型分割成子系統(tǒng)。在UML中,一個子系統(tǒng)作為一個封裝顯示,即主要是一個類的集合。圖4的子系統(tǒng)圖表明自動取款機系統(tǒng)已經(jīng)被分解成兩個基本的部分:自動柜員機封裝(AtmerPkg)和硬件封裝(HardharePkg)。同時也表明:自動柜員機封裝是完全獨立于實際的硬件和硬件封裝的,并且實現(xiàn)了Ihardware接口能夠用于連接自動柜員機封裝。接口類Ihardware描述了對自動柜員機封裝的所有必需的操作,實現(xiàn)了應用與硬件環(huán)境的隔離。

??一旦在自動柜員機封裝和硬件封裝之間定義了接口類,每一個子系統(tǒng)就能同步和獨立地細化為更多的子系統(tǒng)。每一個子系統(tǒng)都知道它和其它子系統(tǒng)之間的接口。例如,我們可以開始分析自動柜員機子系統(tǒng)圖,而不需要知道關于硬件的更多情況。

    第四步:設計對象模型圖。

??對自動柜員機封裝而言,我們設想有一個AtmerController類,其中包含Keypad類、Card類、LCD類和Cash類,這些類表示如圖5所示。

??圖5表明:AtmerController類作為一個聚合類,包含了其它類的實例。我們也能看出,我們能選擇顯示“Keypad”類的不同的操作和屬性。在上面的例子中,假如一個實例被AtmerControlle類創(chuàng)建,那么它將創(chuàng)建Keypad類的一個實例theKeypad、LCD類的一個實例theLCD、Cash類的一個實例theCash以及Card類的一個實例theCard。假如AtmerController類的實例被刪除,這些包含的實例也同時被刪除。

??Ihardware類也有一些純虛函數(shù),所以為了測試AtmerController類,必須忽略這些操作。圖6表示:ATM包含了AtmerController類的一個實例和從Ihardware類繼承并忽略了其操作的Hw類的一個實例。

    第五步:生成白匣子場景。

??生成了一個新類AtmerController后,就可以開始為每一個黑匣子場景生成白匣子場景。消息序列表將用于獲取以上不同場景的類的實例之間的通信行為。例如,圖7消息序列描述了顧客輸入支取現(xiàn)金數(shù)額并取出現(xiàn)金的場景。

??消息通常對應于對象模型中操作和操作的返回值。消息值對應于類的屬性或是類操作的返回值。消息可以是同步的,也可以是異步的。從圖中可以看出,這些類都有動態(tài)行為:它們正在處理定時事件;調(diào)用其它類的操作;接受事件。對UML來說,這些動態(tài)行為都可以用一個狀態(tài)圖來表示。

    第六步:創(chuàng)建狀態(tài)圖。

??以顧客輸入密碼過程為例,創(chuàng)建狀態(tài)圖,如圖8所示。通常,當一個問題很復雜時,它往往被分解成一些簡單的問題,這也正是對顧客輸入密碼過程要做的事情。圖8所示的狀態(tài)圖描述了顧客輸入密碼過程中的行為。

圖7 顧客輸入支取數(shù)據(jù)并取出現(xiàn)金的白匣子場景

    2.3 屬性、操作和事件

??屬性來源于需求文檔中定義的數(shù)據(jù),應該簡單,不考慮設計和實現(xiàn)的細節(jié)。每個類都可能有定義在其上的事件和操作。事件對應于明確的瞬時發(fā)生的影響類的動態(tài)行為。操作對應于類的服務和功能。Rhapsody中有3種事件。

① 信號事件:對應于實例間的異步通信。

② 時間事件:這種事件在進入一個狀態(tài)并且經(jīng)過一個指定的時間后觸發(fā)。

③ 觸發(fā)操作:觸發(fā)操作是同步的操作,通過能夠迅速得到響應的事件得到執(zhí)行。觸發(fā)操作沒有實現(xiàn)代碼,卻可以作為類的狀態(tài)圖轉(zhuǎn)移的觸發(fā)器。當調(diào)用觸發(fā)操作時,同時產(chǎn)生響應的事件。

2.4 生成代碼

??一般嵌入式應用中有60%~90%的代碼用于內(nèi)務處理(如狀態(tài)圖的實現(xiàn)、任務間的通信等),這些代碼在設計新的系統(tǒng)時一般都可以重用。這種重用一般是通過實時框架來實現(xiàn)的。Rhapsody就提供了這樣一個實時框架,它提供了一套嵌入式和實時應用專門選擇和優(yōu)化的設計模板。嵌入式應用程序一般都運行在嵌入式操作系統(tǒng)的平臺上,而實時框架就是一個在操作系統(tǒng)之上應用程序之下的中間件。應用程序的編寫或自動產(chǎn)生都基于有統(tǒng)一接口的實時框架,這樣就使應用軟件的開發(fā)與具體的平臺無關,解決了嵌入式應用軟件的移植問題。

??一旦畫出其余的圖表并創(chuàng)建好不同類的實例后,就能進行代碼的生成和模型的測試工作。在Rhapsody中,需要進行一些配置,以告訴Rhapsody從哪些類生成代碼及使用什么樣的環(huán)境。首先,使用Microsoft環(huán)境(Windows操作環(huán)境和Visual C++編譯器)。然后,代碼在Rhapsody中生成和編譯,以產(chǎn)生可執(zhí)行程序。

    2.5 使UML模型有效

??Rhapsody能使用自動生成的代碼,所以,當實際的代碼運行時,它能返回一些信息給調(diào)試工具,以便Rhapsody進行模型的測試。通過模型級調(diào)試、驗證,可以盡早發(fā)現(xiàn)系統(tǒng)的設計錯誤或缺陷,從而較早地確定或降低項目的風險。

    2.6 測試模型

??一旦自動柜員機封裝被手工產(chǎn)生的事件測試通過并觀察發(fā)生的情況后,就可以利用如微軟的Visual C++產(chǎn)生一個GUI。用于創(chuàng)建GUI的類從Ihardware類繼承而來,選中set選項,當按鈕被按下時,調(diào)用ON操作。GUI也能促使模型在模型級再次被調(diào)試。

3 在VxWorks上運行

??模型是系統(tǒng)整體的抽象。軟件開發(fā)的最終形式必須生成程序代碼,模型畢竟是一些漂亮的藍圖。雖然它對軟件的設計有很大的作用,但用戶的最終目的是希望得到可執(zhí)行的程序。對于嵌入式實時系統(tǒng),代碼與系統(tǒng)要求(時間約束、資源的限制等)是緊密聯(lián)系的,用最終形式的源程序驗證系統(tǒng)的模型更準確。

??Rhapsody可利用軟件自動生成技術的成果,根據(jù)模型可以自動生成具有產(chǎn)品質(zhì)量的代碼。這種代碼既可以作為系統(tǒng)模型驗證的代碼,也是系統(tǒng)最后提交的代碼。所以產(chǎn)生的代碼是基于某個具體平臺的代碼,通過編譯即可運行在該平臺上。本文采用的是美國 Wind River System 公司推出的一個實時操作系統(tǒng)VxWorks。它是一個運行在目標機上的高性能、可裁剪的嵌入式實時操作系統(tǒng)。

??一旦自動取款機系統(tǒng)被設計、實現(xiàn)和測試后,它就能在實時多任務操作系統(tǒng)VxWorks上實現(xiàn)。1個鍵盤、1個LCD液晶顯示屏、1個插卡孔、1根與銀行的上位機相連的雙絞線和1個輸出現(xiàn)金口經(jīng)由I/O板連接到1個目標板上。

??從Ihardware類繼承而來并選中set選項而創(chuàng)建新類HwIrq。這些操作的實例可以被寫進Rhapsody中。為了寫到I/O板中,使用VxWorks系統(tǒng)的操作sysOutByte。

??HwIrq類已經(jīng)被設置成一個活動類,所以它能在自己的線程運行,線程的參數(shù)被配置如下:線程名為tRhpHw,堆棧長度為4096字節(jié),優(yōu)先級為180。

??HwIrq.cpp的部分程序見本刊網(wǎng)絡補充版(http://www.dpj.com.cn)。

4 結 論

??本文運用基于UML的嵌入式實時應用軟件開發(fā)環(huán)境Rhapsody來設計和實現(xiàn)自動取款機系統(tǒng)的模型。與傳統(tǒng)的嵌入式軟件開發(fā)方法相比,具有明顯的優(yōu)勢。它大大縮短了產(chǎn)品的開發(fā)周期,解決了嵌入式應用軟件的移植問題,使軟件的開發(fā)工作主要集中在高層的建模和模型的測試及驗證上,從而使軟件開發(fā)工作的焦點從編碼轉(zhuǎn)到了設計上。

]]>
基于MPC860/VxWorks的嵌入式系統(tǒng)開發(fā)http://www.rfoamep.cn/bbs/dispbbs.asp?BoardID=38&ID=1952&Page=1wangxinxin2010-12-1 11:17:27Research on the Developing of Embedded
Abstract: The article introduces the characters of embedded processor MPC860 and embedded real-time operation system VxWorks and describes the process of embedded system development based on MPC860/ VxWorks which uses BDM to write bootrom file, uses FIP to download VxWorks image and uses Tornado integrated developing circumstance to download and debug applying program.
Key Words: MPC860,  VxWorks,  Tornado,  embedded system
摘 要:本文介紹了嵌入式處理器MPC860與嵌入式實時操作系統(tǒng)VxWorks的特點,描述了基于MPC860/ VxWorks嵌入式系統(tǒng)開發(fā)的流程:使用BDM調(diào)試器燒寫bootrom文件,使用FTP下載vxworks內(nèi)核鏡像,使用Tornado集成開發(fā)環(huán)境下載與調(diào)試應用程序。
關鍵字: MPC860;VxWorks;Tornado;嵌入式系統(tǒng)

1 引言
摩托羅拉公司生產(chǎn)的MPC系列CPU基于PowerPCTM結構,它由三個模塊組成:即PowerPCTM內(nèi)核、系統(tǒng)接口單元(SIU)及通信處理模塊(CPM)[1]。三個模塊均采用32 位內(nèi)部總線。主處理器是PowerPCTM內(nèi)核,能夠?qū)崿F(xiàn)內(nèi)存管理,具有指令和數(shù)據(jù)Cache。系統(tǒng)接口單元中,存儲器控制單元可支持多種高性能的存儲器,包括SDRAM和Flash。CPM是一個RSIC處理器,具有串行通信控制器、波特率發(fā)生器等,支持多種協(xié)議的命令集,可以配置成多種通信處理模式。
VxWorks是一種實時性非常強的嵌入式操作系統(tǒng),具有高性能的內(nèi)核、良好的持續(xù)發(fā)展能力、以及友好的功能強大的開發(fā)環(huán)境,使該系統(tǒng)越來越被用戶認可。
目前,基于MPC860/VxWorks系統(tǒng)的應用越來越廣泛,因此,本文對基于MPC860/VxWorks系統(tǒng)的開發(fā)的一般流程進行了研究。
2 開發(fā)平臺
2.1 開發(fā)方式介紹
進行嵌入式系統(tǒng)開發(fā)有多種方式,常用的方式有兩種:
(1)先進行硬件設計開發(fā),然后通過仿真器在目標板上調(diào)試程序,如單片機常用的開發(fā)方法;或者在主機上編寫完用戶程序,將其直接編譯入內(nèi)核,整體下載入目標板,通過主機上的交叉調(diào)試器對目標機上的程序進行調(diào)試,如嵌入式實時多任務系統(tǒng)開發(fā)。
(2)軟硬件同時開發(fā),通常一些嵌入式操作系統(tǒng)都有一個集成開發(fā)環(huán)境,包括目標機仿真器,可以在開發(fā)硬件的同時,在仿真器上開發(fā)調(diào)試應用程序,最后進行聯(lián)合調(diào)試。
第二種方式開發(fā)時間短,但不夠直觀,容易出錯,即使仿真成功,但在下載到目標板后,通常還需要調(diào)試排錯。在有硬件環(huán)境的情況下,通常采用第一種方式,尤其是開發(fā)需要對硬件進行直接操作的底層驅(qū)動程序。
這里我們設計一款基于MPC860的嵌入式硬件環(huán)境,它同時具有幾種通信接口:BDM接口、串口和網(wǎng)口。系統(tǒng)開發(fā)采用第一種開發(fā)方式,軟件開發(fā)流程主要包括:引導程序的燒寫、下載vxworks鏡像和應用程序下載調(diào)試等幾個主要方面。
2.2  Tornado集成開發(fā)環(huán)境
Tornado是嵌入式實時領域里最新一代的開發(fā)調(diào)試環(huán)境,提供了高效明晰的圖形化的實時應用開發(fā)平臺,它包括一套完整的面向嵌入式系統(tǒng)的開發(fā)和調(diào)測工具[2]。在Tornado II中,包括高性能的實時操作系統(tǒng)VxWorks、原代碼編輯器、C/C++編譯器、高性能的調(diào)試器、圖形化的瀏覽器,集成的模擬器等工具和組件。
    最主要的特點是:Tornado支持動態(tài)鏈接和加載,允許開發(fā)者增量式地加載目標模塊到目標系統(tǒng)。動態(tài)鏈接和加載目標模塊的能力作為Tornado結構的核心,使開發(fā)者避免了在宿主機上鏈接應用到內(nèi)核,然后再下載整個可執(zhí)行體到一個靜態(tài)環(huán)境的這樣通常采用的步驟。這樣,就大大地縮短了每個編輯—測試—調(diào)試的周期。
Tornado II工具提供一個高度可視化和自動化的開發(fā)環(huán)境,加快了基于VxWorks的應用開發(fā)。
3   開發(fā)方案
3.1 系統(tǒng)引導程序編程與bootrom燒寫
(1)系統(tǒng)引導程序編程
目標系統(tǒng)啟動工作首先要進行系統(tǒng)初始化,對不同的CPU,系統(tǒng)初始化的基本步驟是類似的,主要步驟如下:
啟動;
禁止中斷;
放boot type(引導類型)到堆棧;
清空指令和數(shù)據(jù)緩存。
VxWorks 系統(tǒng)的 PowerPC BSP系統(tǒng)開機后,處理器是從romInit()函數(shù)開始執(zhí)行,這是romInit.s 中的第一段程序。在romInit()函數(shù)中必須完成以上功能,這些功能程序通常使用匯編語言來寫。在romInit()程序中開始執(zhí)行C程序之前必須盡可能少的加載設備。引導程序結束時,得到C程序romStart()在ROM中的地址,保證romInit執(zhí)行結束后,系統(tǒng)跳轉(zhuǎn)執(zhí)行romStart(),將文本和數(shù)據(jù)段從ROM復制到RAM中。
在系統(tǒng)初始化程序段中,可加入串口初始化程序和驅(qū)動程序,使系統(tǒng)引導結束后可支持使用串口傳輸命令和信息。加入下載命令程序段,以便于下載VxWorks內(nèi)核鏡像文件。
(2)bootrom燒寫
bootrom燒寫方式有多種,可以使用編程器編程,但對于在線系統(tǒng)調(diào)試,為方便修改,現(xiàn)在使用較多的是JTAG 調(diào)試器和BDM調(diào)試器。我們的系統(tǒng)采用的是MPC系列的CPU MPC860,它提供有BDM接口。因此可以很方便的使用BDM 調(diào)試工具編程。
MPC BDM調(diào)試工具通過宿主機的打印口與MPC BDM接口電纜相連,然后加到目標板的BDM接口上。連接BDM和目標板的電源,(此時也可以將串口線和網(wǎng)線連接到主機上)。在燒寫程序之前,將以上編寫的程序編譯成二進制目標代碼拷貝到c:\sds74\cmd\init下。
打開SDS74調(diào)試軟件,首先要下載燒寫boot的文件,然后執(zhí)行run/go命令,大約需要幾分鐘,boot燒寫完成。
將boot燒好后,拔掉bdm和目標板的電源以及bdm電纜,然后再插上目標板的電源,boot將運行,正常時會在主機的串口超級終端顯示如下信息:BOOT>,此時可以說boot燒寫成功。
3.2下載和運行VxWorks內(nèi)核鏡像
在可引導的MPC860嵌入式平臺上,使用串口和網(wǎng)絡傳輸數(shù)據(jù),進行BSP和應用程序調(diào)試。相對于使用串口傳輸數(shù)據(jù),使用網(wǎng)絡傳輸具有速度快,因此使用串口進行發(fā)送命令和返回信息,使用網(wǎng)口傳輸數(shù)據(jù)[6](如圖1)。

             主機                                            目標機


WindRiver公司提供了很多基于不同硬件平臺的典型的板級支持包BSP。因此,開發(fā)基于VxWorks的實用板級支持包是盡量獲得一個與目標板硬件環(huán)境相近的參考板級支持包和相關代碼模板,再根據(jù)目標板硬件環(huán)境,完成板級支持包包含的驅(qū)動程序及設備初始化,從而完成板級支持包的開發(fā)[4]。
啟動Tornado II集成開發(fā)環(huán)境,使用工程向?qū)?chuàng)建一個可啟動工程(bootable VxWorks image)項目,選擇基于ads860的BSP。在這個工程項目里可以進行BSP的基本配置、VxWorks的基本配置、網(wǎng)卡配置等,結合實際電路和應用進行修改,創(chuàng)建用戶自己的BSP以支持特定硬件。前述bootrom程序也可由此生成。在此階段可以借助WDB調(diào)試代理和Tornado工具輔助開發(fā),也可以選擇在線仿真器ICE輔助開發(fā)。
BSP 調(diào)試完成,編譯此工程項目為一個VxWorks內(nèi)核鏡像文件*.img,在以后的應用程序調(diào)試過程中可通過Tornado的一個部件 ftp server下載。下載方法如下:
首先連接主機與目標板的網(wǎng)線和串口線,目標板上電后,在超級終端窗口3秒以內(nèi)按回車鍵進入boot shell;否則,目標機系統(tǒng)會進入自動尋找并運行程序狀態(tài)。
此時啟動和配置ftp server,選擇Security菜單中的user/rights命令,添加一個用戶名如target,密碼target,設置主目錄為C:\;然后點擊Done。ftp server配置完成。
現(xiàn)在需要設置主機ip地址。將主機ip設為192.168.1.1,子網(wǎng)掩碼255.255.255.0。將調(diào)試好的VxWorks鏡像文件*.img拷貝到C:\。
最后,在主機的串口超級終端中輸入設置好的下載命令@,目標板開始從主機的ftp server下載*.img(vxworks的ram鏡像)。
下載完成,*.img文件自動運行,在超級終端窗口顯示vxworks鏡像在目標板啟動成功的信息,此時vxworks內(nèi)核已經(jīng)成功裝載到目標板,可以同主機的tornado(vxworks的集成開發(fā)環(huán)境)進行連接了。
3.3  在tornado中編寫和運行應用程序
當上述環(huán)境配置成功后就可以進行應用程序開發(fā)了。在tornado集成開發(fā)環(huán)境中可以開發(fā)并調(diào)試各種應用程序,添加程序并編譯成功后就可以下載到目標板上進行調(diào)試了。下面通過一個應用程序調(diào)試示例加以說明。
4   開發(fā)應用程序示例
4.1 開發(fā)并編譯程序
啟動Tornado II集成開發(fā)環(huán)境,使用工程向?qū)?chuàng)建一個可下載工程(downloadable application modules)項目project1,在創(chuàng)建過程中選擇工具鏈(toolchain)為PPC860gnu。在工程項目中編寫或添加應用程序源文件,如一個Hello.c文件。
#include "vxworks.h"
#include "drv/multi/ppc860Siu.h"
void root()
{
printf("hello!How are you?\n");  /*在終端輸出此信息*/
}
#define PD10    (0x0020)
#define PD09    (0x0040)
#define RUNLIGHT  PD10
#define LINKLIGHT PD09
void RunLight(void)
{
 int immrVal = vxImmrGet();
        *PDDIR(immrVal)|=RUNLIGHT;
 while(1)
    {
  *PDDAT(immrVal) ^=RUNLIGHT;
  taskDelay(sysClkRateGet()/2);/*delay 0.5 second*/
    }                    
}
void run()
{
 taskSpawn ("RunLight", 100,0 /*switchTaskOptions*/,0x1000,
      (FUNCPTR)RunLight, 0,0,0,0,0,0,0,0,0,0);
} /*通過以上函數(shù)創(chuàng)建并激活一個新任務,點亮系統(tǒng)指示燈*/
4.2 配置和運行target server
使用Tornado編譯器編譯成功后下載。下載之前首先要配置和運行target server,在菜單tool/target server/configure中,先點擊new新建一個配置如configuration1, 然后開始配置。
在target server proportion 項的“Back End”的選項中選擇wdbrpc;
在target server proportion 項的“Core File and Symbols”的選項中設置vxworks鏡像文件位置為C:\;
在target name/ip address輸入目標板的ip 地址192.168.1.254;
配置完成,點擊Launch運行;
下面可以下載和運行應用程序了。
4.3下載和運行程序
在工程上點擊右鍵,選擇download project1.out下載應用程序到目標板,然后可以在Tornado中的shell里運行應用程序了,如在shell中運行hello.c中的root函數(shù)(在shell中打印hello!How are you?)和run(目標板的run燈會閃亮)。
在每次下載調(diào)試應用程序或添加新的應用程序時都不需要把它們和vxworks內(nèi)核編譯到一起,這樣節(jié)省了開發(fā)和調(diào)試時間。
5   總結
本文描述了基于嵌入式實時操作系統(tǒng)VxWorks的開發(fā)方法,憑借性能優(yōu)良的VxWorks和高度集成的開發(fā)環(huán)境,VxWorks的應用已成為新的研究熱點。在開發(fā)過程中使用相近的BSP開發(fā)用戶自己的板級支持包,難度降低了并縮短了開發(fā)時間,使用ftp server下載VxWorks內(nèi)核鏡像,使用Torndo 工具編譯、調(diào)試和下載應用程序。通過這樣的流程對應用程序的開發(fā)帶來了極大的方便,該方法已得到廣泛應用。
本文作者創(chuàng)新點:對基于VxWorks嵌入式操作系統(tǒng)在MPC8XX系列cpu上的開發(fā)過程進行了具體而實用的描述。有一定的應用價值。

]]>
主站蜘蛛池模板: 国产成人精品免费视频app软件 | 国内精品久久久久影院蜜芽 | 亚洲国产精品18久久久久久 | 高潮毛片无遮挡高清免费视频 | 久久国产综合 | 日韩精品久久久肉伦网站 | 国产69囗曝吞精在线视频 | 自拍偷拍第4页 | 天天影视色香欲综合网 西瓜影音 | 人人草草 | 91亚洲精品一区二区在线观看 | 亚洲av日韩av永久无码绿巨人 | 中文字幕不卡视频 | 亚洲国产精品乱码一区二区三区 | 琪琪在线视频 | 四虎在线永久免费观看 | 宅男在线精品观看 | 一级毛片视频在线 | 亚洲一区欧美日韩 | 亚洲综合精品 | 夜夜曰 | 宝贝把腿张开我要添你下边动态图 | 性教育做爰视频免费观看 | 久草精品在线观看 | 国产人妻丰满熟妇嗷嗷叫 | 午夜免费影视 | 97porm自拍视频区原创 | 法国白嫩大屁股xxxx | 久久久久久久久蜜桃 | 美女视频免费看视频网站 | 军人全身脱精光自慰 | 男人不识本网站 | 国产精品成人一区二区不卡 | 欧美成人精品第一区 | 福利片在线看 | 一级电影网站 | 一级全黄男女免费大片 | 国产精品毛多多水多 | 国产亚洲日韩av在线播放不卡 | 天堂在线亚洲 | 色婷婷激婷婷深爱五月 |