搜索
bottom↓
回复: 18

简单说下freeRTOS用systemview继续trace调试的方法

[复制链接]

出0入0汤圆

发表于 2017-4-6 10:23:03 | 显示全部楼层 |阅读模式
简单说下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周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2017-4-6 10:25:05 | 显示全部楼层
systemview安装目录内有详细文档可以参考。
大伙一起努力,让M0核能完美跑起来。

出0入0汤圆

发表于 2017-4-6 11:13:20 | 显示全部楼层
不错。顶一下。

出0入8汤圆

发表于 2017-4-6 11:20:44 | 显示全部楼层
  6、freeRTOSconfig.h中#define configMAX_PRIORITIES       (UBaseType_t) ( 8 ) 改为#define configMAX_PRIORITIES       ( 8 ),不改的话编译不能通过。这里还需要继续研究为什么;
--------------------------------------
我来猜一下前提条件:UBaseType_t 是用 typedef 定义的。

条件成立的话,那么原因如下:
- typedef 这货要编译器来解释,
- 宏定义,是由预处理器来解释的,
- 预处理阶段,预处理器,并不认识 UBaseType_t 是什么东东。

出0入0汤圆

发表于 2017-4-6 11:42:24 | 显示全部楼层
非 freeRTOS 支持 systemview的trace调试吗?

出0入0汤圆

发表于 2017-4-6 11:47:50 | 显示全部楼层
去年就出了,一直没时间用上,刚好想弄

出0入8汤圆

发表于 2017-4-6 11:57:11 | 显示全部楼层
ljt80158015 发表于 2017-4-6 11:42
非 freeRTOS 支持 systemview的trace调试吗?

请允许不明真相的我,来现抄一段:Can be adapted to other RTOS using a fully documented API
更多信息,戳这里「https://www.segger.com/systemview.html

出0入0汤圆

发表于 2017-4-6 12:45:45 来自手机 | 显示全部楼层
我就直接RTT,一样跑得欢

出0入0汤圆

发表于 2017-4-6 13:01:58 来自手机 | 显示全部楼层
好。办法越来越多

出0入0汤圆

发表于 2017-4-6 21:19:21 | 显示全部楼层

SEGGER_SYSVIEW_Start 要自己在main函数中调用吗
我的不调这个函数在SEGGER SystemView 软件中就没反应

SystemView  Start的时候会发命令来调用这个函数的,不知道为什么不行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出100入101汤圆

发表于 2017-4-7 09:29:59 | 显示全部楼层
systemview,该调试方式有啥好处?

出0入0汤圆

 楼主| 发表于 2017-4-7 13:08:41 | 显示全部楼层
security 发表于 2017-4-6 11:20
6、freeRTOSconfig.h中#define configMAX_PRIORITIES       (UBaseType_t) ( 8 ) 改为#define configMAX_ ...

在portmacro.h中定义的
typedef unsigned long UBaseType_t;

如果FreeRTOSConfig.h中包含portmacro.h就不会报错了。

出0入0汤圆

 楼主| 发表于 2017-4-7 13:11:12 | 显示全部楼层
rootxie 发表于 2017-4-6 12:45
我就直接RTT,一样跑得欢

RTT是输出、记录数据的。

这个可以直观看到各个任务运行的时间。

看我这个帖子里的图。

http://www.amobbs.com/forum.php? ... p;extra=#pid9726444

出0入0汤圆

发表于 2017-4-7 13:12:43 来自手机 | 显示全部楼层
segger工具越来越丰富

出0入0汤圆

 楼主| 发表于 2017-4-7 13:12:48 | 显示全部楼层
dreambox 发表于 2017-4-6 21:19
SEGGER_SYSVIEW_Start 要自己在main函数中调用吗
我的不调这个函数在SEGGER SystemView 软件中就没反应

我没有调用

debug的时候全速跑用。

出0入0汤圆

 楼主| 发表于 2017-4-7 13:13:54 | 显示全部楼层
fengyunyu 发表于 2017-4-7 09:29
systemview,该调试方式有啥好处?

可以直观看到各个任务的运行情况。

出0入8汤圆

发表于 2017-4-7 16:14:16 | 显示全部楼层
McuY 发表于 2017-4-7 13:08
在portmacro.h中定义的
typedef unsigned long UBaseType_t;

我看错了,对于你的这种情况,你说的是对的。因为这边只是简单的 replace 而已。

如果是类似 #if configMAX_PRIORITIES 的应用场景,那么原因参照 4 楼的描述。

出0入0汤圆

发表于 2017-5-9 10:52:43 | 显示全部楼层
CM0中断优先级是四级。

出0入0汤圆

发表于 2019-1-17 21:10:13 | 显示全部楼层
本帖最后由 pk1206 于 2019-1-17 21:11 编辑


cortex-m3内核,按照楼主的教程,一直提示这个。

然后按下图所示,更改文件 SEGGER_SYSVIEW_Conf.h 的配置,就可以了。不知道为什么。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 15:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表