C语言解器和命令解释器
内核shell包含2个解释器,C语言解释器和命令解释器。
shell前面为“->”表示C语言解释器,前面为“[vxWorks *]#”表示命令解释器。
C语言解释器可以通过函数名调用程序中的函数(这些函数位于系统符号表中,系统符号表解释见另一篇博文),所以可以通过它来直接在shell中调用某个函数进行调试。比如输入help,会显示出帮助信息,结尾还会输出value = 1 = 0x1,其实help是内核中定义的一个help函数(查看系统符号表会发现有help函数),在C语言解释器输入help会调用内核的help函数,最后函数的返回值为1。shell下常见的调试函数(如b、tt等)就在dbgLib库中定义,其它命令类似。
内核shell和主机shell的区别
之所以叫内核shell,因为还有一个主机shell,即电脑workbench上运行的host shell,需要加以区分。
两个shell的不同点就是一个运行在电脑上,一个运行在开发板上,所以host shell使用主机资源(如lkup( ), ld( )等需要申请内存的命令),而内核shell使用开发板内核资源。电脑上的主机shell比开发板内核shell支持更多的解释器,比如支持TCL解释器(前面为“tcl>”)、gdb解释器(前面为“(gdb)”)等。总之各有各的好处,都可以使用。
还有当在shell中输入x = "hello there"时shell会动态申请内存,而不会自动释放,所以为了防止内存泄漏,最好在用完了之后free (x)一下。即使输入一个没有和变量关联的字符串,也会申请内存并且不会释放。如printf (“hello there”),这时可以用strFree()函数释放。
如果shell卡死可以按ctrl+c重启。
解释器的转换:
可以通过输入下列字符在解释器之间进行切换(需要支持该解释器):
cmd:切换到命令解释器
C:切换到C语言解释器
?:切换到tcl解释器
gdb:切换到gdb解释器
当然也可以不切换直接调用,比如:
-> cmd emacs:C解释器中调用命令解释器
[vxWorks *]# C moduleShow:命令解释器中调用C解释器