[问题讨论] 两种都不太顺利的printf方式

数码小叶   2021-4-22 14:57 楼主

RSL10的pack为应用程序提供了两种方式来实现printf调试,一种是通过串口,一种是通过SEGGER RTT。本以为这会很便利,结果却是很尴尬,两种方式体验下来都不太顺利。

 

关于两种方式怎么切换,RSL10 GETTING STARTED GUIDE.PDF里介绍的和现在这个版本的pack有点出入,这个版本的直接更改printf.h里的宏定义即可

 

以最基础的blink工程测试,首先说一下UART方式,修改宏定义如下

#define OUTPUT_UART                    1 
#ifndef OUTPUT_INTERFACE
	 #define OUTPUT_INTERFACE           OUTPUT_UART
#endif

 

然后就可以实现打印输出了

Snipaste_2021-04-22_13-07-36.jpg

 

 

但是很快发现这个方式有个bug,不能全速运行,一但全速运行,就会一直运行在int UART_printf(const int narg, const char *sFormat, ...)函数

/* Check until the DMA is not busy */
    while (tx_busy == 1)
    {
        Sys_Watchdog_Refresh();
    }

虽然程序没死,但是已经跳不出这个死循环了。

 

第二种方式,SEGGER RTT,先修改宏定义

#define OUTPUT_RTT                     1 
#ifndef OUTPUT_INTERFACE
      #define OUTPUT_INTERFACE           OUTPUT_RTT
#endif

 

打印功能也是正常实现

Snipaste_2021-04-22_14-12-57.jpg

 

这次全速运行没问题,但是,不能暂停了!!!一暂停就是下面这个结果

Snipaste_2021-04-22_10-29-34.jpg

Snipaste_2021-04-22_13-29-25.jpg

 

 

本帖最后由 数码小叶 于 2021-4-22 14:29 编辑

回复评论 (15)

第二种方法SEGGER RTT看着简单,不能暂停还是程序那里有问题

点赞  2021-4-22 15:57

KEIL的这几个文件是只读

你在KEIL编译器里C宏定义呢?

image.png

点赞  2021-4-22 16:08

我知道原因了!

blink项目里使用了按钮

该按钮是DIO5

image.png

可UART打印使用DIO4和DIO5

image.png

点赞  2021-4-22 16:26

#define BUTTON_DIO                      7

好像全速运行UART有连续

LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF...................

点赞  2021-4-22 16:33
引用: 蓝雨夜 发表于 2021-4-22 16:26 我知道原因了! blink项目里使用了按钮 该按钮是DIO5 可UART打印使用DIO4和DIO5

感谢,感谢,解决了我一个大困惑,真的是因为这个原因造成的。为啥把按键设计到串口管脚

点赞  2021-4-22 16:40
引用: 数码小叶 发表于 2021-4-22 16:40 感谢,感谢,解决了我一个大困惑,真的是因为这个原因造成的。为啥把按键设计到串口管脚

RSL10管脚很紧张啊!

呵呵

点赞  2021-4-22 16:41
引用: 蓝雨夜 发表于 2021-4-22 16:08 KEIL的这几个文件是只读 你在KEIL编译器里C宏定义呢?

用的自带的那个软件ON_Semiconductor_IDE,没用KEIL

点赞  2021-4-22 16:42
引用: 数码小叶 发表于 2021-4-22 16:42 用的自带的那个软件ON_Semiconductor_IDE,没用KEIL

那个IDE也不错

点赞  2021-4-22 16:47
引用: 蓝雨夜 发表于 2021-4-22 16:41 RSL10管脚很紧张啊! 呵呵

感觉在哪加个延时应该可以解决这个复用造成的bug,因为单步是OK的,晚上再试试

点赞  2021-4-22 17:00

RTT很方便,我现在基本能上RTT就不上调试串口了。

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-4-22 17:15

RTT对硬件管脚需求是啥?貌似像stm32有个swo

点赞  2021-4-22 21:22
引用: freebsder 发表于 2021-4-22 17:15 RTT很方便,我现在基本能上RTT就不上调试串口了。

RTT确实比串口花样多,应该是ON_Semiconductor_IDE,这个IDE不太友好

点赞  2021-4-22 22:00
引用: dql2016 发表于 2021-4-22 21:22 RTT对硬件管脚需求是啥?貌似像stm32有个swo

JLINK这个工具太强大了,涵盖的芯片太广,自然包含了stm32

点赞  2021-4-22 22:06
引用: 数码小叶 发表于 2021-4-22 22:06 JLINK这个工具太强大了,涵盖的芯片太广,自然包含了stm32

我是问RTT需要哪几个管脚,我记得Stm32的swo可以输出调试信息

点赞  2021-4-23 11:33
引用: dql2016 发表于 2021-4-23 11:33 我是问RTT需要哪几个管脚,我记得Stm32的swo可以输出调试信息

标准的JTAG或者SWD接口就行啊,RTT方式的话一般简化都是SWD,针对STM32就是VCC,SWDIO,SWCLK,GND。ITM方式的话需要加一个你说的swo

点赞  2021-4-23 13:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复