收藏 分享(赏)

关于 WinAVR-20060421 中的标准输入输.pdf

上传人:精品资料 文档编号:10285126 上传时间:2019-10-28 格式:PDF 页数:2 大小:60.58KB
下载 相关 举报
关于 WinAVR-20060421 中的标准输入输.pdf_第1页
第1页 / 共2页
关于 WinAVR-20060421 中的标准输入输.pdf_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、AV R单片机GCC程序设计补充文档 (003) http:/ 关于WinAVR-20060421中的标准输入输出 WinAVR20060421对标准输入输出对象连接设备的形势进行了改进,导致本书中多个例子在WinAVR20060421中无法编译。下面先解释新版本中标准输入输出的使用方法。 先看avr-libc使用手册提供的例子: #include static int uart_putchar(char c, FILE *stream); static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRIT

2、E); static int uart_putchar(char c, FILE *stream) if (c = n) uart_putchar(r, stream); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; int main(void) init_uart(); stdout = printf(“Hello, world!n“); return 0; 在默认情况下,fdevopen 以及浮点数转换的printf和scanf都需要动态内存分配(malloc),这将连接动态内存分配模块,导致代码膨胀,如果系统中不使用浮点数转

3、换,通过使用上面的方法连接设备可以避免连接动态内存分配模块,这对于资源有限的单片机系统是难得的。 替代fdevopen函数的是宏FDEV_SETUP_STREAM ,它将初始化一个标准的i/o对象(上例中为mystdout),由于这个对象是用户定义的变量,固然无需动态分配内存。FILE是标准I/O流使用的数据结构,stdin,stdout,stderr均为指向FILE结构的指针。正如上面的main函数中那样标准流对象stdout 指向用户定义的流对象数据结构后printf可以正常使用了。此时不能用fclose关闭,如果需要关闭的话使用fdev_close。 关于宏FDEV_SETUP_STRE

4、AM和相关参数说明请参考avr-libc用户手册。下面是书中相关示例的三种处理方法: 1. 使用WinAVR20060421之前版本编译。 2. 包含stdio.h文件之前定义宏 _STDIO_FDEVOPEN_COMPAT_12 如: #define _STDIO_FDEVOPEN_COMPAT_12 #include 。 这一种方法与前一种方法效果是一样的。意思是该宏的意思是兼容avr-libc1.2版本。 3修改代码使用新的方法连接设备. AV R单片机GCC程序设计补充文档 (003) http:/ 第一步:在全局声明FILE变量并用宏FDEV_SETUP_STREAM初始化 static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); 第二步:改变uart_putchar函数参数列表 int uart_putchar(char c, FILE *stream) 第三步:用stdout = 替换fdevopen的调用。 第三种方法(也是建议在新程序中使用的)它生成的代码量会比前两种方法生成的会更小。 时间仓促就写到这里了,如有错误之处请到本书网站留言指正!谢谢。 版权所有 芯艺设计室 保留所有权利 Copyright All Rights Reserved

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报