晶元:atmega168p
晶振:8m
兩種方法:
優點:使用非常方便
缺點:占用rom和ram空間比較多
這一句是關鍵
file uartio = fdev_setup_stream(uart_putchar, uart_getchar, _fdev_setup_rw);
// 波特率
#define baud 9600
#include
stdout = &uartio;這一句比較重要
// 串列埠初始化
void uartinit()
//輸出:
printf("%d", 123);
//輸入:
//輸入時,程式會停在scanf,等待從串列埠輸入資料
scanf("%c", &temp);
優點:占用rom和ram相對第一種方法少了很多
缺點:要自定義printf函式
// 輸出乙個字元
static void uart_putchar(char c)
同方法1
同方法1
只是少了stdout = &uartio;這一句
// 從串列埠輸出字串,引數可變
void uart_printf(const char *fmt, ...)
switch (*++fmt)
break;
// %d
case 'd':
d = va_arg(ap, int);
itoa(d, buf, 10);
for (s = buf; *s; s++)
break;
// %c
case 'c':
// default argument promotion
// 形參列表中有...,實參的char型別被提公升為int型
c = (char)va_arg(ap, int);
uart_putchar(c);
break;
default:
uart_putchar(*fmt);
break;
}fmt++;
}va_end(ap);
}
當然也可以在uart_printf中使用更簡潔的語句實現,如:
va_start(ap, fmt);
vsprintf(buf, fmt, ap);
va_end(ap);
uart_putstr(buf);
但這樣占用的rom和ram空間同樣會占用較多
// 串列埠接收中斷服務程式
isr(usart_rx_vect)
自定義 如何自定義協議
何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...
自定義控制項 自定義鐘錶
private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...
自定義控制項及自定義屬性
自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...