使用avr-libc的标准IO流调试程序

       一直以来玩AVR都是将程序编译好直接下载到Flash,出现问题也是重新编写下载从来没有使用过仿真器之类的东东。前几天做串口的时候想到如何将串口通信数据直接显示在计算机上。因为我知道keil是可以的,可以直接使用printf函数将要显示的数据打印到串口(虚拟的 在keil里直接看到)那岂不是很爽。。。。

     知道单片机中的存储器都非常金贵所以感到printf函数应该和标准C的不同,于是查阅了芯艺老师的教程(AVR与GCC)了解 马上敲了程序编译 结果不行!郁闷上网查了才知道我的编译器是20060421的,不兼容原来的程序 所以根据芯艺老师的指点修改了程序。 OK,编译通过 下载 。。。。结果还是没有:( 我的编译环境是avrstudio+winAVR) 难道AVRSTUDIO中没有观察串口显示的地方?这不可能吧!不过我费了好大劲还是没有找到?!哎 换个思路,既然AVRstudio中没有集成串口观察的地方,那也许是直接通过硬件串口输出呢?!马上连接好硬件,打开串口调试工具 上电 OK!

 

下面是程序,很简单 就是avr-libc的例程

  1. #include<avr/io.h>  // 这一行是我自己增加的 呵呵没它不行啊 
  2. #include<stdio.h> 
  3. static int uart_putchar(char c, FILE *stream);
  4. static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,_FDEV_SETUP_WRITE);
  5. static int uart_putchar(char c, FILE *stream)
  6. {
  7.     if (c == ’/n’)
  8.     uart_putchar(’/r’, stream);
  9.     loop_until_bit_is_set(UCSRA, UDRE);
  10.     UDR = c;
  11.     return 0;
  12. }
  13. int main(void)
  14. {
  15.     init_uart();
  16.     stdout = &mystdout;
  17.     printf("Hello, world!/n");
  18.     return 0;
  19. }

哦 还有一个串口的初始化程序 忘了贴了 补上

  1. init_uart(void)
  2. {
  3.     UBRRL=25;         // 4M晶体,9.6kpbs
  4.     UCSRB|=(1<<TXEN);
  5.     UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1));
  6. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值