stm32点灯失败原因竟然是printf重定向

今天想再测试一下RTC时钟,因为发现hal库里有个能够读写rtc计数器数据的函数,又不想破坏我原本那块板子的RTC程序(好不容易跑号,想让它跑几年,我的宝贝啊),然后就随便拿了块最小系统板子。
然后,悲剧开始了,浪费了我两个小时。
是真的难受,我竟然连一个点灯的程序都没跑通!我本来以为自己已经学得够扎实了,不管是计算机底层原理还是stm32的工作流程之类的,结果居然没点亮一盏灯,挫败、不甘,反反复复测试了一个多小时,
突然想起来以前好像也有过一样的点灯失败的经历,然后我就找到了罪魁祸首,printf重定向!
image

image
只要把这个打钩,程序就不会再printf这个地方卡死了
image
还有另一种解决方式,我就懒得测试了,记录一下,下次要是还卡在点灯或者程序莫名其妙不走,那就可以考虑考虑这种软件上的坑了
image
在讨论下为什么写了fputc这个函数就能用printf输出到串口上:我原本以为fputc这个是一个弱定义的函数,后来才发现,原来是因为c语言中
调用printf函数就会去调用fputc()这个函数,所以我们只是覆盖了这个函数而已。
调用fputc()这个函数的时候回去调用一个__write()的函数,这个才是弱定义的函数。
image

image

水太深了,现在不能深究!

posted @ 2026-04-02 19:06  青春猪头青年  阅读(6)  评论(0)    收藏  举报