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

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

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

  (2)簡(jiǎn)要介紹VxWorks的基本組成,內(nèi)核的基本結(jié)構(gòu);

  (3)概述VxWorks板級(jí)支持包(BSP)的概念及VxWorks的啟動(dòng)過(guò)程;

  (4)介紹VxWorks設(shè)備驅(qū)動(dòng)的架構(gòu)及編寫(xiě)方法;

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

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

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

  (1) 利用VMware等軟件模擬真實(shí)的目標(biāo)機(jī);

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

  (3) 修改Tornado相關(guān)設(shè)置,連接宿主機(jī)與目標(biāo)機(jī),建立調(diào)試通道;

  (4) 寫(xiě)一個(gè)簡(jiǎn)單的應(yīng)用程序并下載到目標(biāo)系統(tǒng)運(yùn)行。

  

圖片點(diǎn)擊可在新窗口打開(kāi)查看

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

  本章工作的最終目標(biāo)為:

  (1)VxWorks在VMware啟動(dòng)成功并順利運(yùn)行,如圖2;

  圖片點(diǎn)擊可在新窗口打開(kāi)查看

圖2 在VMware中運(yùn)行的VxWorks

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

  圖片點(diǎn)擊可在新窗口打開(kāi)查看

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

  1. 模擬目標(biāo)機(jī)

  PC也具有目標(biāo)機(jī)的所有特點(diǎn),實(shí)際上,我們可以把PC作為嵌入式系統(tǒng)的目標(biāo)機(jī),從而構(gòu)造如圖4所示的開(kāi)發(fā)模型:

  圖片點(diǎn)擊可在新窗口打開(kāi)查看

  圖4 PC作為目標(biāo)機(jī)

  很遺憾,這種方法實(shí)際上非常麻煩,同時(shí)開(kāi)動(dòng)兩臺(tái)PC進(jìn)行調(diào)試將使你和你的室友飽受折磨,既然他如此地?zé)崆杏谟螒蚝蜕暇W(wǎng)。因此,我們可以借助VMware來(lái)在本機(jī)上虛擬出另一PC。

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

  下面我們講解用VMware來(lái)建立一臺(tái)虛擬PC的步驟:

  (1)下載并安裝VMware;

  (2)使用VMware向?qū)Ы⒁粋(gè)針對(duì)VxWorks的虛擬機(jī);

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

  

圖片點(diǎn)擊可在新窗口打開(kāi)查看

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

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

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

對(duì)于這些問(wèn)題,希望大家從自己的開(kāi)發(fā)經(jīng)歷談?wù)勛约嚎捶?在這里只要你有過(guò)嵌入式開(kāi)發(fā)的經(jīng)驗(yàn),你就可以暢所欲言,我們的目的是取長(zhǎng)補(bǔ)短,相互提高!

]]>
VxWorks應(yīng)用開(kāi)發(fā)基本步驟http://www.xinguifushi.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),類(lèi)似于PC機(jī)主板上的BIOS的存儲(chǔ)區(qū)域。和boot image不是一回事。VxWorks文檔中的bootrom區(qū)是指boot image存放的位置。
boot image的作用是把VxWorks image 加載到主板。boot image只初始化很少的硬件系統(tǒng)如串口,網(wǎng)口等。為加載VxWorks image做準(zhǔn)備,當(dāng)VxWorks系統(tǒng)下載完畢后,boot image的作用也就完成了。
VxWorks image含有完整的VxWorks OS。是真正運(yùn)行于目標(biāo)板上的操作系統(tǒng)。應(yīng)用程序運(yùn)行于VxWorks系統(tǒng)之上。
boot image 和VxWorks image生成在使用BSP文件上的區(qū)別在于:在啟動(dòng)順序中Bootrom調(diào)用bootConfig.c,而VxWorks調(diào)用usrConfig.c.

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

  3.當(dāng)然硬件有關(guān)的好多軟件也是要裝的,現(xiàn)在只裝了Protel99,我所從事的公司都用這個(gè),其他的好軟件我只是聽(tīng)說(shuō),沒(méi)有機(jī)會(huì)用,汗顏。

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

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

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

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

  8.學(xué)會(huì)用printf打印錯(cuò)誤。用好快捷鍵,一個(gè)你天天打交道的軟件理所應(yīng)當(dāng)熟悉他的快捷鍵,這樣你也會(huì)快很多。

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

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

  12.你有兩個(gè)網(wǎng)卡么?沒(méi)有就打申請(qǐng)?jiān)儋I(mǎi)一個(gè)。串口夠用么?不要總把調(diào)試線拔來(lái)拔去,那不是給老板省錢(qián),是給自己找罵。
  總是因?yàn)闆](méi)有插某根線而浪費(fèi)10分鐘到半個(gè)小時(shí)時(shí)間來(lái)排查錯(cuò)誤,那是浪費(fèi)生命,這半個(gè)小時(shí)時(shí)間應(yīng)該用來(lái)上CSDN或者看八卦新聞。
  
  

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

    關(guān)鍵詞:ARM7TDMI S3C4510B VxWorks BSP  

1 介紹  

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

● 時(shí)鐘頻率50MHz  

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

● 8KB的Cache/SRAM  

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

● 兩個(gè)HDLC通道,每個(gè)通道可支持10Mbps  

● 兩個(gè)UART通道  

● 兩個(gè)DMA通道  

● 兩個(gè)32位定時(shí)/計(jì)數(shù)器  

● 18個(gè)可編程I/O口  

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

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

● 具有擴(kuò)展外部總線  

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

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

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

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

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



















圖片點(diǎn)擊可在新窗口打開(kāi)查看





2 系統(tǒng)硬件圖  

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



















圖片點(diǎn)擊可在新窗口打開(kāi)查看



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

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

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

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

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

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

④ 燒寫(xiě)程序采用編程器。  

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

(1)拷貝BSP  

將wrSBCArm7 BSP拷貝一份并命名為4510BSP,接下來(lái)的工作就是修改該目錄下的文件,從而得到自己的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的入口地址。對(duì)大多數(shù)板來(lái)說(shuō),這就是ROM地址區(qū)的首地址,然而也有的硬件配置使用ROM起始的一部分地址區(qū)作為復(fù)位向量,因此需要根據(jù)此設(shè)置偏移量作為它的地址。這個(gè)偏移量因CPU結(jié)構(gòu)而定。  

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

ROM_SIZE:ROM實(shí)際大小。  

RAM_LOW_ADRS:裝載Vxworks的地址。  

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

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

(3)修改config.h文件  

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

(4)修改romInit.s文件  

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

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

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

② 禁止中斷控制器;  

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

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

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

⑥ 初始化堆棧指針;  

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

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

BSP基本部分就已經(jīng)修改完成,至于bootInit.c和bootConfig.c文件,我們一般不需要修改它,只是在調(diào)試過(guò)程中為了方便調(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  

并修改引導(dǎo)行為  

#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用來(lái)顯示引導(dǎo)信息,相當(dāng)于PC機(jī)中的顯示器,串口2用來(lái)下載VxWorks和調(diào)試。同時(shí)串口2波特率不能太高,經(jīng)測(cè)試115200好像不行。  

② 配置target server  

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





















圖片點(diǎn)擊可在新窗口打開(kāi)查看

  

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

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

4 結(jié)論  

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


WTX語(yǔ)言支持
WTX協(xié)議通常是通過(guò)TCL命令與C函數(shù)來(lái)進(jìn)行訪問(wèn)的。分別提供了TCL接口函數(shù)庫(kù)與C語(yǔ)言的函數(shù)庫(kù)。


WTX協(xié)議的通信機(jī)制
WTX協(xié)議提供了Tool 與Target Server之間的接口。他們之間的通信機(jī)制如下,一個(gè)Tool向Tareget Sever請(qǐng)求信息或執(zhí)行動(dòng)作,WTX將這些請(qǐng)求傳達(dá)給Target Server,而后Target Server 將作出適當(dāng)?shù)捻憫?yīng)。



WTX 消息格式
所有的WTX消息都在installDir/host/include/wtxmsg.h中被詳細(xì)定義了,這些消息都有一個(gè)同樣的前綴“WTX_MSG_”。這些消息的定義中都包括一個(gè)WTX_CORE結(jié)構(gòu)(如下所示),該結(jié)構(gòu)中包括了這個(gè)消息的標(biāo)識(shí)符與相應(yīng)的錯(cuò)誤代碼errCode。當(dāng)消息被正確的調(diào)用則返回OK,errCode錯(cuò)誤代碼為0,否則如果調(diào)用失敗則返回相應(yīng)的errCode錯(cuò)誤代碼(非零值)。可根據(jù)錯(cuò)誤的返回值errCode到installDir/host/include/wtxerr.h中找到相應(yīng)的錯(cuò)誤信息。
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é)議應(yīng)用范圍
Sessions交互時(shí)域與日志的管理;
系統(tǒng)級(jí)與任務(wù)級(jí)的調(diào)試;
Tool與Target Sever的綁定
目標(biāo)機(jī)內(nèi)存的訪問(wèn)
Tool與Target Server的斷開(kāi)
管理目標(biāo)模塊
管理符號(hào)表
管理上下文
支持虛擬輸入輸出
管理事件
支持Gopher


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

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

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

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

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

這里添加wtx應(yīng)用程序部分
.
.
.
.

斷開(kāi)連接
wtxToolDetach(hWtx);

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

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

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

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

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

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

]]>
基于μC/OS的嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā)研究http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=38&ID=1962&Page=1wangxinxin2010-12-1 13:49:25關(guān)鍵詞:嵌入式系統(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)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,目前嵌入式系統(tǒng)已經(jīng)滲透到日常生活的各個(gè)方面,其在工業(yè)、服務(wù)業(yè)、消費(fèi)電子等領(lǐng)域的應(yīng)用范圍都不斷擴(kuò)大,嵌入式計(jì)算機(jī)系統(tǒng)的正式定義為:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁減,符合應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗的嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的主要特征有:系統(tǒng)內(nèi)核小;專(zhuān)用性強(qiáng);系統(tǒng)精簡(jiǎn);嵌入式軟件要求高實(shí)時(shí)性的操作系統(tǒng)軟件;軟件要求高質(zhì)量和高可靠性;嵌入式系統(tǒng)開(kāi)發(fā)需要專(zhuān)門(mén)的開(kāi)發(fā)工具和環(huán)境。

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

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

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

 

二、嵌入式μC/OS的體系結(jié)構(gòu)介紹

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

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

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

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

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

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

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

 

#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

堆棧單位因?yàn)樘幚砥鳜F(xiàn)場(chǎng)的寄存器在任務(wù)切換時(shí)都將會(huì)保存在當(dāng)前運(yùn)行任務(wù)的堆棧中,所以O(shè)S_STK 數(shù)據(jù)類(lèi)型應(yīng)該是和處理器的寄存器長(zhǎng)度一致的。

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

堆棧增長(zhǎng)方向該設(shè)置由編譯器選項(xiàng)決定,在本開(kāi)發(fā)中設(shè)定堆棧由高地址向低地址增長(zhǎng)。

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

2、OS_CPU_C.C 文件

任務(wù)堆棧初始化  這里涉及到任務(wù)初始化時(shí)的一個(gè)堆棧設(shè)計(jì),也就是在堆棧增長(zhǎng)方向上如何定義每個(gè)需要保存的寄存器位置,在ARM體系結(jié)構(gòu)下,任務(wù)堆?臻g由高至低依次將保存著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);

}

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

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

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

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

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

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

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

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


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

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

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

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

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

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

3 打印驅(qū)動(dòng)

  打印機(jī)驅(qū)動(dòng)程序中的各個(gè)函數(shù)的實(shí)現(xiàn):

  (1)基本的I/O函數(shù)的實(shí)現(xiàn)
  根據(jù)打印機(jī)并口的特點(diǎn),驅(qū)動(dòng)程序中要實(shí)現(xiàn)的基本的I/O函數(shù)應(yīng)該是lptOpen(…)、lptRead(…)、lptWrite(…)和lptIoctl(…)。這4個(gè)基本函數(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結(jié)構(gòu)的定義為:
  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是所有設(shè)備的頭結(jié)構(gòu),是由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è)備的硬件初始化函數(shù)xxDrv(…)的實(shí)現(xiàn)

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

  其中,參數(shù)channels 為打印并口的通道號(hào);參數(shù)pResource是指向結(jié)構(gòu)LPT_RESOURCE的指針,結(jié)構(gòu)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)完成了打印機(jī)并口的初始化,其中調(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)設(shè)備的創(chuàng)建函數(shù)xxDevCreate(…)的實(shí)現(xiàn)

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

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

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

  根據(jù)編寫(xiě)打印機(jī)驅(qū)動(dòng)程序的兩種方式,選用查詢(xún)方式,其流程如圖1。

圖片點(diǎn)擊可在新窗口打開(kāi)查看

4 PostScript文件的生成

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

  在用ZINC自帶的程序生成PostScript文件時(shí),需注意以下幾點(diǎn):

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

  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種可用顏色。

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

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

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

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

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

圖片點(diǎn)擊可在新窗口打開(kāi)查看

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

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

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

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

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

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

  在獲得相應(yīng)漢字的字形位圖信息的基礎(chǔ)上,實(shí)現(xiàn)漢字打印輸出功能的關(guān)鍵是如何使用PostScript語(yǔ)言描述相應(yīng)漢字字形的位圖信息。在程序的設(shè)計(jì)中,通過(guò)畫(huà)1個(gè)像素長(zhǎng)度的直線來(lái)實(shí)現(xiàn)點(diǎn)的輸出,然后用一系列的點(diǎn)輸出位圖信息。其中,點(diǎn)的輸出用PostScript語(yǔ)言表示為:

  x y moveto
  x+1 y lineto

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

  x y moveto
  x+N y line to

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

7 結(jié)束語(yǔ)

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

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

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

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

    2、Tornado(VxWorks)實(shí)時(shí)目標(biāo)運(yùn)行時(shí)結(jié)構(gòu)

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

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

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

    實(shí)時(shí)程序運(yùn)行在VxWorks目標(biāo)機(jī)上,而Simulink運(yùn)行在主機(jī)上。Simulink需要VxWorks目標(biāo)機(jī)上運(yùn)行的任務(wù)來(lái)處理通信過(guò)程。Tornado(VxWorks)Real-Time Tartget生成如下VxWorks任務(wù):一個(gè)用于和Simulink通信,其他用于完成模型功能[2]。

    3、Tornado(VxWorks)實(shí)時(shí)目標(biāo)的實(shí)現(xiàn)過(guò)程

    3.1 實(shí)驗(yàn)環(huán)境

    我的實(shí)驗(yàn)環(huán)境如下表:

表1 實(shí)驗(yàn)環(huán)境
圖片點(diǎn)擊可在新窗口打開(kāi)查看

    3.2 實(shí)時(shí)目標(biāo)的具體實(shí)現(xiàn)步驟

    為了通過(guò)Real-Time Workshop實(shí)現(xiàn)和運(yùn)行一個(gè)基于VxWorks的實(shí)時(shí)程序,用戶(hù)可按如下的步驟進(jìn)行:

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

圖片點(diǎn)擊可在新窗口打開(kāi)查看
圖2 實(shí)驗(yàn)所采用的經(jīng)典PID模型

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

圖片點(diǎn)擊可在新窗口打開(kāi)查看
圖3 仿真參數(shù)Solver設(shè)置

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

圖片點(diǎn)擊可在新窗口打開(kāi)查看
圖5 仿真參數(shù)code generation options設(shè)置

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

    #------------ 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è)置完參數(shù),保存后,開(kāi)始創(chuàng)建程序,單擊上圖中的Build按鈕,開(kāi)始編譯程序,成功后可在當(dāng)前的目錄中產(chǎn)生了一個(gè)vxmodel_tornado_rtw的文件夾和一個(gè)目標(biāo)文件vxmodel.lo。

    (4) 手動(dòng)下載和運(yùn)行可執(zhí)行文件

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

    ld<vxmodel.lo

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

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

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

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

    運(yùn)行后我們可以看到目標(biāo)機(jī)上的屏幕上顯示:
    waiting for start message from host

    (5) 建立連接

    在External Target Interface對(duì)話框中的MEX-file arguments指定目標(biāo)機(jī)的IP、冗長(zhǎng)度和TCP端口號(hào),如圖6所示,就可以建立連接了。

圖片點(diǎn)擊可在新窗口打開(kāi)查看
圖6 External Target Interface對(duì)話框設(shè)置

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

圖片點(diǎn)擊可在新窗口打開(kāi)查看
圖7 External Mode Control Panel對(duì)話框

    4、結(jié)論

    針對(duì)Matlab的仿真特性和VxWorks操作系統(tǒng)的實(shí)時(shí)特點(diǎn),本文介紹了RTW面向Tornado(VxWorks)實(shí)時(shí)目標(biāo)的運(yùn)行結(jié)構(gòu),并且較為詳細(xì)的闡述了Tornado(VxWorks)實(shí)時(shí)目標(biāo)的具體實(shí)現(xiàn)流程,實(shí)現(xiàn)了Simulink在Tornado(VxWorks)實(shí)時(shí)目標(biāo)下的仿真。

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

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

    VxWorks 是美國(guó) Wind River System 公司( 以下簡(jiǎn)稱(chēng)風(fēng)河 公司 ,即 WRS 公司)推出的一個(gè)實(shí)時(shí)操作系統(tǒng)。WRS 公司 組建于1981年,是一個(gè)專(zhuān)門(mén)從事實(shí)時(shí)操作系統(tǒng)開(kāi)發(fā)與生產(chǎn)的軟件公司,該公司在實(shí)時(shí)操作系統(tǒng)領(lǐng)域被世界公認(rèn)為是最具有領(lǐng)導(dǎo)作用的公司。

 

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

 

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

 

1.1       Tornado2.0 組件

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

. 運(yùn)行在宿主機(jī)和目標(biāo)機(jī)上的強(qiáng)有力的交叉開(kāi)發(fā)工具和實(shí)用程序;

. 運(yùn)行在目標(biāo)機(jī)上的高性能、可裁剪的實(shí)時(shí)操作系統(tǒng)VxWorks;

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

 

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

 

 

1.1.1  實(shí)時(shí)系統(tǒng)

 


特點(diǎn):

l         實(shí)時(shí),能滿足嚴(yán)格的時(shí)間要求;

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

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

任務(wù)間通訊;

互斥;

l         其他標(biāo)準(zhǔn)設(shè)備作為庫(kù)的形式支持內(nèi)核;

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

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

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

l         在主機(jī)上編寫(xiě)代碼和編譯;在目標(biāo)機(jī)上進(jìn)行調(diào)試和執(zhí)行;

 

1.1.2  tornado 開(kāi)發(fā)工具

l         CrossWind:

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

 

l         Browser:

可對(duì)系統(tǒng)對(duì)象(任務(wù)、消息隊(duì)列、信號(hào)量等)和存儲(chǔ) 器使用情況進(jìn)行觀察的瀏覽器。可以方便地監(jiān)視用戶(hù)的 目標(biāo)系統(tǒng)。Browser匯總了應(yīng)用進(jìn)程,內(nèi)存消耗和一個(gè)目 標(biāo)內(nèi)存的映射。通過(guò) Browser,用戶(hù)可以觀察信號(hào)量、 消息隊(duì)列、內(nèi)存分配、看門(mén)狗計(jì)時(shí)器、堆棧使用情況、 目標(biāo) CPU使用率、對(duì)象模塊結(jié)構(gòu)和符號(hào)表以及每個(gè)任務(wù)的詳細(xì)信息。

 

l         WindSh:

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

 

l         WindView:

非常出色的系統(tǒng)可視診斷和分析工具。可非常容易地觀察各任務(wù),中斷程序之間的相互作用。它是在嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā)期間的可視工具。

 

l         VxSim:

快速原型仿真器?稍谟布O(shè)備未完成之前,在宿主機(jī)上對(duì)應(yīng)用程序進(jìn)行仿真分析。

 

l         Project Facility:

工程管理工具,配制應(yīng)用程序或vxworks本身。

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

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

2 VxWorks簡(jiǎn)介

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

3 串口通信基本原理

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

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

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

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

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

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

4 環(huán)境配置

在本實(shí)時(shí)應(yīng)用系統(tǒng)中采用486機(jī)作為目標(biāo)機(jī),串口通信時(shí)目標(biāo)機(jī)VxWorks系統(tǒng)啟動(dòng)盤(pán)的制作步驟:

(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)結(jié)*/

#define WDB_TTY_CHANNEL 1 /*通道號(hào)*/

#define WDB_TTY_BAUD 9600 /*串口速率,可設(shè)置至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=主機(jī)

ip e=目標(biāo)機(jī)ip u=主機(jī)上的登錄用戶(hù)名"

(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) 準(zhǔn)備一張已格式化的空盤(pán)插入軟驅(qū);

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

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

(8) 將系統(tǒng)制作盤(pán)插入目標(biāo)機(jī)軟驅(qū),加電啟動(dòng)目標(biāo)機(jī)即載入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 打開(kāi)串口

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

{    int sfd;//串口設(shè)備文件描述符

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

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

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

 

5.3 配置串口

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

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

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

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

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

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

}

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; 

//任務(wù)阻塞等待讀串口準(zhǔn)備完畢;

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ù)

              //任務(wù)阻塞等待寫(xiě)串口準(zhǔn)備完畢

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

   return(ERROR) ;

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

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

}

5.6 關(guān)閉串口

close(sfd);

6結(jié)束語(yǔ)

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

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

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

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

3 通信平臺(tái)的嵌入式系統(tǒng)設(shè)計(jì)

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

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

3.1 系統(tǒng)軟件的設(shè)計(jì)

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

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

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

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

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

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

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

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

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

基地址寄存器最重要的功能是分配PCI設(shè)備的系統(tǒng)地址空間。在基地址寄存器中,bit0(最低位)可用來(lái)標(biāo)識(shí)到底是存儲(chǔ)器空間還是I/O地址空間;刂 寄存器映射到存儲(chǔ)器空間時(shí),bit0為“0”,而當(dāng)其映射到I/O地址空間時(shí),bit0為“1”。

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

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

然后是根據(jù)PCI設(shè)備的配置參數(shù)來(lái)編寫(xiě)不同設(shè)備的初始化程序、中斷服務(wù)程序以及對(duì)PCI設(shè)備存儲(chǔ)空間的訪問(wèn)程序。

3.2 遠(yuǎn)程控制與通信鏈路

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

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

 

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

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

VxWorks中與構(gòu)建實(shí)時(shí)多任務(wù)系統(tǒng)有關(guān)的內(nèi)容如下:

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

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

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

2)信號(hào)量

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

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

b.  互斥:互斥信號(hào)量(Mutex)用來(lái)實(shí)現(xiàn)對(duì)共享資源的保護(hù),當(dāng)兩個(gè)以上的任務(wù)共享同一塊內(nèi)存緩沖區(qū)或同一個(gè)I/O設(shè)備之類(lèi)的資源時(shí),可能會(huì)發(fā)生競(jìng)爭(zhēng)狀態(tài);コ庑盘(hào)量可以通過(guò)對(duì)共享資源上鎖,實(shí)現(xiàn)高效的互斥訪問(wèn)。

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

3) 中斷服務(wù)程序

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

 

實(shí)時(shí)多任務(wù)程序設(shè)計(jì)

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

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

下面以一個(gè)數(shù)據(jù)采集的程序?qū)嵗齺?lái)說(shuō)明這種實(shí)時(shí)多任務(wù)程序的設(shè)計(jì)方法。

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

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

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

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

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

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

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) 中斷服務(wù)程序只產(chǎn)生相應(yīng)的信號(hào)量。

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

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

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

void sample (void)

{semTake(sampleSemID,WAIT_FOREVER);

…}

void dataprocess (void)

{semTake(DataprocessSemID,WAIT_FOREVER);

…}

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

 

      

              圖 3                                       圖 4

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

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

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

 

結(jié)束語(yǔ)

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

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

    關(guān)鍵詞:Rhapsody VxWorks 自動(dòng)取款機(jī)

引 言

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

1 基于UML的嵌入式軟件開(kāi)發(fā)環(huán)境結(jié)構(gòu)

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

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

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

2 自動(dòng)取款機(jī)系統(tǒng)模型的設(shè)計(jì)

    2.1 需求分析

??我們?cè)O(shè)計(jì)的自動(dòng)取款機(jī)系統(tǒng)要滿足如下要求:

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

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

    2.2 可視化建模

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

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

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

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

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

    第二步:設(shè)計(jì)黑匣子場(chǎng)景。

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

??圖3所示的場(chǎng)景能被MSD(消息序列表)捕獲,用來(lái)描述在顧客和自動(dòng)取款機(jī)系統(tǒng)之間的通信行為。當(dāng)創(chuàng)建這樣的圖表時(shí),關(guān)于系統(tǒng)的更多細(xì)節(jié)被隱藏了;同時(shí),這些場(chǎng)景幫助我們更好地理解使用者如何使用報(bào)警系統(tǒng)以及需要做哪些事情?偠灾,每一用例都有很多的場(chǎng)景需要捕獲,每一個(gè)場(chǎng)景都是用例的一個(gè)有效的實(shí)例。

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

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

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

    第四步:設(shè)計(jì)對(duì)象模型圖。

??對(duì)自動(dòng)柜員機(jī)封裝而言,我們?cè)O(shè)想有一個(gè)AtmerController類(lèi),其中包含Keypad類(lèi)、Card類(lèi)、LCD類(lèi)和Cash類(lèi),這些類(lèi)表示如圖5所示。

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

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

    第五步:生成白匣子場(chǎng)景。

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

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

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

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

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

    2.3 屬性、操作和事件

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

① 信號(hào)事件:對(duì)應(yīng)于實(shí)例間的異步通信。

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

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

2.4 生成代碼

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

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

    2.5 使UML模型有效

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

    2.6 測(cè)試模型

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

3 在VxWorks上運(yùn)行

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

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

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

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

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

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

4 結(jié) 論

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

]]>
基于MPC860/VxWorks的嵌入式系統(tǒng)開(kāi)發(fā)http://www.xinguifushi.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與嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的特點(diǎn),描述了基于MPC860/ VxWorks嵌入式系統(tǒng)開(kāi)發(fā)的流程:使用BDM調(diào)試器燒寫(xiě)bootrom文件,使用FTP下載vxworks內(nèi)核鏡像,使用Tornado集成開(kāi)發(fā)環(huán)境下載與調(diào)試應(yīng)用程序。
關(guān)鍵字: MPC860;VxWorks;Tornado;嵌入式系統(tǒng)

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

             主機(jī)                                            目標(biāo)機(jī)


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

]]>
主站蜘蛛池模板: 国产专区在线 | 麻豆第一页 | 97超级碰碰碰久久久观看 | 自拍偷在线精品自拍偷无码专区 | 久久精品国产一区 | 欧美午夜网站 | 成人性生片全套 | 五月激激激综合网色播免费 | 韩国精品欧美一区二区三区 | 久久91亚洲精品中文字幕奶水 | 国产猛烈无遮掩视频免费网站男女 | 色一欲一性一乱一区二区三区 | 亚洲国产成人在线视频 | 黄www.| 亚洲欧美一区二区三区在线观看 | 我要看欧美精品一级毛片 | 毛片亚洲毛片亚洲毛片 | 91网站网站网站在线 | 久久亚洲国产最新网站 | 在线观看国产精品一区 | 亚洲成人7777 | 亚洲欧美韩国 | 九一色视频| 一区二区视屏 | www.日本三级 | 波多野结衣在线观看一区 | 天堂8资源8在线 | 国产精品一区伦免视频播放 | 一级女毛片 | 加勒比色综合久久久久久久久 | 日本午色www高清视频 | 看一级特黄a大一片 | 久久成年人 | 国产麻豆入在线观看 | 午夜成年女人毛片免费观看 | 日韩欧美毛片免费看播放 | 18免费视频 | 欧美一级淫片a免费播放口aaa | 国产成人99精品免费观看 | 91久久精品国产免费一区 | 91久久99久91天天拍拍 |