如何在S32DS中使用SystemView分析FreeRTOS

简介: 如何在S32DS中使用SystemView分析FreeRTOS

S32K144作为NXP推出车规级ARM Cortex M4内核MCU,在很多领域开始被广泛的应用,在其开发过程中,官方支持的S32 Design Studio IDE开发工具可以免费使用,并且集成了ProcessorExpert ,可以很方便的初始化外设并生成驱动。FreeRTOS作为免费的RTOS应用更是广泛,那么在S32DS中开发使用FreeRTOS的项目,很多情况下需要对OS的运行情况进行了解和分析,此时Segger免费的工具SystemView无疑是最合适的。接下来我们一起学习一下如何在S32DS中使用SystemView分析FreeRTOS。

一、首先下载工具:

S32DS:

https://www.nxp.com/cn/support/developer-resources/run-time-software/s32-design-studio-ide/s32-design-studio-ide-for-arm-based-mcus:S32DS-ARM?tab=Design_Tools_Tab

34cc2f657ac0228d013b698e5238cc9b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

SystemView:

https://www.segger.com/downloads/free-uTIliTIes/#SystemView

4cf9119be32e25819784565e1b2fccad_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

McuOnEclipse组件:

https://sourceforge.net/projects/mcuoneclipse/files/PEx%20Components

125590f51959e3bb7391751e6769387c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

二、安装工具

S32DS根据提示安装即可,SystemView的PC端软件下载的是压缩文件,解压缩后运行可执行程序SystemView.exe即可。这里重点描述一下McuOnEclipse组件,这个组件可以说是NXP为其基于Eclipse的各种IDE开发的组件库,应用起来非常方便。

afc46feea197b6a26c615b54bd8d716f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

启动S32DS后,在主菜单的Processor Expert中选择下拉菜单中的import component。

0cbe1df894170b8fd05ab57a62cba91c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在打开的窗口中找到解压缩过的McuOnEclipse组件,选择Part1_Beans_01.07.2018.PEupd,点击打开进行安装。

7cb7d258b55aace04036a6c5678b8596_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

完成后再安装Part2_Beans_01.07.2018.PEupd,此时默认会把组件安装到当前用户目录的MyComponents目录中。

54c0a181a5f218cdbba7efc50e2ea8e0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

安装完成后,还需要把解压缩文件夹中的一些头文件拷贝到安装目录响应位置。

三、新建工程

dd1bac1b29880cacd27fcb0d3f08108f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

打开S32DS,在File菜单中选择New/S32DS ApplicaTIon Project。

b3d5ddbe240e5c6b295df9b24a905abb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

填写项目名称,选择处理器为S32K144,单击Next。

285ab7864b570da025d7ade7d51651db_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

SDKs选择0.8.6,Debugger需要使用SeggerJlink。

b50ccdf0523c05bf9a11535039fff831_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

生成工程后,配置一个GPIO为输出,用来控制LED灯。

5b27d5da96974fa5ed2f2ecb42bb4e6c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在main.c中增加初始化代码,至此,基础工程创建完成。

四、创建FreeRTOS任务

bb185d2a358482b595351ecd2c0905a9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在组件库中搜索FreeRTOS,找到新安装的FreeRTOS,双击,会在组件浏览中增加FreeRTOS和一些相关的组件。

918402d2181a0b2f57cdeb687baaf754_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在McuLibConfig组件右击选择inspector,修改组件SDK为S32K SDK。

d391e1124d9292aa49deb7af6906df33_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

修改FreeRTOS配置中的处理器架构为Cortex-M4F,生成PE代码。

16c0ddcc372d3551ced67c1514eb216c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

添加以下代码到main.c文件

staTIc void Components_Init(void) { #define CPU_INIT_MCUONECLIPSE_DRIVERS}

51fa57a823e54bc74fdcdfa27469a70e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

复制Cpu.c中的初始化代码。

74c808a6b8169048af6bb58a57d16070_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

粘贴到main.c中,完成初始化工作。

bd7689dea140867b1e34c6407768120c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

取消 Events.c的编译。

31aa079d1da43d08bc440cacd412f3b5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

引入Events.h和Events.c

1eab6d0a9ec21eeada19fd569cc74d54_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

创建任务,并开启任务调度器。

84fc7a177dd9ce9c53277b9abe4571d8_640_wx_fmt=gif&wxfrom=5&wx_lazy=1.gif

编译下载后,开发板的LED灯已经开始闪烁了,FreeRTOS任务创建成功。

五、添加SystemView

528490f72e24c408de95c2920edc6c39_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在组件库中搜索systemview,检索出SeggerSystemView组件,双击添加到工程,这个过程会自动增加一些相关的组件。

502164ce241a9959ab195452d07b92df_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

修改RTT组件属性,设置上传和下载通道都为2。

668ca28bcc1efcf57661c53fb88893b8_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

确保SystemView组件属性中RTT通道序号为1。

59c85386befb84177e33b9fc28c4286d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

最后,启用FreeRTOS组件属性中的Segger System Viewer跟踪。

b0e249f3da2ae514a18c879adc326a1f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

重新生成PE代码后,复制Cpu.c中的初始化代码。

b06b4ff9dcecd4713bd0ab34fe3cf6bc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在main.c中覆盖之前的初始化代码。

重新编译工程,下载到开发板。

6fe94ad8e44701750a8871c1c655dadc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在PC上启动之前下载的SystemView.exe

f76165d410ac39bec1efbe680539b890_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

点击start recording,弹出对话框,确定即可。

cefb05ea715a9ac6956cd0c17823d2cc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

此时SystemView就开始记录FreeRTOS的所有活动情况了,包括了每个任务的时间占用,任务的调度过程,任务的CPU资源占用。

总结:SystemView是一个非常好用的RTOS分析工具,对于掌握和了解各种RTOS的任务运行情况,内部事件,资源占用等等各种信息非常方便,在项目开发过程中可以很好的帮助开发者分析系统运行状况,并依据具体状况对系统的任务进行调节和应用。

相关文章
|
1月前
【FreeRTOS】中断管理(三)
【FreeRTOS】中断管理
|
1月前
【FreeRTOS】中断管理(二)
【FreeRTOS】中断管理
|
8月前
|
API
FreeRTOS学习笔记—FreeRTOS移植
本文学习了如何移植FreeRTOS到自己的STM32工程。最后,根据正点原子提供的测试main函数,测试了移植效果。
189 0
FreeRTOS学习笔记—FreeRTOS移植
|
数据可视化 中间件 API
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
熟悉 在 STM32 CubeMX 下面的 FreeRTOS 使用
1368 1
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
|
11天前
|
消息中间件 算法 编译器
【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS
【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS
|
16天前
|
存储 安全 算法
从0入门FreeRTOS之第二节FreeRTOS的体系结构
FreeRTOS的体系结构设计精巧且高效,专为嵌入式系统量身打造。理解FreeRTOS的体系结构对开发高效、稳定的嵌入式应用至关重要。下面,我们详细介绍FreeRTOS的核心组件、内核机制、中断管理和内存管理等内容。
28 0
|
1月前
|
Linux API 调度
xenomai内核解析-xenomai实时线程创建流程
本文介绍了linux硬实时操作系统xenomai pthread_creta()接口的底层实现原理,解释了如何在双内核间创建和调度一个xenomai任务。本文是基于源代码的分析,提供了详细的流程和注释,同时给出了结论部分,方便读者快速了解核心内容。
104 0
xenomai内核解析-xenomai实时线程创建流程
|
1月前
|
API C语言
【FreeRTOS】中断管理(一)
【FreeRTOS】中断管理
|
11月前
|
存储 算法 调度
FreeRTOS多任务系统
FreeRTOS多任务系统
79 0