返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[开发工具] Systemview + ucos移植

[复制链接]
 楼主| DKENNY 发表于 2024-8-16 17:29 | 显示全部楼层 |阅读模式
<
本帖最后由 DKENNY 于 2024-8-16 17:29 编辑

#申请原创# @21小跑堂

前言
    实时操作系统(RTOS)的分析可能会很复杂,特别是当涉及大量任务和任务间通信时,保持程序的稳定性可能会成为一个挑战。幸运的是,我们有许多工具可以帮助我们分析RTOS的运行情况。比如,SystemView、Tracealyzer和TIRTOS的ROV(Runtime Object Viewer),这些都是常见的分析工具。ROV甚至已经集成在CCS(Code Composer Studio)中了。这篇文章,我会以Segger的SystemView为例,讨论如何在ucos3环境中移植和使用SystemView。

1、什么是SystemView?
    SystemView,顾名思义,一种系统层的可视化调试工具,它就像一个放大镜,帮助我们看清和理解复杂的系统。

    也可以这么理解,假设我们正在搭建一个大型乐高模型,有成百上千的零件,如果没有说明书,我们可能会感到困惑,不知道如何开始,或者在搭建过程中可能会遇到问题。SystemView就像是乐高模型的说明书,它通过图形和模型的方式,展示系统的各个部分是如何组合在一起的,以及他们是如何互动的。这样,无论我们是乐高新手还是专家,都可以更好地理解和搭建你的乐高模型。同样,无论我们是软件工程师、系统设计师还是其他角色,都可以通过SystemView更好地理解和设计我们的系统。

2、移植前的准备工作
(1)一个jlink,用于调试、下载
(2)APM32F4系列开发板
(3)SystenView的PC端软件(下载地址:https://www.segger.com/downloads/systemview)

4d8d31447fc180e9790ca58d82bd2f20

    注意:我下载最新版的3.54后,实际使用时有点问题,实际trace的时候总是会莫名其妙的闪退,这里推荐用其他的版本,比如我使用的是3.10版本的。

3、移植过程
    由于我原来已经在APM32F407上移植过了UCOS3,这里就不在赘述了,没有UCOS3例程的可以去看我发过的这篇帖子《APM32F4 移植ucos-iii》,当然,文章最后我也把这个模板例程弄过来了,可以直接用。

(1)下载完SystemView软件后,双击安装。打开软件后,会弹出以下提示,直接点击Continue即可。
9ef4f17948be595120ed22f32eb0827a

    出现以下界面,则说明安装成功。
8f43a66495b5c9f2032836ce91ecc2c7

(2)打开SystemView软件安装目录,把src文件复制到ucos工程的目录下,我这里只是又封装了一层,其内部的内容就是Src文件夹中的内容。

8eeaaaf2dc3caabdbe13367726a7065a

    如下是ucos工程目录下SystemView的内容。
36b61955c9480d6026d2a91872ea9f8b

(3)打开工程,添加必要的头文件以及源文件。
c3093a6f32fabcc4f4d2903908b13bab

215ac614811d24fc04b9dae0912cbe96

(4)配置os_cfg.h文件,修改相关宏,开启DEBUG以及TRACE功能。
  1. #define OS_CFG_DBG_EN                            1u
  2. #define OS_CFG_TRACE_EN                         1u
  3. #define OS_CFG_TRACE_API_ENTER_EN       1u
  4. #define OS_CFG_TRACE_API_EXIT_EN          1u

(5)配置os_cfg_trace.h
  1. #define OS_CFG_TRACE_MAX_TASK               32u   //可根据创建任务的实际情况修改
  2. #define OS_CFG_TRACE_MAX_RESOURCES     256u//可根据创建任务的实际情况修改

(6)配置SEGGER_RTT_Conf.h
  1. #define BUFFER_SIZE_UP                            4096u//可根据创建任务的实际情况修改

(7)配置SEGGER_SYSVIEW_Conf.h
  1. #define SEGGER_SYSVIEW_RTT_BUFFER_SIZE   4096u//可根据创建任务的实际情况修改

(8)修改SEGGER_SYSVIEW_Config_uCOSIII.c
这个文件里面有两个宏函数:
  1. #define SYSVIEW_TIMESTAMP_FREQ  (BSP_ClkFreqGet(BSP_CLK_ID_SYSCLK))
  2. #define SYSVIEW_CPU_FREQ             (BSP_ClkFreqGet(BSP_CLK_ID_SYSCLK))

    这两个宏函数需要我们手动实现,不过实际的功能就是获取系统时钟以及时钟戳
    这里面还包含了一个bsp_clock.h文件,这个文件是需要我们自己定义编写的,我们也可以直接注释掉该头文件的包含,或者自定义这个文件,在这个文件中实现这两个宏函数。我采用的就是重新实现这个头文件,并新建了一个同名的源文件添加到了该工程内部。

    编写bsp_clock.h
  1. #include "apm32f4xx.h"
  2. #include "apm32f4xx_rcm.h"
  3. #define BSP_CLK_ID_SYSCLK 0
  4. uint32_t BSP_ClkFreqGet(uint32_t type);

    编写bsp_clock.c
  1. #include "bsp_clock.h"
  2. uint32_t BSP_ClkFreqGet(uint32_t type)
  3. {
  4.     (void)type;
  5.     return RCM_ReadSYSCLKFreq();
  6. }

    实现的内容特别简单,就是返回了当前系统时钟频率。

(9)main函数修改。
  1. #include <os.h>
  2. #include <app_cfg.h>
  3. #include "os_trace.h"  //包含trace头文件
  4. ……
  5. int main(void)
  6. {
  7.     ……
  8.     OS_TRACE_INIT();  //在OS初始化之前开启TRACE功能
  9.     OS_ERR err;
  10.     OSInit(&err);
  11.     ……
  12. }

    这样,整个工程就移植完成了。

4、SystemView使用

(1)下载代码至开发板,打开SystemView工具,一定要在jlink的连接的前提下,然后按照如下操作开始配置trace的芯片型号。
b5ece43a37b63f53e01d676fee4993aa

(2)点击Start Recording,开始trace。
8dd044b3b37ef0e6bba6a558c462c13d

(3)点击Stop Recording,停止trace。
c05bf342664e3643a7cd31e826abcfe8

(4)查看记录的任务运行情况。

0e9875364422dbe5af94dc56fe745a96

    如上图,在程序中,我们开启了SysTick中断,可以在Timeline窗口看到SysTick中断执行的时间,并且创建了LED和Serail两个Task,我们可以非常直观地看到两个Task的执行时间,以及ucos3在在运行时,具体干了什么事,执行了哪些Task,都是非常直观的。

结语
    通过本次对SystemView与uCOS3的移植过程的分享,希望能够为正在进行类似工作的开发者们提供一些参考与借鉴。SystemView的强大功能为实时系统的调试与性能优化提供了有力支持,更好地帮助我们理解系统运行时的状态。虽然移植过程中遇到了一些挑战,但通过合理的配置与调整,我们成功实现了SystemView与uCOS3的结合。

附件

    1. APM32移植ucos3例程  
    APM32F4移植uCOSIII.zip (2.15 MB, 下载次数: 8)

    2.SystemView+ucos3移植工程
    SystemView_ucos3.zip (2.48 MB, 下载次数: 13)

    3.SystemView V3.10版本(Windows)
    SystemView_V310_Windows_x64.zip (6.26 MB, 下载次数: 8)

    4.SystemView说明文档
    UM08027_SystemView.pdf (1.44 MB, 下载次数: 15)








打赏榜单

21小跑堂 打赏了 50.00 元 2024-08-21
理由:恭喜通过原创审核!期待您更多的原创作品~

评论

我用不闪退的版本是3.52a 3.54 3.56 都会闪退,应该是上位机的bug  发表于 2024-8-27 17:09
使用Systemview,使RTOS更好用更易用,图形化界面,使得开发人员对整个系统的任务调度理解更为直观,作者的移植过程详细完整,值得参考借鉴  发表于 2024-8-21 10:00
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

104

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部

59

主题

104

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部