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

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

  (1)搭建VxWorks嵌入式開發環境;

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

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

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

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

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

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

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

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

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

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

  

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

  圖1 嵌入式系統的調試

  本章工作的最終目標為:

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

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

圖2 在VMware中運行的VxWorks

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

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

圖3 與目標機建立調試通道的Tornado

  1. 模擬目標機

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

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

  圖4 PC作為目標機

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

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

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

  (1)下載并安裝VMware;

  (2)使用VMware向導建立一個針對VxWorks的虛擬機;

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

  

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

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

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

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

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

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

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

若在config.h中修改系統設置,如增加網卡等,是否需要重新燒bootrom?如果增加其他oem產品呢?

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

VxWorks 系統編程中任務級與中斷級的通訊如何實現?

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

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

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

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

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

 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

    關鍵詞:ARM7TDMI S3C4510B VxWorks BSP  

1 介紹  

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

● 時鐘頻率50MHz  

內核/IO電壓3.3V  

● 8KB的Cache/SRAM  

● 一個10/100Mbps 以太網控制器,MII接口  

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

● 兩個UART通道  

● 兩個DMA通道  

● 兩個32位定時/計數器  

● 18個可編程I/O口  

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

● 支持SDRAM,EDO DRAM,SRAM,Flash等  

● 具有擴展外部總線  

● JTAG接口,支持軟件開發 ,硬件調試  

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

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

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

ARM7TDMI內核方塊圖如圖1所示。



















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





2 系統硬件圖  

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



















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



    SDRAM選用HY57V653220(8Mbyte)、兩片FLASH分別為AM29F040(存放bootrom)和T28F160BT(作為文件系統用)。  

3 VxWorks操作系統下BSP構建  

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

① 開發工具用的是Tornado2.2 for ARM;  

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

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

④ 燒寫程序采用編程器。  

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

(1)拷貝BSP  

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

(2)修改MakeFile文件  

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

TARGET_DIR = 4510BSP # changed by caiyang  

VENDOR = CAI # changed by caiyang  

BOARD = MyArmBoard # changed by caiyang  

ROM_TEXT_ADRS = 01000000 # ROM entry address  

ROM_WARM_ADRS = 01000004 # ROM warm entry address  

ROM_SIZE = 00080000 # number of bytes of ROM space  

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

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

MACH_EXTRA =  

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

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

ROM_SIZE:ROM實際大小。  

RAM_LOW_ADRS:裝載Vxworks的地址。  

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

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

(3)修改config.h文件  

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

(4)修改romInit.s文件  

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

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

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

② 禁止中斷控制器;  

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

④ 將FLASH的內容拷貝到SDRAM中;  

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

⑥ 初始化堆棧指針;  

⑦ 跳轉到C程序romStart( )函數中。  

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

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

BOOTCONFIG = bootConfig.c  

BOOTINIT = bootInit.c  

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

要利用tsfs下載VxWorks,首先需要配置以下內容:  

① 在config.h文件中添加如下內容  

/* Serial port configuration */  

#define INCLUDE_SERIAL  

#undef NUM_TTY  

#define NUM_TTY N_SIO_CHANNELS  

#undef CONSOLE_TTY  

#define CONSOLE_TTY 0  

#undef CONSOLE_BAUD_RATE  

#define CONSOLE_BAUD_RATE 38400  

/*** WDB ***/  

#ifdef SERIAL_DEBUG  

#define WDB_NO_BAUD_AUTO_CONFIG  

#undef WDB_COMM_TYPE  

#undef WDB_TTY_BAUD  

#undef WDB_TTY_CHANNEL  

#undef WDB_TTY_DEV_NAME  

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

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

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

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

#endif /* SERIAL_DEBUG */  

/* tsfs added by caiyang */  

#define INCLUDE_TSFS_BOOT  

并修改引導行為  

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

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

② 配置target server  

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





















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

  

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

至此,我們的BSP就開發完成。  

4 結論  

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


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


WTX協議的通信機制
WTX協議提供了Tool 與Target Server之間的接口。他們之間的通信機制如下,一個Tool向Tareget Sever請求信息或執行動作,WTX將這些請求傳達給Target Server,而后Target Server 將作出適當的響應。



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

/* WTX message core */

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

} WTX_CORE;



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


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

WTX C API調用框架

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

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

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

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

斷開連接
wtxToolDetach(hWtx);

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

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

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

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

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

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

]]>
基于μC/OS的嵌入式系統應用開發研究http://www.hufushizhe.com/bbs/dispbbs.asp?BoardID=38&ID=1962&Page=1wangxinxin2010-12-1 13:49:25關鍵詞:嵌入式系統  μ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

一、嵌入式系統概述

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

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

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

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

 

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

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

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

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

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

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

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

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

 

#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

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

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

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

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

2、OS_CPU_C.C 文件

任務堆棧初始化  這里涉及到任務初始化時的一個堆棧設計,也就是在堆棧增長方向上如何定義每個需要保存的寄存器位置,在ARM體系結構下,任務堆?臻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);

}

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

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

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

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

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

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

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

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


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

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

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

2 電子海圖系統打印功能的總體設計思路

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

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

3 打印驅動

  打印機驅動程序中的各個函數的實現:

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

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

  DEV_HDR是所有設備的頭結構,是由VxWorks系統定義的,定義為:

  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)設備的硬件初始化函數xxDrv(…)的實現

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

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

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

  該函數lptDrv(int channels, LPT_RESOURCE *pResource)完成了打印機并口的初始化,其中調用函數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)設備的創建函數xxDevCreate(…)的實現

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

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

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

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

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

4 PostScript文件的生成

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

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

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

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

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

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

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

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

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

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

5 PostScript 文件在VxWorks操作系統下的打印輸出

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

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

6 漢字打印輸出的實現

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

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

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

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

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

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

  x y moveto
  x+1 y lineto

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

  x y moveto
  x+N y line to

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

7 結束語

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

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

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

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

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

    開發VxWorks實時應用系統的典型配置,如圖1所示:

圖片點擊可在新窗口打開查看
圖1 VxWorks實時應用開發的經典配置

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

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

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

    3.1 實驗環境

    我的實驗環境如下表:

表1 實驗環境
圖片點擊可在新窗口打開查看

    3.2 實時目標的具體實現步驟

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

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

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

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

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

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

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

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

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

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

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

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

    現在可以將實時程序下載到目標機中,具體的方法是在Tornado集成開發環境中啟動WindSh,在WindSh窗口執行如下命令:

    ld<vxmodel.lo

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

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

    參數的含義分別是:

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

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

    (5) 建立連接

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

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

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

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

    4、結論

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

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

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

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

 

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

 

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

 

1.1       Tornado2.0 組件

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

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

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

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

 

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

 

 

1.1.1  實時系統

 


特點:

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

l         多任務內核:

實時調度(基于優先級或搶占式的);

任務間通訊;

互斥;

l         其他標準設備作為庫的形式支持內核;

l         系統可重新配置,根據需要裁減組件,空間;

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

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

l         在主機上編寫代碼和編譯;在目標機上進行調試和執行;

 

1.1.2  tornado 開發工具

l         CrossWind:

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

 

l         Browser:

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

 

l         WindSh:

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

 

l         WindView:

非常出色的系統可視診斷和分析工具。可非常容易地觀察各任務,中斷程序之間的相互作用。它是在嵌入式系統應用開發期間的可視工具。

 

l         VxSim:

快速原型仿真器。可在硬件設備未完成之前,在宿主機上對應用程序進行仿真分析。

 

l         Project Facility:

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

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

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

2 VxWorks簡介

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

3 串口通信基本原理

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

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

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

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

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

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

4 環境配置

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

(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 /*定義通信方式為串口聯結*/

#define WDB_TTY_CHANNEL 1 /*通道號*/

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

#define WDB_TTY_DEV_NAME "tyCo/1"

#define CONSOLE_TTY 0

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

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

(2) 在Tornado集成環境中執行菜單命令Project > Make PC486 > Common Targets > clean刪除以前生成的文件,執行菜單命令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) 準備一張已格式化的空盤插入軟驅;

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

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

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

5程序示例

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

#include <vxWorks.h>

#include "strLib.h"

#include <string.h>

#include <sioLib.h>

#include <ioLib.h>

#include <stdio.h>

#include <ioctl.h>

#include <selectLib.h>

#include "types/vxTypesOld.h"

5.2 打開串口

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

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

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

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

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

 

5.3 配置串口

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

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

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

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

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

//設置 8 位數據位,2位停止位,帶校驗位,奇校驗

}

5.4 串口接收數據

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

{  while(1)

   {  char * accept _buf;

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

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

width=sfd +1; 

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

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

  return(ERROR);

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

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

 }

}

5.5 串口發送數據

int send_com1(void) //向串口1發送數據函數

   {              char *send_buf =" Data had accept!";  //待發送數據

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

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

   return(ERROR) ;

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

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

}

5.6 關閉串口

close(sfd);

6結束語

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

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

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

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

3 通信平臺的嵌入式系統設計

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

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

3.1 系統軟件的設計

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

VxWorks操作系統的集成環境叫Tornado。Tor-nado集成環境是一個高效明晰的圖形化實時應用開發平臺,它包括一套完整的、面向嵌入式系統的開發和調測工具。VxWorks的優點如下:

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

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

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

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

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

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

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

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

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

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

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

3.2 遠程控制與通信鏈路

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

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

 

2  VxWorks操作系統簡介

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

VxWorks中與構建實時多任務系統有關的內容如下:

1)wind內核任務調度策略

Wind內核采用基于優先級的搶占式調度法作為它的缺省策略,同時它也提供了輪轉調度法。

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

2)信號量

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

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

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

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

3) 中斷服務程序

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

 

實時多任務程序設計

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

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

下面以一個數據采集的程序實例來說明這種實時多任務程序的設計方法。

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

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

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

c.     系統監控(tmonitor)。

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

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

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) 中斷服務程序只產生相應的信號量。

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

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

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

void sample (void)

{semTake(sampleSemID,WAIT_FOREVER);

…}

void dataprocess (void)

{semTake(DataprocessSemID,WAIT_FOREVER);

…}

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

 

      

              圖 3                                       圖 4

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

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

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

 

結束語

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

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

    關鍵詞:Rhapsody VxWorks 自動取款機

引 言

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

1 基于UML的嵌入式軟件開發環境結構

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

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

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

2 自動取款機系統模型的設計

    2.1 需求分析

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

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

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

    2.2 可視化建模

??建模是面向對象分析和設計的核心,也是分析和設計過程中最基本和最關鍵的活動之一。UML不僅適用于以面向對象技術描述的任何類型的系統,而且適用于系統開發的不同階段。根據開發過程中不同階段的具體要求,利用UML不同類型的圖來描述系統的各種靜態結構模型和動態行為模型。下面介紹如何利用基于UML的面向嵌入式實時應用開發的集成可視化環境Rhapsody創建自動取款機系統的模型。

圖3 取出現金的黑匣子場景

    第一步:根據要求建立用例圖。

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

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

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

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

??圖3所示的場景能被MSD(消息序列表)捕獲,用來描述在顧客和自動取款機系統之間的通信行為。當創建這樣的圖表時,關于系統的更多細節被隱藏了;同時,這些場景幫助我們更好地理解使用者如何使用報警系統以及需要做哪些事情?偠灾,每一用例都有很多的場景需要捕獲,每一個場景都是用例的一個有效的實例。

    第三步:設計子系統圖。

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

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

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

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

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

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

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

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

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

    第六步:創建狀態圖。

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

圖7 顧客輸入支取數據并取出現金的白匣子場景

    2.3 屬性、操作和事件

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

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

② 時間事件:這種事件在進入一個狀態并且經過一個指定的時間后觸發。

③ 觸發操作:觸發操作是同步的操作,通過能夠迅速得到響應的事件得到執行。觸發操作沒有實現代碼,卻可以作為類的狀態圖轉移的觸發器。當調用觸發操作時,同時產生響應的事件。

2.4 生成代碼

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

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

    2.5 使UML模型有效

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

    2.6 測試模型

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

3 在VxWorks上運行

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

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

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

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

??HwIrq類已經被設置成一個活動類,所以它能在自己的線程運行,線程的參數被配置如下:線程名為tRhpHw,堆棧長度為4096字節,優先級為180。

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

4 結 論

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

]]>
基于MPC860/VxWorks的嵌入式系統開發http://www.hufushizhe.com/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與嵌入式實時操作系統VxWorks的特點,描述了基于MPC860/ VxWorks嵌入式系統開發的流程:使用BDM調試器燒寫bootrom文件,使用FTP下載vxworks內核鏡像,使用Tornado集成開發環境下載與調試應用程序。
關鍵字: MPC860;VxWorks;Tornado;嵌入式系統

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

             主機                                            目標機


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

]]>
主站蜘蛛池模板: 高清毛片aaaaaaaa**| 久久躁狠狠躁夜夜AV| 老司机美女一级毛片| 国产麻豆精品久久一二三| 久久久久亚洲AV成人无码| 欧美一级www| 免费网站看v片在线18禁无码| 久久国产精品99精品国产| 欧美精品blacked中文字幕| 国产主播福利精品一区二区| 91在线手机精品免费观看| 富二代国app产下载| 久久精品国产四虎| 欧美亚洲精品suv| 免费鲁丝片一级观看| 色135综合网| 国产激情з∠视频一区二区| jizzjizz丝袜老师| 成人影院wwwwwwwwwww| 亚洲18在线天美| 欧美怡红院免费全部视频| 全彩漫画口工令人垂延三尺| 羞耻暴露办公室调教play视频| 国产男女猛烈无遮挡免费视频网站| www色在线观看| 日韩色图在线观看| 亚洲色欲久久久综合网| 精品一二三区久久AAA片| 国产午夜福利100集发布| 56prom在线精品国产| 在线观看污污网站| 中文字幕免费在线看电影大全 | 国产精品高清一区二区三区不卡| 丁香花高清在线观看完整版 | 日本在线色视频| 亚洲人成色在线观看| 欧美成人精品高清在线观看| 免费无码AV一区二区| 精品久久久久久婷婷| 国产乱叫456在线| 边吃奶边插下面|