電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 1287|回復(fù): 0
收起左側(cè)

大學(xué)畢業(yè)學(xué)嵌入式_嵌入式系統(tǒng)VxWorks中針對(duì)X86開發(fā)時(shí)標(biāo)準(zhǔn)輸入輸出的重定向

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級(jí)會(huì)員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-7-26 21:58:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
大學(xué)畢業(yè)學(xué)嵌入式_嵌入式系統(tǒng)VxWorks中針對(duì)X86開發(fā)時(shí)標(biāo)準(zhǔn)輸入輸出的重定向,   

   

  VxWorks操作系統(tǒng)是美國(guó)WindRiver公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分。良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks已經(jīng)在國(guó)內(nèi)的嵌入式系統(tǒng)開發(fā)中占據(jù)著重要的地位,特別是在通信行業(yè)中。

  在通信設(shè)備中,一般都是無(wú)頭設(shè)備,所謂無(wú)頭設(shè)備是指不外接顯示器,也不外掛鍵盤的,那么這個(gè)時(shí)候一般采用串口作為其輸入輸出的用戶操作接口。怎么將串口轉(zhuǎn)換為標(biāo)準(zhǔn)輸入輸出的用戶操作接口,此時(shí)就出現(xiàn)了標(biāo)準(zhǔn)輸入輸出的重定向問(wèn)題,筆者在VxWorks的開發(fā)中,曾多次碰到此問(wèn)題,并就此問(wèn)題進(jìn)行了一些研究,也有一些心得。

  VxWorks5.4中的輸入輸出重定向

  在VxWorks5.4 for X86的開發(fā)中,缺省輸入輸出是PC console,也即通過(guò)VGA的標(biāo)準(zhǔn)輸出和鍵盤的標(biāo)準(zhǔn)輸入。

  那么此時(shí)怎么將其輸入輸出定向到串口上來(lái)呢?

  a)、BootRom中的重定向

  打開targetconfigallbootConfig.c文件,可以找到這樣一行代碼:

  consoleFd = NONE;

  此consoleFd變量即標(biāo)準(zhǔn)輸入輸出句柄,此時(shí)為空。

  同樣,可以找到如下的三行代碼:

  ioGlobalStdSet (STD_IN, consoleFd);

  ioGlobalStdSet (STD_OUT, consoleFd);

  ioGlobalStdSet (STD_ERR, consoleFd);

  此三行代碼的意思是將標(biāo)準(zhǔn)輸入輸出定向到consoleFd。

  在這兩段代碼之間有打開諸如串口、PC console等過(guò)程,并將其打開的句柄賦給了consoleFd,這樣就將其標(biāo)準(zhǔn)輸入輸出定向到PC console等。

  同樣,如果在定向之前,即ioGlobalStdSet函數(shù)之前打開別的I/O設(shè)備,如socket、文件、管道等的話,那么標(biāo)準(zhǔn)輸入輸出就定向到socket、文件、管道等。

  一般情況下,用戶采用串口作為輸入輸出操作接口,所以我們一般將標(biāo)準(zhǔn)輸入輸出定向到串口。

  那么,怎么將標(biāo)準(zhǔn)輸入輸出定向到串口呢?按照以上原理,只要在ioGlobalStdSet函數(shù)之前打開相應(yīng)的串口并將所打開的串口句柄賦給consoleFd就可以了。

  實(shí)現(xiàn)代碼如下:

  /*打開串口,輸入輸出重定向到超級(jí)終端*/

  if((consoleFd=open(“/tyCo/0“,O_RDWR,0))==ERROR)

  logMsg(“open /tyCo/0 error! n“,0,0,0,0,0,0);

  (void)ioctl(consoleFd,FIOBAUDRATE,9600);

 。╲oid)ioctl(consoleFd,FIOSETOPTIONS,OPT_TERMINAL&~OPT_ECHO);

  (void)ioctl(consoleFd,FIOWFLUSH,0);

 。╲oid)ioctl(consoleFd,FIORFLUSH,0);

  

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表