如转发 请标明出处!
Wind River提供了一个叫做System Viewer的工具 (VxWorks5时叫做WindView),这就是一个嵌入式软件的逻辑分析器,能够将复杂的Target活动可视化,可用于故障定位
OS、App和HardWare之间的交互通常在限定的时间内发生,其分辨率为微秒或更高。而RTOS领域常用的调试工具,如源代码级调试器,只提供静态信息
有了System Viewer,就可以记录正在运行的Target上的活动,它可以高度配置要查看的数据类型和系统信息,然后这些数据还可以保存下来供后续分析
- 可视化多核系统行为,例如,识别CPU affinity问题
- 检测竞争条件、死锁、CPU饥饿以及其它与任务交互相关的问题
- 确定应用程序响应能力和性能
- 查看App的循环模式
- 保存数据以进行延迟分析
在WorkBench3.x VxWorks6.x上一直没有操作成功,捕获的数据总是不完整
那就使用WorkBench4 VxWorks7来试试吧
首先在VSB中包含System Viewer组件
随便写个任务通信的例子
代码语言:javascript复制#include <taskLib.h>
#include <semLib.h>
#include <sysLib.h>
static SEM_ID mySem;
int myCount = 0;
static void task1()
{
while(1)
{
semTake(mySem, WAIT_FOREVER);
myCount ;
}
}
static void task2()
{
while(1)
{
semGive(mySem);
taskDelay(sysClkRateGet());
}
}
void test()
{
mySem = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
taskSpawn("tTask1",200,0,2000,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
taskSpawn("tTask2",200,0,2000,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
}
启动Target,连接Connection,执行例子程序
找到Analysis actions,点击Launch System Viewer
在弹出的System Viewer Configuration页面里,根据实际需求定制Event Logging Level,例如Enable All
根据实际需求定制Upload Mode/Buffer Size,建议将Buffer Size改大一些,并选中Use a circular buffer
点击Apply the current configuration to the target
启动System Viewer logging
等待一会儿,观察到buffer的记录
点击Stop,收集到的.wvr文件自动上传并打开了
在Event Graph窗口里,通过Filter或Hide功能,将不关心的Task去掉
在上部的Overview窗口里,通过鼠标拖动,选择有事件的区域,并通过Zoom按钮,调整可视区域
双击某个事件,就可以看到它的属性
或者在Event Table窗口里,可以看到所有事件的列表
事件的属性里,包含了相应Object的ID,可以在Filter中针对这个信息进行定制。例如,只Include某一个Object,这样就可以很清晰地看到任务之间的交互、状态变换等情况了
非常强大的一个工具,可惜我用的不多...
我是泰山 专注VX好多年!
一起学习 共同进步!