Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
浮点数打印
rt-thread printf打印信息(包含打印浮点型float)
发布于 2020-05-22 12:28:45 浏览:2991
订阅该版
 最近在钻研如何让我的设备支持通过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
被浏览
3k
关于作者
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
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
github高阶加速,速度可达带宽峰值,测试到146Mbit/s
2
英飞凌携手RT-Thread举办嵌入式网络应用开发沙龙,带你从0到1搭建智能数据网关
3
BL808 RT-Thread Wi-Fi 驱动适配
4
rt-thread 系统运行期改变网卡配置
5
简单的步进电机驱动调试
热门标签
RT-Thread Studio
串口
LWIP
Env
AT
SPI
Bootloader
FinSH
ART-Pi
CAN总线
Hardfault
USB
文件系统
RT-Thread
DMA
SCons
线程
MQTT
RT-Thread Nano
STM32
RTC
ESP8266
rt-smart
flash
ota在线升级
WIZnet_W5500
FAL
I2C
packages_软件包
UART
cubemx
freemodbus
潘多拉开发板_Pandora
定时器
BSP
PWM
ADC
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
SDIO
Debug
AB32VG1
MicroPython
C++_cpp
编译报错
msh
QEMU
ulog
本月问答贡献
出出啊
1500
个答案
338
次被采纳
小小李sunny
1389
个答案
276
次被采纳
张世争
714
个答案
157
次被采纳
crystal266
522
个答案
153
次被采纳
whj467467222
1216
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
12
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
2
篇文章
1
次点赞
crystal266
2
篇文章
5
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部