为什么Nios GCC编译器会对我的外设进行多次读取?-Altera-Intel社区-FPGA CPLD-ChipDebug

为什么Nios GCC编译器会对我的外设进行多次读取?

外设的读取通常通过使用指针来完成。例如,以下代码读取存储在peripheral_base_address中的值,并将其放在read_value变量中。

 int * pointer_to_peripheral =(int *)(peripheral_base_address); read_value = * pointer_to_peripheral; 

但是,可以优先选择来自同一地址的多次读取。例如,对于下面的代码,Nios CPU将从peipheral_base_address读取数据值并将其复制到read_value和read_value2中。但是,peripheral_base_address处的数据值可能在读取之间发生了变化,并且不会读取新数据值。

int * pointer_to_peripheral =(int *)(peripheral_base_address);;
read_value = * pointer_to_peripheral;
read_value2 = * pointer_to_peripheral;

所有指针都应声明为volatile类型,以防止后续读取被gcc编译器优化掉。上面使用的指针应声明如下:

 volatile int * pointer_to_peripheral =(int *)(peripheral_base_address); 
请登录后发表评论

    没有回复内容