我正在尝试将SD/MMC Card Application from NXP.用于LPC1768芯片。
但我在使用全局数据缓冲区方面遇到了一些麻烦。
在文件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 :(得分:2)
GDB输出表明函数buf
中的符号SD_RecvDataBlock()
是 local ;它指的是传递给函数的参数(它是null)而不是你的(弱名称)全局。