我正在尝试在微 Controller 上打印一段内存。
它提示这条线:
stringLength += sprintf(buffer + stringLength, "0x%X, ", *(startAddress + i));
由于:
*(startAddress + i)
为什么这不起作用?它不应该只给我地址的值吗?
在 ARM 微 Controller 上工作,它会跳转到 HardFault_Handler()(通常表示非法内存访问)。
我怎样才能明智地获取内存位置的值?
整个函数:
void printMemory(uint32_t *startAddress, uint32_t lengthInBytes)
{
uint32_t stringLength = 0;
uint32_t i;
char buffer[1000];
uint32_t start = (uint32_t) startAddress;
for (i = start; i < (start + lengthInBytes); i++)
{
if ((i % 10) == 0)
{
stringLength += sprintf(buffer + stringLength, "\r\n");
}
stringLength += sprintf(buffer + stringLength, "0x%X, ", *(startAddress + i));
}
//Add line termination.
stringLength += sprintf(buffer + strlen(buffer), "%c", '\0');
//Printf buffer.
printf("%s", &buffer[0]);
}
编辑:
工作示例:
void printMemory(uint32_t startAddress, uint32_t lengthInBytes)
{
uint32_t i;
char buffer[1000];
uint32_t stringLength = 0;
uint8_t *start;
//Create a uint8_t pointer to address.
start = (uint8_t *) startAddress;
for (i = 0; i < lengthInBytes; i++)
{
if ((i % 10) == 0)
{
stringLength += sprintf(buffer + stringLength, "\r\n");
}
stringLength += sprintf(buffer + stringLength, "0x%X, ", *(start + i));
}
//Add line termination.
stringLength += sprintf(buffer + strlen(buffer), "%c", '\0');
//Printf buffer.
printf("%s", &buffer[0]);
}
最佳答案
你犯了一个错误:
i
从 start
开始,也就是 startAddress
,所以在第一次迭代中你正在获取:
*(startAddress + startAddress)
关于c - 地址的值(value)。给出异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407353/