vxworks屏幕输出
小弟新手
一般来说用printf都是串口输出,或者shell输出,
现在想在屏幕输出请问需要调用什么函数?
这个是不是要调用屏幕的输出函数??
大家有自己屏幕输出函数吗?请给一个我参考下,谢谢
[解决办法]
我理解你的这个屏幕就是PC的显示器设备,在VxWorks中是INCLUDE_PC_CONSOLE。
在VxWorks中,串口和控制台等都属于IO设备,都是用printf输出的,要输出的到什么地方去,取决当前标准输输入、输出和错误定位到那个上,你调用printf就输出到那个设备上。
看如下,是设置标准输入、输出的重新设置:
ioGlobalStdSet (STD_IN, consoleFd);
ioGlobalStdSet (STD_OUT, consoleFd);
ioGlobalStdSet (STD_ERR, consoleFd);
如果consoleFd文件描述符是一个串口的,你printf就到串口,如果这个pcConDevCreate(显示器设备),printf就输出到显示器。
[解决办法]
楼主关键的地方在于没有理解STDIN、STDOUT、STDERR、文件描述符fd等的概念。建议把这几个基本概念了解了就比较清楚了。
对于一个任务来说,它的标准输出定向到哪个设备,那打印的时候就打印到哪个设备上了。
vxworks下的任务可以单独用ioTaskStdSet()进行设置标准输入输出,上面说的ioGlobalStdSet()则可以把默认所有任务的标准输入输出定位到某个fd上
[解决办法]
在编译bootrom要用到target/config/all/bootconfig.c文件,在这个文件中的usrRoot函数有如下一段代码:
#ifdef INCLUDE_PC_CONSOLE
pcConDrv ();
for (ix = 0; ix < N_VIRTUAL_CONSOLES; ix++)
{
sprintf (tyName, "%s%d", "/pcConsole/", ix);
(void) pcConDevCreate (tyName,ix, 512, 512);
if (ix == PC_CONSOLE) /* init the console device */
{
strcpy (consoleName, tyName);
consoleFd = open (consoleName, O_RDWR, 0);
(void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);
(void) ioctl (consoleFd, FIOSETOPTIONS,
OPT_ECHO | OPT_CRMOD | OPT_TANDEM | OPT_7_BIT);
}
}
#endif /* INCLUDE_PC_CONSOLE */
就是这个INCLUDE_PC_CONSOLE定义了,就可以了,这个宏定义在你bsp包的config.h下就行了。
你需要把这个文件好好看看,最后就是定义几个宏定义,
在上面这段代码之后,就有:
ioGlobalStdSet (STD_IN, consoleFd);
ioGlobalStdSet (STD_OUT, consoleFd);
ioGlobalStdSet (STD_ERR, consoleFd);
这个之后串口输出就可以到屏幕上了。