打印
[Kinetis]

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

[复制链接]
6756|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 韬铸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 (136.88 KB )

1.jpg

2.jpg (199.51 KB )

2.jpg

3.jpg (143.3 KB )

3.jpg

4.jpg (156.67 KB )

4.jpg

5.jpg (71.84 KB )

5.jpg

mk22fx512vlh12_printf_error.zip

221.99 KB

custom_mk22f120m.rar

699.62 KB

相关帖子

沙发
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 | 只看该作者
第一次发帖,怎么就结贴了呢?

使用特权

评论回复
5
FSL_TICS_ZJJ| | 2015-7-7 09:21 | 只看该作者
韬铸88 发表于 2015-7-6 16:09
自己的板子,不使用printf函数,直接给串口发送数据,是可以从串口发送输出到串口调试助手的。 ...

你PE里面选择的是什么模块?
你选择console模块,这个是带printf的。

使用特权

评论回复
6
quray1985| | 2015-7-7 14:52 | 只看该作者
看下串口设置的对不对,其实是波特率的设置有无问题

使用特权

评论回复
7
韬铸88|  楼主 | 2015-7-7 16:00 | 只看该作者
quray1985 发表于 2015-7-7 14:52
看下串口设置的对不对,其实是波特率的设置有无问题

串口设置应该没有问题的,因为不用printf函数,直接给串口驱动程序函数发数据,是可以发送到串口调试助手的。

使用特权

评论回复
8
韬铸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 ,难道是初始化的时候,需要做什么设置,串口重定向?麻烦帮看一下,我上传的图片和代码,给指点一下,谢谢!

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-7-7 17:14 | 只看该作者
韬铸88 发表于 2015-7-7 16:24
你好,但是不知道为什么,就是不行呢。我没有使用官方的板级支持包,直接是New-> kinetis Project -> Pr ...

不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后添加Console模块,模块中配置好引脚和波特率。
但是注意,你下面的引脚要选对了,还有串口助手到引脚的连接没有问题,确保硬件都正确,然后再尝试代码。

使用特权

评论回复
10
韬铸88|  楼主 | 2015-7-7 17:35 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

引脚对的,硬件也没有问题,要不怎么直接调用底层串口驱动,就可以发数据到串口调试助手呢。那好,我发工程给你看看。谢谢!

使用特权

评论回复
11
韬铸88|  楼主 | 2015-7-7 17:54 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

如何发送工程给你呢?

使用特权

评论回复
12
韬铸88|  楼主 | 2015-7-8 07:30 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-7 17:14
不需要的,你把你工程上传给我吧,我有空帮你看看。
这样,你不加MQX Lite,直接PE的新建一个工程,然后 ...

工程测试代码已经附上,有空帮看一下,谢谢!

使用特权

评论回复
13
lovecat2015| | 2015-7-8 08:36 | 只看该作者
这个Eclipse的界面,感觉有些地方设置的不对

使用特权

评论回复
14
韬铸88|  楼主 | 2015-7-8 10:25 | 只看该作者
lovecat2015 发表于 2015-7-8 08:36
这个Eclipse的界面,感觉有些地方设置的不对

哪里不对?

使用特权

评论回复
15
韬铸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()函数调用底层的驱动了呢?再查……

使用特权

评论回复
16
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

使用特权

评论回复
17
韬铸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)
{

嗯嗯,问题解决了,我的也可以打印了,多谢多谢。

使用特权

评论回复
18
bbstr| | 2015-7-8 17:50 | 只看该作者
搞这么复杂,直接gcc+newlib+write接口就可以重定向到串口了,还可以malloc,sprintf这些... 除了很占flash外,其他都还好

使用特权

评论回复
19
quray1985| | 2015-7-21 19:52 | 只看该作者
谢谢各位大侠的指点

使用特权

评论回复
20
小智匠| | 2015-10-14 20:49 | 只看该作者
请问是怎么解决的,我也遇到了同样的问题?纠结我两天了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

126

帖子

1

粉丝