Workbench3.0-vxworks6.6仿真测试和调试指南

    VxWorks5.5只能创建静态库(.a),VxWorks6.0之后增加了动态链接库(.so)的功能,方便了多进程使用动态库。本文继承win32和linux编程入门的一贯风格,通过简单的动态库生成步骤,并编写RTP程序进行测试,让您初步认识VxWorks6.6强大的功能,同时也让我们注意到VxWorks6.6比VxWorks5.5在使用要复杂很多。我相信通过这些简单的编程知识点,您基本掌握了VxWorks6.6调试技巧,让我们后来者不必在调试过程中去探索黑暗。本文基本使用图形来描述操作流程:一副图低得上千言万语了。

VxWorks6.0之后版本新增引入了具有完全保护功能的实时进程Real Time Process简称 RTP,首次完美的解决了内核保护与实时性和确定性之间的矛盾。用户可以根据需要动态的创建/删除 RTP实时保护进程或仅将一部分程序运行在 RTP实时保护进程中。RTP实时进程可以随时动态加载运行外部程序。每个RTP进程完全独立,程序在 RTP进程内部出现的任何错误都被限制在RTP进程内部,删除RTP实时进程时自动释放所有资源。RTP与其他多进程OS不同的是,VxWorks的RTP实时进程具有完全的静态确定性,提供保护功能的同时提供最高的实时响应确定性和快速性,并且可以提供完全的存储错误检测和存储报告功能。动态链接库和共享数据区功能也同时提供。RTP实时保护进程与VWorks原有的更高性能实时任务一起构成保护性和实时性兼备的超级设备平台. 

动态库生成

1、选择工程工作路径

2、正常打开的初始界面

       一般情况下左下角出现相似的界面,说明您的VxWorks6.6系统基本安装正常。需要注意的是系统安装了Tornado2.2会与WorkBench3.0冲突,最好要把Tornado2.2卸掉,操作系统Win7不支持两者的安装。

3、创建动态库工程

4、动态库名称

5、编译选择

       这里我们选择diab工具编译,gnu编译工具在调试c++中的 Class类有点问题,具体原因我没有去研究。

6、其余默认,按完成即可

7、添加inc和src文件夹

       A、Inc包含demo.h和stdafx.h;

       B、src包含demo.cpp和stdafx.cpp。

[cpp]  view plain copy
  1. stdafx.h  
  2. // stdafx.h : include file for standard system include files,  
  3. //  or project specific include files that are used frequently, but  
  4. //      are changed infrequently  
  5. //  
  6.   
  7. #if !defined(AFX_STDAFX_H__E5CE9468_AAF9_46A6_979B_9C125F6E9D00__INCLUDED_)  
  8. #define AFX_STDAFX_H__E5CE9468_AAF9_46A6_979B_9C125F6E9D00__INCLUDED_  
  9.   
  10. #if _MSC_VER > 1000  
  11. #pragma once  
  12. #endif // _MSC_VER > 1000  
  13.   
  14. #define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers  
  15.   
  16. #include <stdio.h>  
  17.   
  18. // TODO: reference additional headers your program requires here  
  19.   
  20. //{{AFX_INSERT_LOCATION}}  
  21. // Microsoft Visual C++ will insert additional declarations immediately before the // previous line.  
  22.   
  23. #endif // !defined(AFX_STDAFX_H__E5CE9468_AAF9_46A6_979B_9C125F6E9D00__INCLUDED_)  
  24.   
  25. stdafx.cpp  
  26. // stdafx.cpp : source file that includes just the standard includes  
  27. //  libdemo.pch will be the pre-compiled header  
  28. //  stdafx.obj will contain the pre-compiled type information  
  29.   
  30. #include "stdafx.h"  
  31.   
  32. // TODO: reference any additional headers you need in STDAFX.H  
  33. // and not in this file  
  34.   
  35. demo.h  
  36. #ifndef _DEMO_H_  
  37. #define _DEMO_H_  
  38.   
  39. // The following ifdef block is the standard way of creating macros which make exporting   
  40. // from a DLL simpler. All files within this DLL are compiled with the AE_DEMO_EXPORTS  
  41. // symbol defined on the command line. this symbol should not be defined on any project  
  42. // that uses this DLL. This way any other project whose source files include this file see   
  43. // AE_DEMO_ENTRY functions as being imported from a DLL, wheras this DLL sees symbols  
  44. // defined with this macro as being exported.  
  45. #ifdef WIN32  
  46. #ifdef AE_DEMO_EXPORTS  
  47. #define AE_DEMO_ENTRY __declspec(dllexport)  
  48. #else  
  49. #define AE_DEMO_ENTRY __declspec(dllimport)  
  50. #endif  
  51. #else  
  52. #define AE_DEMO_ENTRY  
  53. #endif  
  54.   
  55. // This class is exported from the libdemo.dll  
  56. class AE_DEMO_ENTRY CTest   
  57. {  
  58. public:  
  59.     CTest();  
  60.     virtual ~CTest();  
  61. public:  
  62.     int Add(int a, int b);  
  63. protected:  
  64.     int m_nCount;  
  65. };  
  66.   
  67. extern AE_DEMO_ENTRY int nTest;  
  68.   
  69. AE_DEMO_ENTRY int fnTest();  
  70.   
  71. #endif // _DEMO_H_  
  72.   
  73. demo.cpp  
  74. #include "stdafx.h"  
  75. #include "demo.h"  
  76.   
  77. // This is an example of an exported variable  
  78. AE_DEMO_ENTRY int nTest = 0x64;  
  79.   
  80. // This is an example of an exported function.  
  81. AE_DEMO_ENTRY int fnTest()  
  82. {  
  83.     return 64;  
  84. }  
  85.   
  86. // This is the constructor of a class that has been exported.  
  87. // see demo.h for the class definition  
  88. CTest::CTest()  
  89. {   
  90. }  
  91.   
  92. CTest::~CTest()  
  93. {   
  94. }  
  95.   
  96. int CTest::Add(int a, int b)  
  97. {  
  98.     return (a + b);  
  99. }  

8、添加inc路径

9、刷新工程

       如图所示,按鼠标右键刷新工程,inc和src即可添加到工程中去。

10、编译工程

       从右键菜单中选择“build project”完成编译,把编译好的动态库 libdemo.so拷贝到

$(FEPHOME)/bin下,方便后面的使用。

       注意:FEPHOME环境编译=c:/openSUSE3000/fep中的斜杠是反的。

动态库调用

       VxWorks6.6调用比较麻烦,需要很多配置。

1、创建工程

2、编译选择

3、默认完成

4、编译属性

5、编译属性-linker

6、选中Create a dynamic executable

7、设置LIBPATH和LIBS

8、包含路径

       这里包含$(FEPHOME)/code/include,因为libdemo.h需要放在这里,它是一个隐式调用的方式。


 

以上设置好即可编译,编译方式如上比较简单。把编译好的动态库 testdemo.vxe拷贝到$(FEPHOME)/bin下,方便后面的使用。

9、启动仿真

10、调试

       因为动态链接库是给RTP使用的,我们只能选择Debug RTP On Target在目标机上运行。

11、设置运行程序路径

 

12、执行Debug

       执行上面的Debug按钮之后,将出现如下的画面。

13、F6单步执行

       调试可以按F6单步执行,右上角的工具栏上也有该功能项按钮。选择中间的Console控制台TA B栏,我们可以看到输出结果了。

14、执行后的仿真器

SHELL调用

1、首先看看仿真器的虚拟路径

2、在仿真器中执行testdemo.vxe

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1 TORNADO的调试工具 4 1.1 WINDSHELL 4 1.1.1 简介 4 1.1.2 功能键 5 1.1.3 特殊控制符 6 1.1.4 计算功能 6 1.1.5 环境变量 6 1.1.6 内置指令 6 1.2 BROWSE 17 1.2.1 内存查看 17 1.2.2 模块信息 17 1.2.3 堆栈使用率 18 1.2.4 CPU占有率 18 1.2.5 任务信息 19 1.2.6 中断向量表 19 1.2.7 实体查看 20 1.3 DEBUGGER 21 1.3.1 条件断点 21 1.3.2 代码显示 21 1.4 TARGET SERVER 21 1.4.1 使用串口调试 21 1.4.2 重定向 21 1.5 WINDVIEW 22 1.5.1 记录层次 22 1.5.2 记录数据存储方式 22 1.5.3 传送方式 22 1.5.4 数据分析 23 1.6 TRIGGER 23 1.7 TELNET 24 1.8 调试模式 24 1.8.1 任务调试模式下的多任务调试 26 1.8.2 系统调试模式下多任务的调试: 27 1.8.3 中断服务程序的调试 28 2 V2支撑的调试手段 28 2.1 各模块提供的函数 28 2.2 如何查看ERROR.LOG文件 29 2.2.1 定位到具体的出错行 31 3 V3支撑的调试手段 31 1.1. 进程调试 31 1.2. 查看所有进程信息:OSS_DBGGETALLUSEPCBINFO 31 1.3. 查看当前运行的进程信息 31 1.3.1. 进程断点设置:b 31 1.3.2. 当前进程运行信息:OSS_DbgGetCurPCBInfo 32 1.3.3. 当前进程的消息信息:OSS_DbgGetCurMsgInfo 32 1.3.4. 进程断点取消:bd 32 1.3.5. 恢复进程运行:tr 32 1.4. 内存观察 32 1.4.1. 消息队列堆积、阻塞观察:tw 32 1.4.2. 任务消息队列观察:OSS_DbgShowQueueCtl 33 1.4.3. 任务UB使用观察:OSS_DbgShowTaskUB 33 1.4.4. 进程使用UB情况:OSS_DbgShowProcUBInfo 34 1.4.5. UB的配置和当前状态:OSS_DbgMemUbUsePrn/ OSS_DbgShowUbPool 34 1.5. 通信和定时器状态观察 35 1.5.1. 通信状态显示OSS_DbgShowComm 35 1.5.2. 测试板间通信是否正常:OSS_DbgRudpPing 35 1.5.3. 单板上定时器的使用信息:OSS_DbgGetTimerInfo 36 1.5.4. 单板进程使用定时器的信息:OSS_DbgGetTimerInfoOfProc 36 1.6. 杂项观察 36 1.6.1. 异常发生后信息观察:OSS_DbgShowExcInfo 36 1.6.2. 堆栈使用率/运行时间统计:zte 36 1.6.3. 进程最近打印内容观察:ztecall/ ztemsg 36 1.6.4. 进程最近打印的1K内容和打印时间:zteprint 37

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值