登录
STM32的printf函数重定向方法
STM32嵌入式开发
2023-07-10
1637
分享海报
STM32嵌入式开发
504 文章
212.2w阅读
180粉丝
+关注
描述
法1:使用MicroLIB库
1.1 KEIL-MDK中的Use MicroLIB选项
在MDK开发环境中,
MicroLib是缺省c库的备选库,它可装入少量内存中,与嵌入式应用程序配合使用,且这些应用程序不在操作系统中运行。
MicroLib进行了高度优化以使代码变得很小,功能比缺省c库少,不具备某些ISO c特性,部分库函数的运行速度也比较慢,如内存拷贝函数memcpy()。
MicroLib与缺省c库之间的主要差异在网上有许多文章都有写到,这里摘抄记录:
MicroLib 不符合 ISO C 库标准。不支持某些 ISO 特性,并且其他特性具有的功能也较少。
MicroLib 不符合 IEEE 754 二进制浮点算法标准。
MicroLib 进行了高度优化以使代码变得很小。
无法对区域设置进行配置。缺省 C 区域设置是唯一可用的区域设置。
不能将 main() 声明为使用参数,并且不能返回内容。
不支持 stdio,但未缓冲的 stdin、stdout 和 stderr 除外。
MicroLib对 C99 函数提供有限的支持。
MicroLib不支持操作系统函数。
MicroLib不支持与位置无关的代码。
MicroLib不提供互斥锁来防止非线程安全的代码。
MicroLib不支持宽字符或多字节字符串。
与stdlib不同,MicroLib不支持可选择的单或双区内存模型。MicroLib只提供双区内存模型,即单独的堆栈和堆区。
MicroLib提供了一个有限的stdio子系统,它仅支持未缓冲的stdin、stdout和stderr,那么也就是说勾选了Use MicroLib选项后,在代码工程中就可以使用printf()函数咯?
然而事实并非如此,这样直接使用printf()函数,其打印的字符串最终不知道打印到何处。
我们要做的是将调试信息打印到USART1中,所以需要对printf()函数所依赖的打印输出函数fputc()重定向(MicroLib中的printf()函数打印操作依赖fputc())。
1.2 重定向fputc函数
在MicroLib的stdio.h中,fputc()函数的原型为:
此函数原本是将字符ch打印到文件指针stream所指向的文件流去的,现在我们不需要打印到文件流,而是打印到串口1。基于前面的代码:
注意,需要包含头文件stdio.h,否则FILE类型未定义。勾选了Use MicroLib选项,重定向fputc()函数后,我们就可以在工程代码中使用printf()函数了:
printf()函数的使用方法跟之前一样,运行结果:
法2:不使用MicroLIB库
2.1 半主机模式
半主机模式是ARM的一种机制,实现将来ARM应用程序代码的输入/输出请求传送至运行着调试器的主机。
例如设置使用半主机模式下的ARM应用程序,可以使用printf()和scanf()来使用主机的显示器和键盘,而不需要在ARM系统上搭配显示器和键盘。
半主机通过一组定义好的软件指令(如SVC)来实现的,这些指令在程序控制下产生异常,ARM应用程序调用半主机对应的异常处理函数,然后调试代理处理该异常。
一般的ARM应用程序中并不需要半主机操作,在这里为确保ARM应用程序中没有链接MicroLib的半主机相关函数,我们要取消ARM的半主机工作模式。
2.2 实现代码
在工程中加上如下代码:
这样操作后,在不使用MicroLib的前提下,仍能使用printf()函数将调试信息打印到USART1上了。
打开APP阅读更多精彩内容
点击阅读全文
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
操作系统
STM32
函数
实现
printf
函数
的
重定向
2021-08-24
0
stm32
如何使用
printf
函数
重定向
?
2021-12-01
0
STM32
重定向
printf
的
方法
是什么?
2021-12-01
0
在
STM32
CUbeIDE中使用的
printf
重定向
函数
失败了是为什么?
2021-12-01
0
如何对
printf
函数
进行
重定向
呢
2021-12-01
0
重定向
printf
()
函数
2022-01-11
0
实现
重定向
printf
()和scanf()
函数
案例分析
2018-06-23
9137
单片机
printf
重定向
的
函数
免费下载
2019-07-03
702
STM32
单片机IAR环境下
重定向
printf
函数
2021-12-03
1147
【
STM32
Cube_09】
重定向
printf
函数
到串口输出的多种
方法
2021-12-06
528
STM32
使用串口
重定向
系统
printf
函数
输出时出现一初始化或使用
printf
函数
系统卡死的原因及解决办法
2021-12-09
1743
Keil下使用STlink
重定向
printf
的配置
2021-12-27
1313
STM32
单片机基础09——
重定向
printf
函数
到串口输出的多种
方法
2021-12-27
842
printf
输出
重定向
的
方法
2023-05-14
5200
如何实现
Printf
()接口
重定向
到UART
2023-10-01
1248
全部
0
条评论
快来发表一下你的评论吧 !
发送
登录/注册
×
20
完善资料,
赚取积分