3651|4

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:应用模块自动加载出现问题 [复制链接]

usrAppInit函数里增加自动模块加载:

int status = ERROR ;
int fd = ERROR ;
MODULE_ID hModule ;
FUNCPTR taskAppEntry = NULL ;
SYM_TYPE * pType ;

        /* 打开第一个可执行文件位于ram0 */
        fd = open("ram0/myapp.out", O_RDONLY, 0);
        if(fd == ERROR) {
                printf("Can not open application program file. \n\r") ;
                return(ERROR);
        } else {
                printf("Application program file opened. \n\r") ;
        }
       
        /* 加载模块 */
        printf("Autoload application model...\n");
        if((hModule = loadModule(fd, LOAD_ALL_SYMBOLS)) == NULL) {
                close(fd);
                printf("LoadModule for application is error = 0x%x. \n\r", errno);
                return(ERROR);
        }
        close(fd);

        /* 查找初始化函数的符号 */
        status = symFindByName(sysSymTbl, "myInit_Task", (char **)&taskAppEntry, pType);
        if(status == ERROR) {
                printf("symFindByName error = %d. \n\r", errno);
                return(ERROR);
        } else {
                printf("taskAppEntry = 0x%x, type = %d \n\r", (int)taskAppEntry, (int)*pType);
        }
        return(OK);
       
        /* 激活初始化任务 */
        status = taskSpawn("myInit", 100, 0, 30000, taskAppEntry, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        if(status == ERROR) {
                printf("taskSpawn error = %d. \n\r", errno);
                return(ERROR);
        }
       
        printf("\n\r");
        return(OK);

运行到status = symFindByName(sysSymTbl, "myInit_Task", (char **)&taskAppEntry, pType);就出错,tRootTask被挂起,弹出

data access
Exception current instruction address: 0x00026974
Machine Status Register: 0x00009030
Data Access Register: 0x05ed5754
Condition Register: 0x40000084
Data storage interrupt Register: 0x0000000b
Task: 0x1ed57c0 "tRootTask"

在VXWORKS组件中已经包含独立符号表。奇怪的是上述函数在SHELL里面分别逐个运行则不会有任何错误。POWERPC860平台

请高手指点。

最新回复

至于host shell下提示undefined symbol的问题,是符号表同步的问题 程序中直接load的.out文件,符号表加载到了vxworks系统中。但tornado上的host shell可不知道你已经下载了,host shell的符号表是位于host端。 可以在vxworks中增加主从机符号表同步组件,然后在target server连接的时候,在core file项中选上同步主从机符号表选项。这样主从机的符号表可以同步起来。  详情 回复 发表于 2009-1-14 22:53
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
loadModule(fd, LOAD_GLOBAL_SYMBOLS|LOAD_ALL_SYMBOLS );
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
加个问题:我也是使用类似的方法加载用户模块,加载成功,但是在tornado shell里面调用应用模块里的函数时,提示undefined symbol?何解?
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

4
 
应该是这句有问题吧,都没有申请空间,  FUNCPTR taskAppEntry = NULL
shell里敲的时候肯定不会出问题了
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
至于host shell下提示undefined symbol的问题,是符号表同步的问题
程序中直接load的.out文件,符号表加载到了vxworks系统中。但tornado上的host shell可不知道你已经下载了,host shell的符号表是位于host端。
可以在vxworks中增加主从机符号表同步组件,然后在target server连接的时候,在core file项中选上同步主从机符号表选项。这样主从机的符号表可以同步起来。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表