在stm32f767中使用fmc外掛dram

我们的歌谣發表於2024-03-12

`uint16_t buf[6] attribute((at(0xd0000000))) = {0}; //將緩衝陣列分配到外部dram中。

void TestDram(void)
{
uint16_t xxx[6] = {0x1111,0x2222,0x3333,0x4444,0x5555,0x6666};
for(int i = 0; i < 5;i++)
{
buf[i] = xxx[i];
}

for(int i = 0; i < 5; i++)
{
	if (xxx[i] != buf[i])
	{
		USART_SendByte((unsigned char*)("error"),5);
	}
	else
	{
		USART_SendByte((unsigned char*)("ok"),2);
	}
}

}
`

keil環境,使用預設編譯器5.然後這樣寫一個陣列,用buf[i]訪問就會進入匯流排錯誤,但是用p = (char)0xd0000000;然後(p+i)訪問就不會產生匯流排錯誤。不太懂是啥原理?mpu保護,編譯器本身bug,但這樣做就對了,折騰了一天。。。。。

相關文章