1. 程式人生 > >一個因xdata聲明引起的隱含錯誤

一個因xdata聲明引起的隱含錯誤

靜態 bytes 全局變量 結果 spi nbsp 註意 一個 關鍵字

我們知道一般增強型c51自身的RAM只有128BYTES,根本不夠用,所以一般在定義全局變量,靜態變量時都要用XDATA作為關鍵字修飾數據的的存儲類型。但要註意的是,定義和聲明一定要一致,不然出現錯誤很隱蔽,很難發現這個問題。拿我一個項目中的從外部SPI FLASH接口讀出數據的教訓來舉例:

測試發現如果傳遞一個結構體變量的地址(或指針)就能得到結果,而實際的接收BUFF是一個結構體數組,不管我一什麽方式引用其某個元素的首地址就是得不到結果,一直在糾結結構體數組和結構體變量調用的區別的泥淖裏出不來。後來發現根本就不是這個事兒,根本原因是因為聲明的時候少了關鍵字XDATA出現一直監控不到讀出的數據。

一個因xdata聲明引起的隱含錯誤