當前位置:編程學習大全網 - 編程軟體 - 壹個單片機UART接收與內存的問題,如果我定義了數組UART[60]用於接收UART接收來的數據,每收壹個數據.....

壹個單片機UART接收與內存的問題,如果我定義了數組UART[60]用於接收UART接收來的數據,每收壹個數據.....

超過60以後,指針uart_point 會指向UART[59]的下壹個連續內存地址。假設UART[0]的地址是0x0000,編譯器會分配壹個連續的內存塊,即0x0000~0x0059,當指針的值是0x0059,即指向最後壹個變量UART[59]時,再加1就指針值就變成0x0060了,這個內存地址不屬於UART,可能會被編譯器分配給其它的變量。如果妳通過指針改變了它的值,很明顯,當妳的UART運行時就會發生壹些若明其妙的問題,而且現象可能各式各樣,無跡可循。解決的辦法是定義壹個全局變量,用來指示接收的字符數量,在串口接收中斷中檢測接收數量是否超規,當字符數量達到指定值時若還有數據則把多余的部份丟棄,如下:

1:定義串口緩存數量 #define UARTCHARNUM 60

2:定義UART[UARTCHARNUM]和字符數量指示變量inuartnum

3:定義壹系列操作函數,如:返回當前接收字符數量、復位字符數量等函數

4:在串口接收中斷中檢查接收字符數量是否達到指定值,若有則多余字符丟棄

其它語句。。。

if(inuartnum<UARTCHARNUM )

{

UART[inuartnum]=SBUF;

inuartnum++;

}

我就是這麽做的,使用內存變量指針壹定要記得給它加個檢測,防止出現不可預知的錯誤,這種錯誤Keil C等編譯器暫時沒法自動檢測出來,只能自已想辦法。

  • 上一篇:學習PHP需要什麽基礎?
  • 下一篇:58特混編隊的編程
  • copyright 2024編程學習大全網