STM32cube+Freertos+Tracealyzer

一、前言

目标:使用STM32单片机创建两个Freertos任务,并在Treacelyzer软件上显示任务视图。

Tracelyzer软件可以使用流模式和快照模式,本次实验使用流模式。

流模式只能使用J-link实现,板载的ST-link可以转化为J-link,但是单独购买的ST-link不可以转换,你也可以尝试,小心变砖。


二、使用STM32cube创建freertos任务

1.选择单片机型号

2.配置IO口

以上就创建完成代码,下面开始串口移植。


在usart.c中添加头文件

#include "stdio.h"

在usart.c的最后添加重定向函数,可能不同板子的重定向函数不同,或者使用其他的重定向函数

#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
void _sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
while((USART1->ISR&0X40)==0);
USART1->TDR = (uint8_t) ch;
return ch;
}
#endif

在freertos.c中添加头文件

#include "stdio.h"

在两个任务中添加打印代码

我们看到两个任务已经实现了,接下来开始移植Tracealyzer代码。


三、移植Tracelzer代码

这时候编译出现四个错误,先不要管。

修改配置文件trcConfig.h,删除#error "Trace Recorder: Please include your processor's header file here and remove this line.",并#include处理器头文件。

将硬件移植配置为Tracealyzer针对Cortex-M提供的实现。其他架构的处理器,如果没有现存的移植,需要用户自行提供一个硬件定时器来产生时间戳。

#define  TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M

将跟踪模式设置为流模式

#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING

设置所使用的FreeRTOS的版本,这里使用的是FreeRTOS v10.2.1版本。(打开FreeRTOS.h文件,最上面有版本号

#define TRC_CFG_FREERTOS_VERSION TRC_FREERTOS_VERSION_10_2_1

在FreeRTOSConfig.h配置文件中使能跟踪功能:

#define configUSE_TRACE_FACILITY 1

还是在FreeRTOSConfig.h下

#include "trcRecorder.h"

在main函数中调用vTraceEnable(TRC_INIT)初始化并使能跟踪,调用的位置须在硬件完成初始化之后,第一个内核对象创建之前。

vTraceEnable(TRC_INIT);

在freestos.c中加入等待软件启动函数,烧写单片机之后,并不执行,当等待软件启动之后,才开始启动。

vTraceEnable(TRC_START_AWAIT_HOST);  //等待软件启动

现在编译没有错误了,只有警告,警告是因为Tracealyzer软件中有些包我们没有用,并不影响使用,不用管。

以上移植已经结束了,下面开始接入Tracealyze软件,并分析。


四、Tracealyzer软件使用并分析

红的的是Task1,绿色的是Task2,因为Task1的优先级高于Task2,所以先于Task2执行,而当Task1和Task2发生冲突之后,Task1会打断Task2的执行,下面我进行演示。

修改代码中Task1的延时时间

重新捕获,可以发现,当Task1来临时,会让Task2进入等待状态

以上就实现了STM32+Freertos+Tracelyzer的简单功能,若有错误的地方,请不吝赐教。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WinterWanderer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值