日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VxWorks下Shell调试总结

發(fā)布時間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VxWorks下Shell调试总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
VxWorks?默認(rèn)提供一個shell,這個shell 的任務(wù)名為“tShell”優(yōu)先級.為1,通常情況下用來處理鍵盤輸入,終端調(diào)試等。我們要實現(xiàn)的是主命令行和Shell命令行間的切換,主要設(shè)計思想是通過主命令行創(chuàng)建tShell任務(wù),重定向其輸入、輸出。

主命令行中的串口初始化和定向如下:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。