我正在研究16位微控制器的一些C代码。当我在目标上调试应用程序时,最终会碰到AddressError ISR。我阅读了数据手册,它说如果您尝试读取或写入对齐到奇数内存地址的16位值,就会发生这种情况。我想我理解这意味着什么,但这看起来不对。并不意味着如果我要做出这样的结构:什么导致16位体系结构上的地址错误?
struct foo{
uint8_t thing1;
uint16_t thing2;
};
我永远不会读或写入thing2没有错误?如果不是,那么这是否意味着编译器会自动在事物1和事物2之间填充8位,以使事物2在偶地址上正确对齐?如果是这种情况,那么地址错误将如何发生?
您可能需要在问题中添加更多详细信息。但请检查编译器中的对齐以确保它对齐到16位。通过对齐上面的结构可以工作。 – PeterJ
检查处理器手册,查看哪些地址是合法的。然后检查你的链接器命令文件。 – anishsane