Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
浮点数打印
rt-thread printf打印信息(包含打印浮点型float)
发布于 2020-05-22 12:28:45 浏览:3852
订阅该版
 最近在钻研如何让我的设备支持通过printf串口输出,摸了一段时间终于摸出来了,希望可以帮助到有需要的朋友。 本人使用的RTOS版本是RTT-NANO,芯片采用的是STM32F030CCT6,同样情况应该对于应用到非阉割版的也是没有问题。 编译工具链`arm-none-eabi-gcc` 需要修改的地方有3个: 1.在代码中定义`int32_t _write(int32_t file, char *data, int32_t len)`函数,需要包含头文件stdio.h,使用哪个串口进行输出请选择相应的参数 ```c int32_t _write(int32_t file, char *data, int32_t len) { int32_t i; for(i=0;i
') { HAL_UART_Transmit(&huart2, (uint8_t*)" ", 1, HAL_MAX_DELAY); } HAL_UART_Transmit(&huart2, (uint8_t*)&data*, 1, HAL_MAX_DELAY); } return len; } ``` 2.修改连接参数 在rt-thread studio中修改构建配置  勾选相应的选项,连接nosys库(-lnosys) 我的makefile中连接参数具体为 ``` LDSCRIPT = link.lds LIBS = -lstm32f030xc -lrtt -lc -lm **-lnosys -u _printf_float** LIBDIR = -L./Lib LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections ``` 修改完这里,假如现在编译会出现以下的连接失败的信息 `sbrk.c:(.text._sbrk+0x18): undefined reference to `end'collect2: error: ld returned 1 exit status` 3.修改link.lds ```c ... __bss_start = .; .bss : { . = ALIGN(4); /* This is used by the startup in order to initialize the .bss secion */ _sbss = .; *(.bss) *(.bss.*) *(COMMON) . = ALIGN(4); /* This is used by the startup in order to initialize the .bss secion */ _ebss = . ; *(.bss.init) } > RAM __bss_end = .;
/*_end = .;*/ /*end = .;*/ end = .;
/* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } ... ``` 遇到这个问题,是因为end没有被定义,在link.lds文件中,定义的名称为_end,对于end和_end哪个才是正确的命名,可能跟编译器有关 因此需要在link.lds中定义一个end,如果end取缔_end不会报错的话,也可以直接把_end改成end 最后还需要修改board.h中SRAM的开始地址 ```c #if defined(__CC_ARM) || defined(__CLANG_ARM) extern int Image$RW_IRAM1$ZI$Limit; #define HEAP_BEGIN ((void *)&Image$RW_IRAM1$ZI$Limit) #elif __ICCARM__ #pragma section="CSTACK" #define HEAP_BEGIN (__segment_end("CSTACK")) #else extern int __bss_end;
#define HEAP_BEGIN (((void *)&__bss_end)+0x200)
#endif #define HEAP_END STM32_SRAM1_END ``` 给__bss_end地址便宜0x200目的是留一段空间给标准C库调用时使用,否则会篡改内核的内存块内容,造成系统运行崩溃。 修改过程可能有点偏麻烦,有需要的朋友可以捣腾一下,不增加**-u _printf_float**是无法打印%f的数据,但是可以优化代码体积。 有一个参考的代码,只是单纯的打印printf内容,仅供参考。 下载附件: [rt_thread_template.rar](/uploads/202005/22/122629p8infx34f3fbvtzp.rar)
查看更多
2
个回答
默认排序
按发布时间排序
wlof
2020-05-24
这个家伙不懒,什么也没写
厉害了,之前我是分成两个整数打印的;P
sethnie
2022-06-06
这家伙很懒,什么也没写!
非常感谢
撰写答案
登录
注册新账号
关注者
0
被浏览
3.9k
关于作者
Mestic英
这家伙很懒,什么也没写!
提问
8
回答
4
被采纳
1
关注TA
发私信
相关问题
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
stm32g030移植RT-Thread
2
CubeMX & RT-Thread Studio 联合开发说明
3
RT-Thread动态模块
4
RT-Thread项目助手v0.3 | Ubuntu与MacOS平台的RT-Thread Env
5
【FRA156测评DM-MCX】- 环境配置篇
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
rt-smart
RTC
FAL
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
Debug
keil_MDK
SFUD
msh
ulog
C++_cpp
MicroPython
本月问答贡献
lchnu
3
个答案
2
次被采纳
张世争
1
个答案
2
次被采纳
a1012112796
9
个答案
1
次被采纳
三世执戟
8
个答案
1
次被采纳
聚散无由
5
个答案
1
次被采纳
本月文章贡献
jinchanchan
9
篇文章
13
次点赞
ssdd45555
3
篇文章
2
次点赞
聚散无由
1
篇文章
4
次点赞
hywing
1
篇文章
1
次点赞
rvcore
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部