|
简单说下freeRTOS用systemview继续trace调试的方法,软件免费,使用jlink就可以了。希望大家继续讨论、完善。
http://www.amobbs.com/forum.php? ... p;extra=#pid9726444
在这个帖子里得到网友的帮助,M0基本跑起来了,但还有问题继续完善。先总结一下。
一、M3的核很简单
1、先准备好能跑FREERTOS的工程。不是本文重点就不多说了,版本是8.2.3,我使用8.0.1编译错误,换成8.2.3正常;
2、下载systemview,安装。目前是V2.42。
https://www.segger.com/downloads/jlink
3、工程中建一个目录,比如trace。systemview安装目录下有个src目录,将里面用到的文件拷贝到trace目录,并添加的工程里;
4、main文件增加包含 #include "SEGGER_SYSVIEW.h",main函数创建任务前调用SEGGER_SYSVIEW_Conf();
5、freeRTOSconfig.h后加 #include "SEGGER_SYSVIEW_FreeRTOS.h"
6、freeRTOSconfig.h中#define configMAX_PRIORITIES (UBaseType_t) ( 8 ) 改为#define configMAX_PRIORITIES ( 8 ),不改的话编译不能通过。这里还需要继续研究为什么;
7、编译无错误,就可以开始debug,全速跑;
8、开systemview点击绿色三角,start recording;
二、M0的核很稍复杂(目前还不正常,跑一会断片,还需继续研究)
过程如上,在SEGGER_SYSVIEW_Config_FreeRTOS.c文件里增加如下函数
U32 SEGGER_SYSVIEW_X_GetTimestamp(void) {
U32 Cycles = 0;
U32 TickCount;
U32 CyclesPerTick;
//
// Get the cycles of the current system tick.
// SysTick is down-counting, subtract the current value from the number of cycles per tick.
//
CyclesPerTick = SysTick->LOAD + 1;
Cycles = (CyclesPerTick - SysTick->VAL);
//
// Get the system tick count.
//
TickCount = SEGGER_SYSVIEW_TickCnt;
//
// If a SysTick interrupt is pending, re-read timer and adjust result
//
if ( NVIC_GetPendingIRQ(SysTick_IRQn) != 0)
{
TickCount++;
}
Cycles += TickCount * CyclesPerTick;
return Cycles;
}
systick中断里(port.c文件内)增加
SEGGER_SYSVIEW_TickCnt++;
不要忘了加SEGGER_SYSVIEW_TickCnt定义。
SEGGER_SYSVIEW_Config_FreeRTOS.c开始也要加
extern unsigned int SEGGER_SYSVIEW_TickCnt;
还需继续完善。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|