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