我正在研究16位微控制器的一些C代碼。當我在目標上調試應用程序時,最終會碰到AddressError ISR。我閱讀了數據手冊,它說如果您嘗試讀取或寫入對齊到奇數內存地址的16位值,就會發生這種情況。我想我理解這意味着什麼,但這看起來不對。並不意味着如果我要做出這樣的結構:什麼導致16位體系結構上的地址錯誤?
struct foo{
uint8_t thing1;
uint16_t thing2;
};
我永遠不會讀或寫入thing2沒有錯誤?如果不是,那麼這是否意味着編譯器會自動在事物1和事物2之間填充8位,以使事物2在偶地址上正確對齊?如果是這種情況,那麼地址錯誤將如何發生?
您可能需要在問題中添加更多詳細信息。但請檢查編譯器中的對齊以確保它對齊到16位。通過對齊上面的結構可以工作。 – PeterJ
檢查處理器手冊,查看哪些地址是合法的。然後檢查你的鏈接器命令文件。 – anishsane