本帖最后由 电子菜鸟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的情况。
|