我試圖運行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?
這個編譯器的int大小是什麼? – 2014-10-04 03:55:10
我正在使用uVision 4.74,int大小爲32位 – zenprogrammer 2014-10-04 03:59:13
以下情況之一似乎正在發生:運行時不會初始化buf(在某些裸板環境中,例如您可能在LPC1768上運行的程序,需要確保有足夠的運行時執行全局初始化)或者是覆蓋buf變量。顯然'buf'不是'0x2007C000'。既然你有一個可用的調試器,你應該瀏覽一下程序,看看'buf'的值,以確保它在'main()'開始時被初始化,然後看看它在哪裏變化。 – 2014-10-04 04:38:12