VxWorks的输出重定向, 首先推荐大家看一下这篇文章《VxWorks for X86的输入输出定向》,对VxWorks里的重定向有个初步认识

下面讲一下具体用法:

VxWorks系统里的定向主要有2种,定向输出输入全局的和任务级的。

全局的:

#ifdef INCLUDE_IO_BASIC
   
if (consoleFd != NONE)
{
        ioGlobalStdSet (STD_IN,  consoleFd);
        ioGlobalStdSet (STD_OUT, consoleFd);
        ioGlobalStdSet (STD_ERR, consoleFd);
}
#endif
顾名思义,默认的输入输出设备,全局有效,一般它可以是串口或者pcconsole,如所有的printf的输出口。
任务级的重定向:
用ioTaskStdSet() 可以改变任务的input/output的fd

ioTaskStdSet (0,STD_IN,  consoleFd);
ioTaskStdSet (0,STD_OUT, consoleFd);
ioTaskStdSet (0,STD_ERR, consoleFd);

VxWorks系统里的本身很多代码如一些dbg代码使用了这种模式,任务级重定向顾名思义, 只针对当前的任务有效。

举个例子,spy的输出会很长,怎么样把输出重定向到某个文件中呢?

首先要明白 spy本身就是一个任务(tSpyTask),所以你的重定向代码只能放在这个任务中才有用,换句话说,任务级的重定向代码在哪个任务下调用,这个任务的输入输出就会被重定向,因此spy要重定向的话,你可以在spy任务本身里加上重定向代码即可,如下

 
void spyComTask 
    ( 
    int freq, 
    FUNCPTR printRtn 
    ) 
    { 
    int delay = freq * sysClkRateGet (); 
    int consoleFd = open ("/tffs1/output.txt", 2, 0); //把spy任务输出重定向到 tffs里的output.txt文件 
    ioTaskStdSet (0, STD_IN, consoleFd); 
    ioTaskStdSet (0 ,STD_OUT, consoleFd); 
    ioTaskStdSet (0, STD_ERR, consoleFd); 
 
    while (TRUE) 
    { 
        spyReportCommon (printRtn); 
        taskDelay (delay); 
    } 
    } 

 

tSpyTask任务会执行这个spyComTask函数,因此整个任务被重定向,输出到了output.txt文件。


-> i

  NAME         ENTRY       TID    PRI   STATUS      PC       SP     ERRNO  DELAY
----------  ------------ -------- --- ---------- -------- -------- ------- -----
tIsr0       136068         970190   0 PEND         2490f0   9700f0       0     0
tExcTask    198934         2bc3c8   0 PEND         2490f0   2be580       0     0
tJobTask    1991fc         973c90   0 PEND         2490f0   973bb0       0     0
tLogTask    logTask        976dc0   0 PEND         24721c   976c50       0     0
tShell0     shellTask      9de1e0   1 READY        251020   9dc7b0       0     0
tBulkClnt   103384         9b9c80   5 PEND         2499d8   9b9b60       0     0
tUfiClnt    104264         9c5aa0   5 PEND         2499d8   9c5970       0     0
tSpyTask    spyComTask     96ab40   5 DELAY        25075c   96aa90       0    53
tErfTask    1453a0         97a4c0  10 PEND         2499d8   97a3e0       0     0
tVxdbgTask  117518         9c9710  25 PEND         2490f0   9c9640       0     0
tTffsPTask  flPollTask     97dc70 100 DELAY        25075c   97dbc0       0     4
vxbUsbBulk> 23418c         9b38e0 100 PEND         24721c   9b37a0       0     0
vxbUsbCbiU> 23418c         9bf700 100 PEND         24721c   9bf5c0       0     0
BusM A      21e194         2c66d0 100 DELAY        25075c   2c6620       0     1
EHCD_IH0    usbEhcdInte>   9e1680 100 PEND         2490f0   9e15b0       0     0
tXbdServic> 1f6818         980720 200 PEND         2490f0   980650       0     0
tXbdServic> 1f6818         99d3d0 200 PEND         2490f0   99d300       0     0
value = 0 = 0x0
-> ll "/tffs1"

Listing Directory /tffs1:
drwxrwxrwx  1 0       0                 1024 Jan  1  1980 data/
-rwxrwxrwx  1 0       0                96444 Jan  1  1980 output.txt 
value = 0 = 0x0
-> ll "/tffs1"

Listing Directory /tffs1:
drwxrwxrwx  1 0       0                 1024 Jan  1  1980 data/
-rwxrwxrwx  1 0       0                98712 Jan  1  1980 output.txt 
value = 0 = 0x0
->