为什么我的<sup><font size="-1">Nios®</font></sup>微处理器无法从读取我的记忆中映射的外设,当我尝试从中读取立即对同一外设写入后?

应将内存映射外设的指针声明为volatile类型。未声明为volatile的指针在某些编译器优化级别下可能无法按预期运行。例如,请考虑以下代码段。


int *pointer = (int *) na_peripheral;
int read_back;
...
*pointer = 49;
read_back = *pointer;


如果编译器优化级别为-o2(默认值),则此程序将向外围器件写入值49。但是,当read_back设置为指针的值时,它将加载刚刚写入外设的值,该值仍存储在Nios内核寄存器中。在某些情况下这可能是可以接受的,但如果外设在读取的同时在外部更新,则可能会导致问题。为确保Nios内核从外设读取正确的值,指针应声明如下:


volatile int *pointer = (int *) na_peripheral;


这将确保Nios声明所需外设的片选和读使能信号。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-02 13:39:40 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它