外设的读取通常通过使用指针来完成。例如,以下代码读取存储在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);
没有回复内容