如何把自己的函数注册到shell中呢?然后在shell下直接用命令执行
在符号表里能找到的函数,shell下都可以调用。也就是说,只要你的程序配置了shell和符号表,就可以了。
恩,这个我清楚
这两天查了下,在生成的bootable工程里面有个symtbl.c文件,它里面有个表,记录的就是系统函数,然后在usrconfig.c里面把它们注册到系统符号表里。
相关代码如下
sysSymTbl = symTblCreate (SYM_TBL_HASH_SIZE_LOG2, TRUE, memSysPartId);
printf ("\nAdding %ld symbols for standalone.\n", standTblSize);
/* fill in from built in table*/
for (ix = 0; (ULONG) ix < standTblSize; ix++)
#if ((CPU_FAMILY == ARM) && ARM_THUMB)
thumbSymTblAdd (sysSymTbl, &(standTbl[ix]));
#else
symTblAdd (sysSymTbl, &(standTbl[ix]));
#endif /* CPU_FAMILY == ARM */
现在的问题是我想在我的程序里面实现类似的功能,但是thumbSymTblAdd 函数总是找不到,可以编译,但是没法下载,找不到。不知道各位兄台知不知道这个函数的出处或头文件。
其实,有个最简单的方法,就是在用户代码入口的那个.C里,应该是 usrApp.c里,任意这样写一个函数就可以满足你的要求.
void forShellDispatch()
{
}
其实,有个最简单的方法,就是在用户代码入口的那个.C里,应该是 usrApp.c里,任意这样写一个函数就可以满足你的要求.
void forShellDispatch()
{
funcA(); /*yourFuncNeedDispatchedOnTheShell*/
....
funcC();
}
//不好意思,上面一不小心点了,就发出去了
这个我知道,当你重新生成vxworks时,它会自动加到符号表里面去
但是我是想在自己的工程里面实现这些代码,在usrinitapp函数里面是找不到这些
函数头的。
上面那位兄台提到的vxLib.c,我怎么没在里面找到啊,是不是我找错了?
搞定了,非常感谢
暂不结贴哈
现在我又发现个新问题,就是通过这种方法注册到tshell后,用telnet登陆,可以执行注册后的命令,但是不能直接用函数名执行,而在本地shell中可以直接执行函数名却不能执行注册后的命令。比如,程序中的函数是GetPacketNum(),注册的命令为GPN,在telnet下只可以执行GPN,而在本地shell下只能执行GetPacketNum,执行GPN就没反应,说没定义,请问为什么??
貌似符号表同步问题。重新全部编译,选择符号表同步再试试看。