设备寄存器中的数据不需要改写就可以自己变化,每次读上来的值可能不同
连续多系想设备寄存器中写数据是有意义的。
-
buf[0] = recv;
-
buf[1] = recv;
-
buf[2] = recv;
-
send = ~buf[0];
-
send = ~buf[1];
-
send = ~buf[2];
优化后的结果可能为 不是每次从recv的内存地址中将数据写入到寄存器中,buf[1]是从存储buf[0]的寄存器中读取。
实际是要每次从recv所指向的内存单元中读取。
后面讲buf的数据写入到相应的内存地址时(可能为寄存器),对同一个变量赋值,只取最后一个。
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;
阅读(1377) | 评论(0) | 转发(0) |