2014-10-04 64 views
1

我試圖運行SD/MMC Card Application from NXP.它用於LPC1768芯片。片上SRAM的全局數據緩衝區指針

但我有一些全局數據緩衝區的麻煩。

在main.c文件數據緩衝區指針片上SRAM

/* data buffer */ 
uint8_t *buf = (uint8_t *)0x2007C000; // 16KB 

我編譯並在我baord運行的程序,程序可以檢測我的SD卡和打印「2.0或更高版本高/擴展容量SD卡「通過uart。

但隨後程序上GDB錯誤消息來訪問數據緩衝區的第一次嘗試終止

lpc1768.cpu -- clearing lockup after double fault 

Program received signal SIGINT, Interrupt. 
0x100006fe in SD_RecvDataBlock (buf=0x0, len=512) at sd.c:502 
502   buf[i] = SPI_RecvByte(); 

當在gdb BUF的打印價值,這是我得到

(gdb) p buf 
$17 = (uint8_t *) 0x0 
(gdb) p &buf 
$18 = (uint8_t **) 0x10004010 
(gdb) p *buf 
$19 = 176 '°' 

爲什麼程序不能訪問代碼中指出的指向內存位置0x2007C000?

+0

這個編譯器的int大小是什麼? – 2014-10-04 03:55:10

+0

我正在使用uVision 4.74,int大小爲32位 – zenprogrammer 2014-10-04 03:59:13

+0

以下情況之一似乎正在發生:運行時不會初始化buf(在某些裸板環境中,例如您可能在LPC1768上運行的程序,需要確保有足夠的運行時執行全局初始化)或者是覆蓋buf變量。顯然'buf'不是'0x2007C000'。既然你有一個可用的調試器,你應該瀏覽一下程序,看看'buf'的值,以確保它在'main()'開始時被初始化,然後看看它在哪裏變化。 – 2014-10-04 04:38:12

回答

2

GDB輸出指示功能SD_RecvDataBlock()內的符號buf本地;它指的是參數傳遞給函數(它是null)而不是你的(弱命名的)全局函數。

+0

非常漂亮。 – 2014-10-05 09:36:40