硬汉嵌入式论坛

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

[开发工具] 写了一个可以选择printf和SEGGER_RTT打印方式的代码,MDK未优化时不能正常运行,优化后可以正常

[复制链接]

5

主题

97

回帖

112

积分

初级会员

积分
112
发表于 2023-6-19 16:10:33 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
// 定义宏开关,用于选择打印方式
//#define USE_PRINTF  // 使用printf方式打印
#define USE_SEGGER_RTT  // 使用SEGGER_RTT方式打印

// 定义宏开关,用于选择打印方式
#if defined(USE_PRINTF) && defined(USE_SEGGER_RTT)
#define LOG(...) \
    do { \
        printf(__VA_ARGS__); \
        char logBuffer[256]; \
        snprintf(logBuffer, sizeof(logBuffer), __VA_ARGS__); \
        SEGGER_RTT_WriteString(0, logBuffer); \
    } while (0)
#elif defined(USE_PRINTF)
#define LOG(...) printf(__VA_ARGS__)
#elif defined(USE_SEGGER_RTT)
#define LOG(...) \
    do { \
        char logBuffer[256]; \
        snprintf(logBuffer, sizeof(logBuffer), __VA_ARGS__); \
        SEGGER_RTT_WriteString(0, logBuffer); \
    } while (0)
#else
#define LOG(...)
#endif



如上代码,在选择SEGGER_RTT方式打印中文。MDK未优化时,代码直接无法正常运行。选择优化后又可以正常运行,打印也正常。不知道是什么问题造成的。可以怎么修改。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-19 16:27:55 | 显示全部楼层
这个局部变量不小,使用的时候注意加大栈空间了吧
回复

使用道具 举报

5

主题

97

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-6-19 16:33:18 | 显示全部楼层
eric2013 发表于 2023-6-19 16:27
这个局部变量不小,使用的时候注意加大栈空间了吧

确实是栈空间的问题。加大后可以正常运行了。对堆栈这一块一直没有注意过。看来还是要好好学一下。
回复

使用道具 举报

3

主题

66

回帖

75

积分

初级会员

积分
75
发表于 2023-6-19 18:56:26 | 显示全部楼层
本帖最后由 kingdjh 于 2023-6-19 19:56 编辑

你那个局部变量完全没有必要的,改成下面这样
[C] 纯文本查看 复制代码
#define LOG(...) \
    do
    {
        printf(__VA_ARGS__); \
        SEGGER_RTT_printf(0, __VA_ARGS__); \
    } while (0)
回复

使用道具 举报

5

主题

97

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-6-25 09:58:37 | 显示全部楼层
kingdjh 发表于 2023-6-19 18:56
你那个局部变量完全没有必要的,改成下面这样
[mw_shl_code=c,true]#define LOG(...) \
    do

这样就不支持浮点数。现在要打印浮点数。
回复

使用道具 举报

38

主题

195

回帖

319

积分

高级会员

积分
319
发表于 2023-8-24 09:50:18 | 显示全部楼层
leng_qian 发表于 2023-6-25 09:58
这样就不支持浮点数。现在要打印浮点数。

可以网上找个printf的函数源码,把SEGGER_RTT_vprintf这个函数给改成支持浮点数。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 17:15 , Processed in 0.192016 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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