⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avrmicrocontrollerintputoutputanalysis.txt

📁 avr单片机下输入输出分析
💻 TXT
字号:
#include <stdio.h>
static int uart_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,_FDEV_SETUP_WRITE);
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 = &mystdout;
printf("Hello, world!\n");
return 0;
}
在默认情况下,fdevopen 以及浮点数转换的printf和scanf 都需要动态内存分配(malloc),
这将连接动态内存分配模块,导致代码膨胀,如果系统中不使用浮点数转换,通过使用上面
的方法连接设备可以避免连接动态内存分配模块,这对于资源有限的单片机系统是难得的。
替代 fdevopen 函数的是宏FDEV_SETUP_STREAM ,它将初始化一个标准的i/o 对象(上
例中为mystdout),由于这个对象是用户定义的变量,固然无需动态分配内存。FILE 是标准
I/O 流使用的数据结构,stdin,stdout,stderr 均为指向FILE 结构的指针。正如上面的main 函
数中那样标准流对象stdout 指向用户定义的流对象数据结构后printf 可以正常使用了。此时
不能用fclose 关闭,如果需要关闭的话使用fdev_close.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -