| 本帖最后由 电子菜鸟435 于 2009-11-16 09:35 编辑 
 2# BitFu
 是错了,应该是:
 PINSEL0 = (PINSEL0 & (~(1<<5)))|(1<<5);
 当时觉得自己是对的,也没仔细看。不好意思。
 谢谢你指正。
 另:
 PINSEL0 = (PINSEL0 & (~(1<<5)))|(1<<5);
 [0xe59f00a0]    ldr      r0,0x4000038c ; = #0xe002c000
 [0xe5901000]   ldr      r1,[r0,#0]
 [0xe3811020]   orr      r1,r1,#0x20
 [0xe5801000]   str      r1,[r0,#0]
 上面是    PINSEL0 = (PINSEL0 & (~(1<<5)))|(1<<5); 的反汇编“与”操作直接被优化掉了。
 为了不让编译器优化,我把PINSEL0 = (PINSEL0 & (~(1<<5)))|(1<<5);改成PINSEL0 = (PINSEL0 & (~(1<<7)))|(1<<5);
 反汇编的结果是:
 PINSEL0 = (PINSEL0 & (~(1<<7)))|(1<<5);
 [0xe59f00a4]    ldr      r0,0x40000390 ; = #0xe002c000
 [0xe5901000]   ldr      r1,[r0,#0]
 [0xe3c11080]   bic      r1,r1,#0x80
 [0xe3811020]   orr      r1,r1,#0x20
 [0xe5801000]   str      r1,[r0,#0]
 
 也没有出现[0xe3c11080]   bic      r1,r1,#0x80后马上回写到PINSEL0的情况。
 |