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


只要把这个打钩,程序就不会再printf这个地方卡死了

还有另一种解决方式,我就懒得测试了,记录一下,下次要是还卡在点灯或者程序莫名其妙不走,那就可以考虑考虑这种软件上的坑了

在讨论下为什么写了fputc这个函数就能用printf输出到串口上:我原本以为fputc这个是一个弱定义的函数,后来才发现,原来是因为c语言中
调用printf函数就会去调用fputc()这个函数,所以我们只是覆盖了这个函数而已。
调用fputc()这个函数的时候回去调用一个__write()的函数,这个才是弱定义的函数。


水太深了,现在不能深究!
浙公网安备 33010602011771号