发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[开发工具]

Systemview + ucos移植

[复制链接]
989|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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)



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

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

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


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


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



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


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




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

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

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

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

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

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

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

    编写bsp_clock.c
#include "bsp_clock.h"
uint32_t BSP_ClkFreqGet(uint32_t type)
{
    (void)type;
    return RCM_ReadSYSCLKFreq();
}

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

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

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

4、SystemView使用

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


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


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


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



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

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

附件

    1. APM32移植ucos3例程  
    APM32F4移植uCOSIII.zip (2.15 MB)

    2.SystemView+ucos3移植工程
    SystemView_ucos3.zip (2.48 MB)

    3.SystemView V3.10版本(Windows)
    SystemView_V310_Windows_x64.zip (6.26 MB)

    4.SystemView说明文档
    UM08027_SystemView.pdf (1.44 MB)








使用特权

评论回复

打赏榜单

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

评论
恒殿 2024-8-27 17:09 回复TA
我用不闪退的版本是3.52a 3.54 3.56 都会闪退,应该是上位机的bug 
21小跑堂 2024-8-21 10:00 回复TA
使用Systemview,使RTOS更好用更易用,图形化界面,使得开发人员对整个系统的任务调度理解更为直观,作者的移植过程详细完整,值得参考借鉴 
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

52

帖子

6

粉丝