[开发资料] 裸机系统中基于任务方式使用SystemView

[复制链接]
 楼主| LOVEEVER 发表于 2024-5-21 11:21 | 显示全部楼层 |阅读模式
SystemView是嵌入式系统可视化分析工具,提供了对应用程序的完整洞察,包括时间轴、CPU负载、运行时间信息、上下文运行时信息等可视化窗口,能够帮助开发者获得对应用运行时行为的深入理解。支持μC/OS-II、μC/OS-III、FreeRTOS、embOS和无OS的裸机系统分析,深入地了解应用。

对于OS的应用,SystemView除了将整个系统视为idle空闲分析方式外(可点击往期文章阅读:在裸机系统中使用SystemView),还可以通过任务方式检测系统运行时行为。

具体集成步骤如下:

1、在Embedded Studio中为使用的设备创建一个新项目。

2、将SystemView安装目录下的/SEGGER、/Config文件夹中的所有文件和Sample/NoOS/Config/Cortex-M/SEGGER_SYSVIEW_Config_NoOS.c代码文件添加到项目中。


1.png

3、在main.c中包含SEGGER_SYSVIEW_Conf.h和SEGGER_SYSVIEW.h

  1. #include "SEGGER_SYSVIEW_Conf.h"
  2. #include "SEGGER_SYSVIEW.h"


4、修改SEGGER_SYSVIEW_Conf.h中的SEGGER_SYSVIEW_ID_BASE为0x0
  1. #define SEGGER_SYSVIEW_ID_BASE         0x00000000   

5、在SEGGER_SYSVIEW_Config_NoOS.c中,包含stdio.h和string.h文件

#include
#include

添加一个SEGGER_SYSVIEW_OS_API指针,
  1. static const SEGGER_SYSVIEW_OS_API _NoOSAPI = {NULL, _cbSendTaskList};


创建一个 static void _cbSendTaskList(void)函数,使用SEGGER_SYSVIEW_SendTaskInfo发送所有“任务”信息。

  1. static void _cbSendTaskList(void) {

  2.         for (int n = 0; n < _NumTasks; n++) {

  3.         SEGGER_SYSVIEW_SendTaskInfo(&_aTasks[n]);

  4.   }

  5. }




这里的“Tasks”是直接从main调用的函数,可以使用API描述方法添加嵌套函数。



6、在main()函数中调用SEGGER_SYSVIEW_Conf ();



接下来调用SEGGER_SYSVIEW_OnTaskCreate()添加“Task”函数,建议为这个任务创建一个辅助函数,例如在示例项目中的SYSVIEW_AddTask。



  1. void SYSVIEW_AddTask(void* pTask, const char* sName, U32 Prio) {

  2.        int n;

  3.        SEGGER_SYSVIEW_OnTaskCreate((U32)pTask);



  4.       if (_NumTasks > NUM_TASKS) {

  5.           return;

  6.          }

  7.        n = _NumTasks;

  8.       _NumTasks++;

  9.   _aTasks[n].TaskID = (U32)pTask;

  10.       _aTasks[n].sName  = sName;

  11.       _aTasks[n].Prio   = Prio;

  12.       _aTasks[n].StackBase = 0;

  13. _aTasks[n].StackSize = 0;

  14. }

SYSVIEW_AddTask调用方式如下:
  1. SYSVIEW_AddTask(_TestFunc0, "TestFunc0", 10);


7、可在main应用中初始化系统节拍时钟,在节拍处理程序Systick_Handler开始处调用SEGGER_SYSVIEW_RecordEnterISR ();结束时调用SEGGER_SYSVIEW_RecordExitISR()

  1. void SysTick_Handler(void) {

  2.    volatile U32 Cnt;

  3.    SEGGER_SYSVIEW_RecordEnterISR();

  4.    Cnt++;

  5. SEGGER_SYSVIEW_RecordExitISR();

  6. }



8、在应用程序中调用需记录的“任务”函数。

9、可以在函数实现中调用SEGGER_SYSVIEW_RecordVoid()和SEGGER_SYSVIEW_RecordEndCall()来记录函数嵌套。

10、运行应用程序并启动SystemView跟踪。

如果构建成功,SystemView记录应该如下图所示:

2.png

szt1993 发表于 2024-5-21 17:28 | 显示全部楼层
对于OS的应用,SystemView除了将整个系统视为idle空闲分析方式外,还可以通过任务方式检测系统运行时行为。
jf101 发表于 2024-5-21 22:10 | 显示全部楼层
SystemView是嵌入式系统可视化分析工具,提供了对应用程序的完整洞察,包括时间轴、CPU负载、运行时间信息、上下文运行时信息等可视化窗口,能够帮助开发者获得对应用运行时行为的深入理解。
小夏天的大西瓜 发表于 2024-5-22 15:48 | 显示全部楼层
SystemView一般在裸机开发使用的比较多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

342

主题

2619

帖子

6

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

342

主题

2619

帖子

6

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