vxworks之符号表_vxworks sym-程序员宅基地

技术标签: server  编译器  file  工具  descriptor  Vxworks  任务  

符号表初始化

          符号表用于建立符号名称、类型和值之间的关系。其中,名称为null结尾的任意字符串;类型为标识各种符号的整数;值为一个字符指针。符号表主要用来作为目标模块加载的基础,但在需要名称和值关联的任何时候都看使用。
          运行系统中一般存在两个符号表结构sysSymTbl和statSymTbl。sysSymTbl为目标机的系统符号表,通过程序或tShell动态加载的目标模块的符号模块的符号都添加到该符号表中,sysSymTbl和statSymTbl两个标识本身页包含在该系统符号表中。statSymTbl中包含errno的信息,若相在tShell中使用printErrno命令,就必须包含该符号表。
         主机的Target Server只使用一个符号表,看通过全局变量tgtSymTbl访问。
         vxWorks中符号表函数库symLib,提供用于符号表操作的相关函数。系统符号表允许同名冲突,同名符号回加入符号表而不报错,当引用符号时,系统缺省使用symFindByName查找,所以最新加入的符号总会先找到,代替老符号完成引用。同名符号的存在还带来另一个问题,不能确保查找到的符号是自己加载模块的,即不能保证group号。主机symlib库中函数用于维护主机符号表tgtSymTbl。
          vxWorks的符号表与编译器的符号表吧同,vxWorks的符号表时动态存在系统中的,由symLib提供的函数进行维护,在运行过程中可以增加和删除符号,主要用于目标模块的动态加载,与目标模块的格式无关。而编译器中的符号表时静态的,由编译器和连接器在建立程序映像时生成并使用,主要用于符号的静态解析,帮助建立映像,它们的格式和目标类型有关。交叉调试器中源代码调试,页时由静态符号表支持的,这种符号表占用很大的程序映像空间,当程序发布时,可以去掉(不使用 -g 选项)。
        vxWorks需要主机工具在映像生成时完成一些准备工作来建立系统符号表,sysSymTbl和statSymTbl对应两个主机工具makeSymTbl.exe和makeStatTbl.exe,用于生成符号数组以编译进入程序映像。工具makeSymTbl.exe用于创建包含SYMBOL类型数组的symTbl.c文件,包含目标模块中所有全局符号的名称、地址和类型,该全局数组名称为standTbl,其大小为standTblSize,存放在程序映像的data段中。工具makeStatTbl.exe用于创建状态代码SYMBOL数组,包含一些头文件中定义的所有状态代码的名称和值,所有状态代码以“S-”开头,一般库头文件中都有这样的定义。,该全局数组名成为statTbl,其大小为statTblSize,statSymTbl主要由printErrno函数使用,也可以由应用程序使用,输出确定意义的状态信息,存放在程序映像的data段中。
         符号表初始方式有build-in和downloaded两种方式,使用内建符号表时,符号时Vxworks程序映像的一部分;下载符号表则和VxWorks映像分离,由目标机单独下载Sym文件获得符号。若使用下载符号表,使用主机工具xsym,生成符号模块文件VxWorks.sym,该文件和普通目标模块一样,只是没有data和bss段,下载到目标机后,和普通目标模块一样动态加载,模块中的符号会添加到系统符号表。
         目标机符号表时完成动态加载、连接,以及调试的辅助机制,映像有没有符号表都不影响程序正常运行,调试时,只要不从目标机上动态加载目标模块,程序映像符号都静态连接解析,目标机上也可以没有符号,主机开发工具都使用主机符号表tgtSymTbl来完成交叉调试。
       符号表同步
         主机和目标机使用不同的符号表,在主机上使用的各种工具并不能访问目标机上所有的内容,工具都是通过主机上Target Server和目标机上Target Agent进行通信的,主机和目标机都不能直接访问对方的符号信息。主机和目标机都维护着自己的符号表,当添加符号时,将符号加入到其中一个表中,在wShell上添加的符号到了主机符号表,而tShell上添加的符号就到了目标机符号表中,缺省时两个表互不共享,可以通过添加符号表同步组件------INCLUDE_SYM_TBL_SYNC,这样符号会在主机和目标机之间福祉,两符号表会同步更新。
          主机和目标机使用不同的符号表,系统启动时两个符号表的内容是一样的,当动态加载目标模块后,两个符号表就不一致了,从wShell中加载目标模块后,却想从tShell引用该模块符号,或者从tShell加载后,想用主机工具调试该模块,因为wShell或tShell都看不见对方加载的模块,可能出现下面错误:
           Error:module contains undefined symbol
           Unresolved symbol
           Fatal Error: unresolvable symbol
         要解决此问题就需要使用符号表同步机制,Vxworks提供了symSyncLib库来完成符号表同步,系统运行中,从主机或目标机添加的符号都可以被对方看见,symSyncLib会在目标机创建同步任务tSymSyc,该任务被当作WTX工具与主机的Target Server相连,任务启动时,会立即同步符号表。如果不再需要同步符号表,可以手动将tSymSync悬挂起来,以提高目标机性能。
     
        错误状态
          若VxWorks库函数执行出现问题,函数会返回ERROR值,并设置错误状态表示具体的原因和位置。
          错误状态库errnoLib用于获取和设置任务和中断的错误状态值errno,VxWorks每个任务和中断都有自己的errno,任务的errno存放在TCB中,为任务私有,中断的errno存放在中断栈中,只要字啊中断处理函数中errno都有效。
         VxWorks的errno值由4byte构成,高字表明发生错误的库,各库对应的值在“taget/h/vwModNum.h”中定义,低字表示该库发生的具体错误,在相应库的头文件中定义。约定VxWorks系统模块使用高字值,范围为1~500,其他值可以由应用模块使用,对低字值没有规定。
         usrLib提供printErrno函数来显示具体错误信息,printErrno根据输入的errno值,在statSymTbl中查找到对应的错误信息,并显示在标准输出上。
         ----> printErrno 0xd0003
         0xd0003 = S_iosLib_INVALID_FILE_DESCRIPTOR
         "S_"表示状态,iosLib为发生错误的库名称,INVALID_FILE_DESCRIPTOR表示该库具体的错误。
         若想在tShell或程序中调用printErrno来显示错误信息,程序映像中需包含错误代码组件--- INCLUDE_STAT_SYM_TBL ,以在目标机建立statSymTbl。‘
         如果不能使用printErrno,也可以手动查找头文件得到错误信息,比如“d0003”,先在vwModNum.h查找“d”对应的库,“d”换算成十进制“13”,查到M_iosLib:              #define M_iosLib        (13 << 16)
         再到iosLib库自己的头文件iosLib.h中查找具体错误,其中“0003”对应的宏定义为:
           # define S_iosLib_INVALID_FILE_DESCRIPTOR     (M_iosLIb | 3)
          这个宏定义名就是用户要知道的错误信息。

form:http://hi.baidu.com/yinux/blog/item/8058a21e41c5301e4134178f.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bianhonglei/article/details/4503642

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文