VxWorks下Shell调试总结
主命令行中的串口初始化和定向如下:
ttyDevCreate ("/tyCo/0", sysSerialChanGet (ix), 512, 512)
consoleFd = open ("/tyCo/0", O_RDWR, 0);?
sddl_console_fd = consoleFd;
ioctl (consoleFd, FIOBAUDRATE, (int)baudrate);
ioGlobalStdSet( STD_OUT,sddl_console_fd );???
ioGlobalStdSet( STD_ERR,sddl_console_fd );??? ?
?
這樣主命令行任務(wù)起來后,注冊一個命令用來調(diào)用Shell,比如調(diào)用Shell的回調(diào)函數(shù)為switch_to_vxWorks_shell(),那么就在這個函數(shù)里面實現(xiàn)創(chuàng)建tShell任務(wù),創(chuàng)建管道,重定向串口和字符處理的功能。如下
cl_v_shell_taskId = taskNameToId("tShell");?
pipeDevCreate(“pe/v_sh_out",_CL_V_SHELL_PIPE_MSG_MAX_NUMBER_, _CL_V_SHELL_PIPE_MSG_MAX_LEN_)
cl_v_shell_output_pipe_fd = open (“pe/v_sh_out", O_CREAT | O_RDWR, 0644);
pipeDevCreate(“pe/v_sh_in",_CL_V_SHELL_PIPE_MSG_MAX_NUMBER_, _CL_V_SHELL_PIPE_MSG_MAX_LEN_)
cl_v_shell_input_pipe_fd = open (“pe/v_sh_in", O_CREAT | O_RDWR, 0644);
?
之后就要調(diào)整主命令行中的串口設(shè)備描述符,接受串口輸入到管道中。通過下面幾個步驟實現(xiàn):
ioctl (_LONG32)sddl_console_fd, FIOSETOPTIONS, OPT_CRMOD )
?
將管道文件描述符賦給shell命令行的輸入輸出
cl_v_shell_out_fd = cl_v_shell_output_pipe_fd;
#ifdef _CL_TARGET_SHELL_INPUT_USE_PIPE_?
??? cl_v_shell_in_fd = cl_v_shell_input_pipe_fd;
#else
??? cl_v_shell_in_fd = (_LONG32)sddl_console_fd;
#endif
?
串口設(shè)備的IO操作,這樣數(shù)據(jù)流才能一致
ioctl (_LONG32)sddl_console_fd, FIOSETOPTIONS, OPT_CRMOD )
?
fd_set readfd;
?
FD_SET(_ULONG32)cl_v_shell_out_fd,&readfd);
FD_SET(_ULONG32)sddl_console_fd, &readfd);
?
在判斷fd中是否有數(shù)據(jù)也是通過readfd和一個宏來實現(xiàn)的
FD_ISSET(_ULONG32)cl_v_shell_out_fd,&readfd)?
FD_ISSET(_ULONG32)sddl_console_fd,&readfd)??
其中,輸出和捕獲的數(shù)據(jù)分別由專門的管道函數(shù)來處理。
?
退出Shell命令行時,將sddl_console_fd改回主命令行的終端設(shè)置模式,并且殺死tShell任務(wù)。
ioctl (sddl_console_fd, FIOSETOPTIONS, OPT_RAW)??
taskDelete(cl_v_shell_taskId)??
?
在移植過程中碰到了幾個問題,調(diào)試了幾天,有如下兩點需要總結(jié)
1.在移植Shell命令行到主命令行過程中,要將主命令行的串口描述符傳到Shell處理過程中去,shell的輸入就通過這個串口來接收。這是整個移植過程中關(guān)鍵的一步,本例就是將sddl_console_fd傳入作為tShell的串口描述符。
2.另一個問題就是tShell的終端輸入輸出類型可能和主命令行設(shè)置得不一樣,開始ioctl (_LONG32)sddl_console_fd, FIOSETOPTIONS, OPT_CRMOD )將串口類型設(shè)置為CR_MOD模式,退出到主命令行后,主命令行不能響應(yīng)Enter,但是Tab,字符輸入都可以,主命令行任務(wù)似乎也沒有死掉。后來在退出Shell命令行時又重新設(shè)置了串口模式,ioctl (sddl_console_fd, FIOSETOPTIONS, OPT_RAW),OPT_RAW模式,問題解決。
總結(jié)
以上是生活随笔為你收集整理的VxWorks下Shell调试总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义url是什么意思_applicat
- 下一篇: vmware上安装vxworks(xp环