打印
[技术问答]

关于新唐M0多串口的使用

[复制链接]
2038|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
danyuyongren|  楼主 | 2017-6-28 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新唐M0有多个串口,比如我使用串口0,可以将#define DEBUG_PORT   UART0重定向就可以使用printf这个函数,现在比如我的程序中会使用两路串口或者3路串口,我为什么不能直接修改这个宏定义呢,比如

int main()
{
      #undef DEBUG_PORT
      #define DEBUG_PORT   UART1
       
      printf("I am uart1\n");

      #undef DEBUG_PORT
      #define DEBUG_PORT   UART0

      printf("I am uart0\n");

      return 0;
}

意思就是printf重定向串口1后再恢复到使用串口0,结果发现好像不行的样子,为什么呢
沙发
yiyigirl2014| | 2017-6-28 21:27 | 只看该作者
没试过。。

使用特权

评论回复
板凳
yiyigirl2014| | 2017-6-28 21:28 | 只看该作者
预编译应该是编译后就固定了,没法重新选择。

使用特权

评论回复
地板
a_ziliu| | 2017-6-29 09:42 | 只看该作者
可以自已用變數定義要從那一個comport丟字串,要呼叫printf之前,修改變數。
printf呼叫uart底層的部份,去看retarget.c。

使用特权

评论回复
5
天灵灵地灵灵| | 2017-6-29 10:03 | 只看该作者
楼主是想同时使用两个串口?其中一个负责打印消息?

使用特权

评论回复
6
danyuyongren|  楼主 | 2017-6-29 17:35 | 只看该作者
天灵灵地灵灵 发表于 2017-6-29 10:03
楼主是想同时使用两个串口?其中一个负责打印消息?

是啊,而且还想两个串口都可以调用printf,这样可以直接答应各种不同类型的数据

使用特权

评论回复
7
danyuyongren|  楼主 | 2017-6-29 17:39 | 只看该作者
a_ziliu 发表于 2017-6-29 09:42
可以自已用變數定義要從那一個comport丟字串,要呼叫printf之前,修改變數。
printf呼叫uart底層的部份,去 ...

我在windows下试过下面的代码,
#define M 12

int main()
{
        #ifndef M
        #define M 5
        #endif
       
        printf("%d\n",M);
       
        #ifdef M
        #undef M
        #define M 10
        #endif
        printf("%d\n",M);
        return 0;       
}

结果可以打印出12和10,所以我以为宏是可以改变的。估计还是如同楼上所说,编译后被固定了吧

使用特权

评论回复
8
643757107| | 2017-6-30 10:59 | 只看该作者
一般串口0是工作用,串口1是打印消息用。

使用特权

评论回复
9
643757107| | 2017-6-30 10:59 | 只看该作者
预编译不可以这么使用的,预编译后,只有一个选项被编译了,另外一个丢弃,所以你不可能在运行时候改变预编译的内容。。

使用特权

评论回复
10
danyuyongren|  楼主 | 2017-7-4 17:09 | 只看该作者
643757107 发表于 2017-6-30 10:59
预编译不可以这么使用的,预编译后,只有一个选项被编译了,另外一个丢弃,所以你不可能在运行时候改变预编 ...

感谢你的回复,估计我只能从另外一种办法下手了,只是感觉printf这个重定向应该还是可以供多个串口调用的,我自己再试试,先谢谢你了

使用特权

评论回复
11
huangcunxiake| | 2017-7-4 23:49 | 只看该作者
楼主研究出来新招式了别忘了分享。

使用特权

评论回复
12
643757107| | 2017-7-7 08:42 | 只看该作者
期待楼主搞定所有问题,分享成果。

使用特权

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

本版积分规则

2

主题

8

帖子

1

粉丝