指向片上SRAM的全局数据缓冲区指针

时间:2014-10-04 03:46:32

标签: pointers memory embedded global

我正在尝试将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?

1 个答案:

答案 0 :(得分:2)

GDB输出表明函数buf中的符号SD_RecvDataBlock() local ;它指的是传递给函数的参数(它是null)而不是你的(弱名称)全局。