我要做一个vxworks的shell命令解析器 请问下shell是怎么响应i的 调用的是哪个库的什么函数啊 麻烦了
比如我想让发送指令 Oc AA DD 00 11 OC的作用是相当于内核收到i 命令,然后通过串口打印当前任务信息,请指导下 我看源代码好几天了 没什么结果 麻烦大家给点提示啊~~
7 个解决方案
#1
在target/src/ostool/shell目录下有很多*cmd.c, 比如shellCmd.c 和taskShellCmd.c。里面有各种命令的对应函数,比如taskCmd() 对应 i
#2
谢了 那请问下应用程序可以直接调用i()吗? 比如我想让发送指令 Oc AA DD 00 11 OC的作用是相当于内核收到i 命令,然后通过串口打印当前任务信息。 我该怎么实现呢 串口接收判断 if(符合协议格式) {i();} 直接这样写可以吗?我这样写了编译可以通过可是在shell里面不能运行啊 希望再给予点指点 谢谢了
#3
i是一个command alias,所以没有i()这个函数,经过解析,系统调用的是taskCmd函数,这是个静态函数,你也不能在应用程序中调用。
不过系统里还有一个函数
STATUS taskShow
(
TASK_ID tid, /* task ID */
int level /* 0 = summary, 1 = details, 2 = all tasks */
)
你可以在target shell下敲taskShow 0,255 看看结果,它的输出和i一样。
不过系统里还有一个函数
STATUS taskShow
(
TASK_ID tid, /* task ID */
int level /* 0 = summary, 1 = details, 2 = all tasks */
)
你可以在target shell下敲taskShow 0,255 看看结果,它的输出和i一样。
#4
嗯 十分感谢了 再请教个问题哈 我在shell下输入一个fff这样的字符 内核识别不了 返回找不到 请问下这个过程的处理函数在哪个库呢 比如输入help和输入一个乱七八糟的字符串sdhuisdu 处理结果我看到了 处理的过程和处理的函数在内核的哪个库呢 我才学vxworks没多久 挺想学好 但是不知道怎么学 有点迷茫 现在。。。公司给我的任务就是我说的这样的一个处理过程。能把qq号给我么 我因为想学习 可是自己乱窜 希望可以向你学习学习!谢谢了 真的万分感谢啦
#5
《VxWorks kernel shell user guide 6.9》里有下面的说明
VxWorks的kernel shell(与host shell对应,以前叫target shell,就是从串口看到的那个shell)有两个interpreter,一个是C语言的解释器,一个是命令解释器。
当我们在config.h定义了下面两个宏后,
#define INCLUDE_SHELL_INTERP_CMD
#define INCLUDE_SHELL_INTERP_C
就可以在kernel shell下*的切换解释器。
-> cmd
[vxWorks]# c
c(): task 0x1ce0070 is not stopped.
[vxWorks]# C
->
这两个解释器对应的文件就是target/src/ostool/shell/shellInterpC.c 和shellInterpCmd.c. 一般默认条件下使用的是C语言解释器shellInterpC.c。
这个文件包含了shellInterpCGram.c(做语法分析)和shellInterpCLexer.c(做词法分析).
我不懂bison和flex,所以我看这些看的很头大。反正知道shellInterpC.c中的cInterpParse函数做的解析就好了。它就是你要找的这个过程的处理函数。
另外,还是这篇文档《VxWorks kernel shell user guide 6.9》里,说明了如何增加用户自定义的命令,可能对你有帮助。你可以跑跑target/src/demo/shell/tutorialShellCmd.c 这个例子看看。
VxWorks的kernel shell(与host shell对应,以前叫target shell,就是从串口看到的那个shell)有两个interpreter,一个是C语言的解释器,一个是命令解释器。
当我们在config.h定义了下面两个宏后,
#define INCLUDE_SHELL_INTERP_CMD
#define INCLUDE_SHELL_INTERP_C
就可以在kernel shell下*的切换解释器。
-> cmd
[vxWorks]# c
c(): task 0x1ce0070 is not stopped.
[vxWorks]# C
->
这两个解释器对应的文件就是target/src/ostool/shell/shellInterpC.c 和shellInterpCmd.c. 一般默认条件下使用的是C语言解释器shellInterpC.c。
这个文件包含了shellInterpCGram.c(做语法分析)和shellInterpCLexer.c(做词法分析).
我不懂bison和flex,所以我看这些看的很头大。反正知道shellInterpC.c中的cInterpParse函数做的解析就好了。它就是你要找的这个过程的处理函数。
另外,还是这篇文档《VxWorks kernel shell user guide 6.9》里,说明了如何增加用户自定义的命令,可能对你有帮助。你可以跑跑target/src/demo/shell/tutorialShellCmd.c 这个例子看看。
#6
嗯啊 谢谢啦 我好好看看这部分。。。真的十分感谢!!
#7
额 大哥 我用的是vxworks5.5 tornado是2.2的 你说的这些文件target/src/ostool/shell/shellInterpC.c 和shellInterpCmd.c. 一般默认条件下使用的是C语言解释器shellInterpC.c。这些文件都没有 我的ostool下直接是shell.c和shell.yacc这些 没有你说的这个啊 能把你qq给我吗?方便询问 谢谢啦
#1
在target/src/ostool/shell目录下有很多*cmd.c, 比如shellCmd.c 和taskShellCmd.c。里面有各种命令的对应函数,比如taskCmd() 对应 i
#2
谢了 那请问下应用程序可以直接调用i()吗? 比如我想让发送指令 Oc AA DD 00 11 OC的作用是相当于内核收到i 命令,然后通过串口打印当前任务信息。 我该怎么实现呢 串口接收判断 if(符合协议格式) {i();} 直接这样写可以吗?我这样写了编译可以通过可是在shell里面不能运行啊 希望再给予点指点 谢谢了
#3
i是一个command alias,所以没有i()这个函数,经过解析,系统调用的是taskCmd函数,这是个静态函数,你也不能在应用程序中调用。
不过系统里还有一个函数
STATUS taskShow
(
TASK_ID tid, /* task ID */
int level /* 0 = summary, 1 = details, 2 = all tasks */
)
你可以在target shell下敲taskShow 0,255 看看结果,它的输出和i一样。
不过系统里还有一个函数
STATUS taskShow
(
TASK_ID tid, /* task ID */
int level /* 0 = summary, 1 = details, 2 = all tasks */
)
你可以在target shell下敲taskShow 0,255 看看结果,它的输出和i一样。
#4
嗯 十分感谢了 再请教个问题哈 我在shell下输入一个fff这样的字符 内核识别不了 返回找不到 请问下这个过程的处理函数在哪个库呢 比如输入help和输入一个乱七八糟的字符串sdhuisdu 处理结果我看到了 处理的过程和处理的函数在内核的哪个库呢 我才学vxworks没多久 挺想学好 但是不知道怎么学 有点迷茫 现在。。。公司给我的任务就是我说的这样的一个处理过程。能把qq号给我么 我因为想学习 可是自己乱窜 希望可以向你学习学习!谢谢了 真的万分感谢啦
#5
《VxWorks kernel shell user guide 6.9》里有下面的说明
VxWorks的kernel shell(与host shell对应,以前叫target shell,就是从串口看到的那个shell)有两个interpreter,一个是C语言的解释器,一个是命令解释器。
当我们在config.h定义了下面两个宏后,
#define INCLUDE_SHELL_INTERP_CMD
#define INCLUDE_SHELL_INTERP_C
就可以在kernel shell下*的切换解释器。
-> cmd
[vxWorks]# c
c(): task 0x1ce0070 is not stopped.
[vxWorks]# C
->
这两个解释器对应的文件就是target/src/ostool/shell/shellInterpC.c 和shellInterpCmd.c. 一般默认条件下使用的是C语言解释器shellInterpC.c。
这个文件包含了shellInterpCGram.c(做语法分析)和shellInterpCLexer.c(做词法分析).
我不懂bison和flex,所以我看这些看的很头大。反正知道shellInterpC.c中的cInterpParse函数做的解析就好了。它就是你要找的这个过程的处理函数。
另外,还是这篇文档《VxWorks kernel shell user guide 6.9》里,说明了如何增加用户自定义的命令,可能对你有帮助。你可以跑跑target/src/demo/shell/tutorialShellCmd.c 这个例子看看。
VxWorks的kernel shell(与host shell对应,以前叫target shell,就是从串口看到的那个shell)有两个interpreter,一个是C语言的解释器,一个是命令解释器。
当我们在config.h定义了下面两个宏后,
#define INCLUDE_SHELL_INTERP_CMD
#define INCLUDE_SHELL_INTERP_C
就可以在kernel shell下*的切换解释器。
-> cmd
[vxWorks]# c
c(): task 0x1ce0070 is not stopped.
[vxWorks]# C
->
这两个解释器对应的文件就是target/src/ostool/shell/shellInterpC.c 和shellInterpCmd.c. 一般默认条件下使用的是C语言解释器shellInterpC.c。
这个文件包含了shellInterpCGram.c(做语法分析)和shellInterpCLexer.c(做词法分析).
我不懂bison和flex,所以我看这些看的很头大。反正知道shellInterpC.c中的cInterpParse函数做的解析就好了。它就是你要找的这个过程的处理函数。
另外,还是这篇文档《VxWorks kernel shell user guide 6.9》里,说明了如何增加用户自定义的命令,可能对你有帮助。你可以跑跑target/src/demo/shell/tutorialShellCmd.c 这个例子看看。
#6
嗯啊 谢谢啦 我好好看看这部分。。。真的十分感谢!!
#7
额 大哥 我用的是vxworks5.5 tornado是2.2的 你说的这些文件target/src/ostool/shell/shellInterpC.c 和shellInterpCmd.c. 一般默认条件下使用的是C语言解释器shellInterpC.c。这些文件都没有 我的ostool下直接是shell.c和shell.yacc这些 没有你说的这个啊 能把你qq给我吗?方便询问 谢谢啦