如何把自己的函数注册到shell中?

lipuman   2007-4-2 10:38 楼主
如何把自己的函数注册到shell中呢?然后在shell下直接用命令执行

回复评论 (10)

在符号表里能找到的函数,shell下都可以调用。也就是说,只要你的程序配置了shell和符号表,就可以了。
点赞  2007-4-2 11:27
恩,这个我清楚
这两天查了下,在生成的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 函数总是找不到,可以编译,但是没法下载,找不到。不知道各位兄台知不知道这个函数的出处或头文件。
点赞  2007-4-3 15:55
vxLib.c
点赞  2007-4-3 16:29
其实,有个最简单的方法,就是在用户代码入口的那个.C里,应该是 usrApp.c里,任意这样写一个函数就可以满足你的要求.

void forShellDispatch()
{

}
点赞  2007-4-4 22:58
其实,有个最简单的方法,就是在用户代码入口的那个.C里,应该是 usrApp.c里,任意这样写一个函数就可以满足你的要求.

void forShellDispatch()
{
     funcA(); /*yourFuncNeedDispatchedOnTheShell*/
     ....
     funcC();
}

//不好意思,上面一不小心点了,就发出去了
点赞  2007-4-4 23:00
这个我知道,当你重新生成vxworks时,它会自动加到符号表里面去
但是我是想在自己的工程里面实现这些代码,在usrinitapp函数里面是找不到这些
函数头的。
上面那位兄台提到的vxLib.c,我怎么没在里面找到啊,是不是我找错了?
点赞  2007-4-5 18:05
你买的vxworks,没有源码。安装源码。
点赞  2007-4-5 19:04
搞定了,非常感谢
暂不结贴哈
现在我又发现个新问题,就是通过这种方法注册到tshell后,用telnet登陆,可以执行注册后的命令,但是不能直接用函数名执行,而在本地shell中可以直接执行函数名却不能执行注册后的命令。比如,程序中的函数是GetPacketNum(),注册的命令为GPN,在telnet下只可以执行GPN,而在本地shell下只能执行GetPacketNum,执行GPN就没反应,说没定义,请问为什么??
点赞  2007-4-6 16:49
貌似符号表同步问题。重新全部编译,选择符号表同步再试试看。
点赞  2007-4-6 17:17
好的,谢谢
点赞  2007-4-9 22:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复