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)
2017-11-18 22:38 上傳
點擊文件名下載附件
dll.zip
(11.02 MB, 下載次數: 21)
2017-11-19 06:35 上傳
點擊文件名下載附件
|