【学习笔记】解放串口之重定向printf输出到IAR虚拟终端

2020-02-19 21:13发布

本帖最后由 FSL_FAE_JiCheng 于 2013-11-26 10:26 编辑

    好长时间没更新了,这次再上点“硬菜”(咳咳,个人观点,反正我觉着挺硬的,呵呵)……

    通过串口打印调试信息或者实现上下位机交互是我们最常使用的调试手段之一,毕竟实现起来无论是硬件成本(接出两根线Txd和Rxd,外加一个电平转换芯片)还是软件成本(下位机写好UART驱动,上位机直接超级终端或者一些第三方串口调试助手)都是相对较低的,所以这种方式还是灰常受广大“攻城师”们欢迎的。不过如果由于I/O资源紧缺串口被用做其他用处或者板子直接没有引出串口的话(是不是产生共鸣了,呵呵),那该怎么办呢?

    当然,所谓时代不同了(liao)(我咋顺口想说“男女都一样呢”,呵呵,哎,都是生在旧社会长在红旗下的孩子啊),随着嵌入式开发生态系统越来越完善,目前也是有越来越多的Poweful开发工具支持丰富的调试功能(支持打印调试信息和交互等),但是涉及到一些版权的问题价格上还是有点小贵的(对一些小企业来说还是难以接受的),所以这个时候就需要我们动动脑筋去摸索摸索其他的方法(所谓路是探索出来的),事实证明破釜沉舟下人的潜力是无限的,呵呵,这里就分享一个折衷的办法去解决大家一直苦恼的问题,即使用IAR虚拟的串口终端来实现信息的交互和打印,下面进入正题:

测试平台:IAR6.6 + FRDM KE02开发板(我目前手里有就拿这个了,其他板子都可以放心用的,呵呵)
测试代码:KE驱动库(KEXX_DRIVERS_V1.0.1_DEVDkexx_drv_lib_release_r1.0.1uildiarke02platinum)

这里稍微提一句,我测试的是KE驱动库的代码,但是实际上只要你看懂了我下面的解决方法(授之以渔而不是鱼),其他代码都是类似的。

1)打开KE02 platinum的IAR工程,进入到platinum.c文件,找到main函数如下图1,可以看到其调用了printf打印函数,而该工程是默认调用底层串口的,我们跳转到该函数的定义如图2,再继续跳转到out_char的函数定义如图3,这下就屡清楚了,我们可以很直观的看到工程默认是调用UART底层的,呵呵,下面我们就要动手改造它对printf进行重定向;

Capture6.PNG (16.34 KB, 下载次数: 0) 下载附件 2013-11-26 10:23 上传

呼,终于写完了,呵呵,看完之后是不是有种跃跃欲试的兴奋呢,哈哈,enjoy it~

附件为我修改好后的工程,仅供参考~
KE Driver platinum.zip (194.69 KB, 下载次数: 18) 2013-11-26 10:25 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
子鱼
1楼-- · 2020-02-20 12:47
不错 学习一下
reflecter
2楼-- · 2020-02-20 13:22
这两天正要挖掘下IAR EW的串口交互,谢谢
FSL_FAE_JiCheng
3楼-- · 2020-02-20 18:54
 精彩回答 2  元偷偷看……
FSL_FAE_JiCheng
4楼-- · 2020-02-20 20:16
本帖最后由 FSL_FAE_JiCheng 于 2013-11-26 22:51 编辑
error_dan 发表于 2013-11-26 14:23
不就是SWO么。。。残废调试器都没法用的。。。


本篇文章使用的方法不是用的SWO
huangqi412
5楼-- · 2020-02-21 00:07
跟那个KEIL下调试打印是不是一回事?
http://www.amobbs.com/thread-5516711-4-1.html
FSL_FAE_JiCheng
6楼-- · 2020-02-21 02:56
huangqi412 发表于 2013-11-28 13:42
跟那个KEIL下调试打印是不是一回事?
http://www.amobbs.com/thread-5516711-4-1.html

这个跟那个不一样,那个是使用SWO,这个是调用IAR系统自定义的printf

一周热门 更多>