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 );??? ?
?
這樣主命令行任務起來后,注冊一個命令用來調用Shell,比如調用Shell的回調函數為switch_to_vxWorks_shell(),那么就在這個函數里面實現創建tShell任務,創建管道,重定向串口和字符處理的功能。如下
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);
?
之后就要調整主命令行中的串口設備描述符,接受串口輸入到管道中。通過下面幾個步驟實現:
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
?
串口設備的IO操作,這樣數據流才能一致
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中是否有數據也是通過readfd和一個宏來實現的
FD_ISSET(_ULONG32)cl_v_shell_out_fd,&readfd)?
FD_ISSET(_ULONG32)sddl_console_fd,&readfd)??
其中,輸出和捕獲的數據分別由專門的管道函數來處理。
?
退出Shell命令行時,將sddl_console_fd改回主命令行的終端設置模式,并且殺死tShell任務。
ioctl (sddl_console_fd, FIOSETOPTIONS, OPT_RAW)??
taskDelete(cl_v_shell_taskId)??
?
在移植過程中碰到了幾個問題,調試了幾天,有如下兩點需要總結
1.在移植Shell命令行到主命令行過程中,要將主命令行的串口描述符傳到Shell處理過程中去,shell的輸入就通過這個串口來接收。這是整個移植過程中關鍵的一步,本例就是將sddl_console_fd傳入作為tShell的串口描述符。
2.另一個問題就是tShell的終端輸入輸出類型可能和主命令行設置得不一樣,開始ioctl (_LONG32)sddl_console_fd, FIOSETOPTIONS, OPT_CRMOD )將串口類型設置為CR_MOD模式,退出到主命令行后,主命令行不能響應Enter,但是Tab,字符輸入都可以,主命令行任務似乎也沒有死掉。后來在退出Shell命令行時又重新設置了串口模式,ioctl (sddl_console_fd, FIOSETOPTIONS, OPT_RAW),OPT_RAW模式,問題解決。
總結
以上是生活随笔為你收集整理的VxWorks下Shell调试总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义url是什么意思_applicat
- 下一篇: 苹果第一财季营收1172亿美元 净利润3