首先這玩意兒分兩種:
線上空閒、無資料狀態為常高電平,故邏輯低定義為起始位。
停止位:
波特率:bit rate 就是位/秒的概念,就是1秒傳多少位的概念。常見的波特率有哪些呢?
這裡須注意的要點:
兩邊分別代表兩個通訊的裝置,單從uart程式設計的角度講收發不需要物理同步握手,想發就發。圖中箭頭代表資料資訊流向。rx表示接收資料,tx表示傳送資料。資料總是從傳送端傳遞到接收端,這就是為啥rx連線tx,tx連rx的原因。
同步簡單說,收發不可自如,不可以想發就發,收發需要利用硬體io口進行握手,rts/cts就是用於同步的握手訊號:
這個對於普通應用而言並不常見,這裡不做詳細展開,需要用到的時候只需要對應收發時控制握手訊號即可。
對於不同的微控制器,其硬體體系各異,暫存器也差異很大,但是從收發程式設計策略角度而言,常見有下面三種方式:
這裡以偽**方式描述一下:
/*查詢傳送位元組*/
void uart_send_byte( uint8 ch )
/*傳送乙個緩衝區*/
void uart_send_buffer( uint8 *pbuf,uint8 size )
中斷接收需要考慮的幾個要點:
#define frame_size (128u)
static uint8 tx_buffer[frame_size];
static uint8 tx_index = 0;
static uint8 tx_length = 0;
static uint8 rx_buffer[frame_size];
static uint8 rx_index = 0;
static bool rx_frame_done = false;
void prepare_frame( uint8 * pbuf, uint8 size )
bool uart_start_sending( uint8 * pbuf, uint8 size )
void uart_tx_isr( void )
{ if( tx_index還需要考慮的是,對於uart硬體層面的出錯處置,以stm32為例,就可能有下面的錯誤可能發生:
另外不同的微控制器其底層硬體實現差異也不較大,比如有的硬體傳送緩衝是單位元組的緩衝,有的則具有fifo,這些在選型程式設計時都需要綜合考慮。
dma傳送模式而言,大致分這樣幾步:
dma接收模式而言,大致分這樣幾步:
程式優化總結 萬變不離其宗
程式優化總結 萬變不離其宗 空間優化,時間優化.目前我們就在pc上,所以主要目標是時間優化.第一步 演算法結構層面的優化.搞懂演算法,從巨集觀層面優化結構,能在乙個層面做的事情,盡量合併一起做 第二步 c語言層面的優化.從函式,語言層面優化程式 1.減少記憶體訪問 2.合併運算 3.空間換時間 4....
程式優化總結 萬變不離其宗
空間優化,時間優化.目前我們就在pc上,所以主要目標是時間優化.第一步 演算法結構層面的優化.搞懂演算法,從巨集觀層面優化結構,能在乙個層面做的事情,盡量合併一起做 第二步 c語言層面的優化.從函式,語言層面優化程式 1.減少記憶體訪問 2.合併運算 3.空間換時間 4.迴圈合併 展開等處理 5.查...
李開復 演算法的力量 萬變不離其宗
程式語言雖然該學,但是學習計算機演算法和理論更重要,因為計算機演算法和理論更重要,因為計算機語言和開發平台日新月異,但萬變不離其宗的是那些演算法和理論,例如資料結構 演算法 編譯原理 計算機體系結構 關係型資料庫原理等等 演算法是電腦科學領域最重要的基石之一,但卻受到了國內一些程式設計師的冷落。許多...