[Kinetis] 如何解决printf从串口打印输出

[复制链接]
 楼主| 韬铸88 发表于 2015-7-6 15:57 | 显示全部楼层 |阅读模式
本帖最后由 韬铸88 于 2015-7-8 07:29 编辑

使用KDS PE 工具编写mK22f120m程序时,用MQX Lite系统,发现printf函数无法从串口打印输出,哪位指点一下,是怎么回事?怎么从定向为串口打印输出?printf()函数是如何调用串口底层驱动的呢?打开stdio.h头文件,又跟踪不到是怎么调用的。为表述更清楚一些,上一些图片看看,附加console模块,PE生成的代码。调试的时候,单步到任务函数内printf()函数时,执行单步,就出现“No source available for "std.isra.0() at 0x40b0" "的提示。自己做的板子,没有使用官方的开发板。芯片是mk22fx512vlh12。使用J-Link调试工具SWD模式。


现在附上工程测试代码,望各位看一下问题所在,谢谢!
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg

mk22fx512vlh12_printf_error.zip

221.99 KB, 下载次数: 4

custom_mk22f120m.rar

699.62 KB, 下载次数: 4

FSL_TICS_ZJJ 发表于 2015-7-6 16:00 | 显示全部楼层
不能打印需要检查下你的串口配置对不对。
还有你用的是官方板子还是自己的板子?
 楼主| 韬铸88 发表于 2015-7-6 16:09 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-6 16:00
不能打印需要检查下你的串口配置对不对。
还有你用的是官方板子还是自己的板子?
...

自己的板子,不使用printf函数,直接给串口发送数据,是可以从串口发送输出到串口调试助手的。
 楼主| 韬铸88 发表于 2015-7-6 16:57 | 显示全部楼层
第一次发帖,怎么就结贴了呢?
FSL_TICS_ZJJ 发表于 2015-7-7 09:21 | 显示全部楼层
韬铸88 发表于 2015-7-6 16:09
自己的板子,不使用printf函数,直接给串口发送数据,是可以从串口发送输出到串口调试助手的。 ...

你PE里面选择的是什么模块?
你选择console模块,这个是带printf的。
quray1985 发表于 2015-7-7 14:52 | 显示全部楼层
看下串口设置的对不对,其实是波特率的设置有无问题
 楼主| 韬铸88 发表于 2015-7-7 16:00 | 显示全部楼层
quray1985 发表于 2015-7-7 14:52
看下串口设置的对不对,其实是波特率的设置有无问题

串口设置应该没有问题的,因为不用printf函数,直接给串口驱动程序函数发数据,是可以发送到串口调试助手的。
 楼主| 韬铸88 发表于 2015-7-7 16:24 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-7 09:21
你PE里面选择的是什么模块?
你选择console模块,这个是带printf的。

你好,但是不知道为什么,就是不行呢。我没有使用官方的板级支持包,直接是New-> kinetis Project -> Project name ->Processors mk22fx512xxx12 -> 选择Processor Expert -> GNU C Compiler。然后就使用PE,添加各个模块和MQX Lite ,难道是初始化的时候,需要做什么设置,串口重定向?麻烦帮看一下,我上传的图片和代码,给指点一下,谢谢!
FSL_TICS_ZJJ 发表于 2015-7-7 17:14 | 显示全部楼层
韬铸88 发表于 2015-7-7 16:24
你好,但是不知道为什么,就是不行呢。我没有使用官方的板级支持包,直接是New-> kinetis Project -> Pr ...

不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后添加Console模块,模块中配置好引脚和波特率。
但是注意,你下面的引脚要选对了,还有串口助手到引脚的连接没有问题,确保硬件都正确,然后再尝试代码。
 楼主| 韬铸88 发表于 2015-7-7 17:35 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

引脚对的,硬件也没有问题,要不怎么直接调用底层串口驱动,就可以发数据到串口调试助手呢。那好,我发工程给你看看。谢谢!
 楼主| 韬铸88 发表于 2015-7-7 17:54 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

如何发送工程给你呢?
 楼主| 韬铸88 发表于 2015-7-8 07:30 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

工程测试代码已经附上,有空帮看一下,谢谢!
lovecat2015 发表于 2015-7-8 08:36 | 显示全部楼层
这个Eclipse的界面,感觉有些地方设置的不对
 楼主| 韬铸88 发表于 2015-7-8 10:25 | 显示全部楼层
lovecat2015 发表于 2015-7-8 08:36
这个Eclipse的界面,感觉有些地方设置的不对

哪里不对?
 楼主| 韬铸88 发表于 2015-7-8 10:48 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

@FSL_TICS_ZJJ  谢谢你啦
还真是如此,不加MQX Lite,直接PE,新建一个工程,添加Console模块,printf()函数是可以从串口打印输出。现在问题就为什么加MQX Lite系统之后,为什么就不行了呢,这个系统在哪里改了printf()函数调用底层的驱动了呢?再查……
FSL_TICS_ZJJ 发表于 2015-7-8 17:01 | 显示全部楼层
我新建了个,加了MQX_LITE,然后在task里面是这样写的:
void Task1_task(uint32_t task_init_data)
{
  int counter = 0;

  while(1) {
    counter++;

    /* Write your code here ... */
    printf("test_task\n");
  }
}

然后我能一直打印test_task
 楼主| 韬铸88 发表于 2015-7-8 17:35 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-8 17:01
我新建了个,加了MQX_LITE,然后在task里面是这样写的:
void Task1_task(uint32_t task_init_data)
{

嗯嗯,问题解决了,我的也可以打印了,多谢多谢。
bbstr 发表于 2015-7-8 17:50 | 显示全部楼层
搞这么复杂,直接gcc+newlib+write接口就可以重定向到串口了,还可以malloc,sprintf这些... 除了很占flash外,其他都还好
quray1985 发表于 2015-7-21 19:52 | 显示全部楼层
谢谢各位大侠的指点
小智匠 发表于 2015-10-14 20:49 | 显示全部楼层
请问是怎么解决的,我也遇到了同样的问题?纠结我两天了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

126

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部