szjm-slm 发表于 2022-9-2 11:11

【雅特力AT32WB415评测】4. AT32 IDE下printf的实现(printf重定向)

<div class='showpostmsg'><p>接着上3篇评测报告:</p>

<p>(1)https://bbs.eeworld.com.cn/thread-1214040-1-1.html</p>

<p>(2)https://bbs.eeworld.com.cn/thread-1214570-1-1.html</p>

<p>(3)https://bbs.eeworld.com.cn/thread-1215784-1-1.html</p>

<p>&nbsp;</p>

<p>原来一直在MDK环境下使用printf很方便,网上的参考资料也很多。这次拿到AT32WB415评估板后,使用官方AT32 IDE进行开发,刚开始天真的以为也跟MDK一样,可以直接使用,在main中添加如下代码: &nbsp; ,编译一次通过, &nbsp; ,然后把迫不及待把*.hex文件下载到评估板上,打开串口调试工具,发现并没有打出printf的&ldquo;Hello&rdquo;信息。这才恍然大悟,AT32 IDE下使用printf也不简单。</p>

<p >溯源发现程序中使用的printf &nbsp; 的stdio.h文件位于 &nbsp; ,而MDK环境中stdio.h文件位于 &nbsp; ,MDK可以正常使用printf,突发奇想,直接把MDK中调用的stdio.h文件,覆盖AT32 IDE环境下调用的stdio.h文件。结果发现还是不行。</p>

<p >于是开始百度并发帖求助,找了2天也没有找到合适的解决方法,于是就开始了自己的摸索过程。</p>

<p >查了很多资料,都说需要printf重定向。研究源码发现,在 &nbsp; 文件中实现了将C库中的printf函数retargets到USART上,如图40所示。</p>

<p > &nbsp;图40 at32wb415_board.c源码</p>

<p >&nbsp;</p>

<p >但是通过验证,这段代码没有执行。</p>

<p >然后,开始考虑将以前兆易(GD)环境下使用的 &nbsp; 拷过来使用, &nbsp; ,并根据AT32 IDE新建工程时生成的宏定义参数进行修改,例如:USART_TDBE_FLAG&nbsp; 。这些USART FLAG宏定义在USART头文件中 &nbsp; ,如图41所示。图41 USART头文件中FLAG宏定义</p>

<p >&nbsp;</p>

<p >USART_TDBE_FLAG:USART发送数据Buffer空标志。</p>

<p >最后,可以在main.c文件中添加 &nbsp; ,实现对串口收发数据应如何缓冲的设置,如果不设置则采用默认情况(测试了一下默认情况肯定不是_IOFBF全缓冲模式)。</p>

<p >关于setvbuf函数的详细介绍请参阅参考资料 C库函数-setvbuf。</p>

<p>&nbsp;</p>

<div></div>

<div></div>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【雅特力AT32WB415评测】4. AT32 IDE下printf的实现(printf重定向)