Keil下没有ucos的调试插件,调试时抓数据结构比较麻烦,但是又不习惯用IAR.最近刚好有时间研究了一下ARM提供的高级仿真接口AGSI,并用QT平台写了一个简单的ucos插件,目前只提供了任务管理器的功能,可实时监视目前系统中维护的任务列表,包括各个任务的名称,CPU的使用率,任务的运行状态,优先级,剩余挂起时间,堆栈大小,以用堆栈,切换次数.先把插件运行图贴出来哈.
目前插件还有一点小bug,如果有感兴趣的稍后可以把插件和使用方法传上来,大家也可以帮我测测问题,并提出宝贵意见哈! 使用方法如下: (插件在附件word中)
插件的调试步骤如下:
将dll.zip文件解压并复制到Keil安装目录/ARM/BIN文件夹下,如下图1所示:
图1 附件在这里 - Keil安装目录下找到TOOLS.INI文件,如下图2所示:
图2 打开文件,找到[ARM]字段,添加如下图3信息: 图3 - 在软件仿真接口或硬件调试接口配置界面加入参数-dQtArm,如下图4所示:
图4 4 要使uCOS可调试,需添加OS_DBG.c文件,并在os_cfg文件中将OS_DEBUG_EN使能,如图5. 图5 并在OS_DBG.C中添加如下代码: OS_COMPILER_OPT INT16U const OSTCBOffPrio = offsetof(OS_TCB,OSTCBPrio); /*Offset Of Task Prio*/ OS_COMPILER_OPT INT16U const OSTCBOffState = offsetof(OS_TCB,OSTCBStat); /*Offset Of Task Task State*/ OS_COMPILER_OPT INT16U const OSTCBOffStatPend = offsetof(OS_TCB,OSTCBStatPend); /*Pending State*/ OS_COMPILER_OPT INT16U const OSTCBOffStatDly = offsetof(OS_TCB,OSTCBDly); /*Pending Time Left*/ #if OS_TASK_PROFILE_EN > 0u OS_COMPILER_OPT INT16U const OSTCBOffCyclesTot = offsetof(OS_TCB,OSTCBCyclesTot); /* Total number of clock cycles the task has been running*/ OS_COMPILER_OPT INT16U const OSTCBOffCtxSwCtr = offsetof(OS_TCB,OSTCBCtxSwCtr); /* Number of time the task was switched in*/ OS_COMPILER_OPT INT16U const OSTCBOffStkUsed = offsetof(OS_TCB,OSTCBStkUsed); /*Offset Of Task Stack Size*/ #endif #if OS_TASK_CREATE_EXT_EN > 0u OS_COMPILER_OPT INT16U const OSTCBOffStkSize = offsetof(OS_TCB,OSTCBStkSize); /*Offset Of Task Stack Size*/ #endif #if (OS_EVENT_EN) OS_COMPILER_OPT INT16U const OSTCBOffEventPtr = offsetof(OS_TCB,OSTCBEventPtr); /*Offset Of Task Event Pointer*/ #endif #if OS_TASK_NAME_EN > 0u OS_COMPILER_OPT INT16U const OSTCBOffName = offsetof(OS_TCB,OSTCBTaskName); #endif 也可以直接下载文件
全部资料51hei下载地址:
演示视频.zip
(3.73 MB, 下载次数: 20)
|