`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,但這樣做就對了,折騰了一天。。。。。