硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5448|回复: 8
收起左侧

[开发工具] 这波操作可以,SEGGER帮MDK解决Event Recorder做printf的卡顿问题(此贴作废,后续EVR狂暴模式解决了此贴问题)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2020-5-29 02:12:58 | 显示全部楼层 |阅读模式

此贴作废,后续的Event Recorder狂暴模式已经解决此问题:


STM32H7视频教程第11期:STM32H7的GPIO实战,深化非阻塞编程思想,移植驱动到全新器件上,开启Event Recorder狂暴模式
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111702





https://wiki.segger.com/Keil_MDK-ARM

MDK自带的Event Recorder使用printf功能,经常会出现卡顿的问题,一直是MDK的通道。

SEGGER近期发文帮忙解决了这个痛点,使用SEGGER的RTT功能即可;

1.png
回复

使用道具 举报

15

主题

117

回帖

162

积分

初级会员

积分
162
发表于 2020-5-29 09:07:12 | 显示全部楼层
移植以为是自己使用Event recorder有问题,原来需要这样解决啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2020-5-29 09:20:46 | 显示全部楼层
lhaoyue 发表于 2020-5-29 09:07
移植以为是自己使用Event recorder有问题,原来需要这样解决啊

这个是SEGGER新发布的,知道了MDK的痛点,把他操作一把。
回复

使用道具 举报

3

主题

58

回帖

67

积分

初级会员

积分
67
发表于 2020-6-1 08:19:10 | 显示全部楼层
现在下载的RTT组件包,里面Sample文件夹有好多OS相关的文件,那用keil的全家桶的话,既没有CMSIS RTOS相关的,也没有RTX相关的,不知道怎么搞了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2020-6-1 10:33:53 | 显示全部楼层
ruboss 发表于 2020-6-1 08:19
现在下载的RTT组件包,里面Sample文件夹有好多OS相关的文件,那用keil的全家桶的话,既没有CMSIS RTOS相关 ...

选择了Event Recoder中STDOUT的User模式后,会有两个输入输出的弱定义函数,你将RTT的API填进去就行。

硬件串口做printf也可以用这个。
回复

使用道具 举报

4

主题

35

回帖

47

积分

新手上路

积分
47
发表于 2020-6-1 17:11:31 | 显示全部楼层
eric2013 发表于 2020-6-1 10:33
选择了Event Recoder中STDOUT的User模式后,会有两个输入输出的弱定义函数,你将RTT的API填进去就行。

...

麻烦硬汉能不能说明一下是哪些弱函数,我自己试了一下,只找到了一个retarget_io.c文件中tatic int stdout_putchar (int ch)函数需要我们重写。我查了一下自带的教程,STDOUT和STIO设置为user模式主要是用于将数据通过用户自定义的方式(自己重写函数)通过硬件(一般串口)输出。
那么有个疑问,你这里提到的Event Recorder使用printf卡顿问题,是指定调用printf函数在Debug(printf)Viewer窗口的打印功能的卡顿吗?也就是下面这个窗口

Debug (printf) Viewer

Debug (printf) Viewer

    这个窗口对应EVR模式的printf功能,能够省去一个串口的硬件资源,直接通过仿真器打赢调试数据。并且我看了printf功能对应的源代码,主要调用的就是tatic int stdout_putchar (int ch)函数,里面有EventRecordData()函数,估计就和上面的窗口对应,此外别的代码也没的了。

    如果通过将其改为user模式,需要我们自行编写tatic int stdout_putchar (int ch)函数,那么就不能调用上述窗口了。我们自行用定义usart输出调试数据,那么用Event Recorder就失去意义了,我们可以自己一个硬件串口输出自己想输出的调试数据。

回复

使用道具 举报

15

主题

117

回帖

162

积分

初级会员

积分
162
发表于 2020-6-1 17:32:47 | 显示全部楼层
BUGvirus 发表于 2020-6-1 17:11
麻烦硬汉能不能说明一下是哪些弱函数,我自己试了一下,只找到了一个retarget_io.c文件中tatic int stdou ...

估计是这样的,stdout_putchar (int ch) 函数重写,内部用RTT的函数输出。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-5-5 16:20:09 | 显示全部楼层
lhaoyue 发表于 2020-6-1 17:32
估计是这样的,stdout_putchar (int ch) 函数重写,内部用RTT的函数输出。

好像又绕回了原点emmmmm
int stdout_putchar (int ch)
{
        char c = (char)ch;
        SEGGER_RTT_Write(0, &c, 1);
        return ch;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2023-5-6 09:37:02 | 显示全部楼层
s2013en 发表于 2023-5-5 16:20
好像又绕回了原点emmmmm
int stdout_putchar (int ch)
{

此贴作废,后续的Event Recorder狂暴模式已经解决此问题:

STM32H7视频教程第11期:STM32H7的GPIO实战,深化非阻塞编程思想,移植驱动到全新器件上,开启Event Recorder狂暴模式
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111702

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 22:39 , Processed in 0.187449 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表