printf死翘翘

本来想把我的单片机玩一下,寄给在大学搞研究的一个朋友,但竟然挂在printf里面,大概知道是什么位置出问题,但是还想不清楚什么原因。

我先是在stc51单片机里面搞了串口,然后我想用串口重定向到printf做调试,printf是一个库函数,这个函数会调用putchar函数,我这里就需要重新实现一下putchar,那我就可以完成pritnf的重定向了。

然后,我实际调试的时候,发现我putchar是正常的。

printf死翘翘_第1张图片

但我调用printf的时候,我的单片机就不断的重启。

当然,我这里会想到printf的问题,然后我自己实现了一个字符串打印函数

printf死翘翘_第2张图片

调用测试发现也在不断的重启。

之后我就修改了实现方式,怀疑操作的这个指针不是合法的,触发了什么东东。

把函数修改成这样再打印

printf死翘翘_第3张图片

这样结果就正常了。

到现在我还没想明白是怎么回事,我只能猜测,这个字符串的指针不能瞎操作修改的,用一个变量接收它再做指针的运算是没问题。

所以是啥回事?

跟我朋友朱同学聊了下,他给了我比较好的思路

第一个方法修改

printf死翘翘_第4张图片

第二种方法修改

printf死翘翘_第5张图片

妥妥的C语言陷阱,字符串常量是有const的。

printf死翘翘_第6张图片

话说回来,C51的编译器,是不是有点太弱智了,还是说,对编程的要求更高一些呢?

晚些时候,我在测试看看SDCC的表现

代码在

https://github.com/weiqifa0/tiny51_os.git

记得切换到master分支

喜欢的自己捣鼓下,我觉得挺有意思的。

你可能感兴趣的:(printf死翘翘)