Re: [問題] 請教兩種語法
※ 引述《Hyozero (1)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Linux
: 問題(Question):
: 都是在embedded system的code裡面看到的
: 1. 程式碼: http://codepad.org/UFsAKQ7r
: 想請教第8行的 *((volatile unsigned long *)
: 會使用#define應該就是像const一樣,不想讓值再變動了不是嗎?
: 請問這樣的寫法是什麼目的呢?
u32 mpu_type_reg_addr = 0xe000ed90;
(*((u32 volatile *)mpu_type_reg_addr)) = 0x5;
(*((u32 volatile *)mpu_type_reg_addr)) = 0x7;
gcc -O2 a.c
80482d0: c7 05 90 ed 00 e0 05 movl $0x5,0xe000ed90
80482d7: 00 00 00
80482da: 31 c0 xor %eax,%eax
80482dc: c7 05 90 ed 00 e0 07 movl $0x7,0xe000ed90
(*((u32 volatile *)mpu_type_reg_addr)) = 0x5;
(*((u32 volatile *)mpu_type_reg_addr)) = 0x7;
都在
----------------------------------------------
u32 mpu_type_reg_addr = 0xe000ed90;
(*((u32 *)mpu_type_reg_addr)) = 0x5;
(*((u32 *)mpu_type_reg_addr)) = 0x7;
80482d0: c7 05 90 ed 00 e0 07 movl $0x7,0xe000ed90
80482d7: 00 00 00
80482da: 31 c0 xor %eax,%eax
80482dc: c3 ret
只剩下 (*((u32 *)mpu_type_reg_addr)) = 0x7 這行
這是使用 -O2 才有的行為, 若不用 -O2 基本上
(*((u32 *)mpu_type_reg_addr)) = 0x5;
(*((u32 *)mpu_type_reg_addr)) = 0x7;
並不會變成只有 = 0x7 這部份, = 0x5 還是會存在。
我的問題是:
大家提到的現象是在使用最佳化選項時才會遇到的嗎?
所以不用最佳化選項, 根本不需要使用 volatile 嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.114.144.159
推
12/09 15:22, , 1F
12/09 15:22, 1F
推
12/09 15:26, , 2F
12/09 15:26, 2F
→
12/09 20:14, , 3F
12/09 20:14, 3F
討論串 (同標題文章)