|
发表于 2009-8-24 17:43:59
|
显示全部楼层
WINAVR 20090313版编译出来的语句很有问题!!!
不知道是我的编译器问题还是其他的!
《第五篇: 完善的协作式的内核 》里面的寄存器变量OSTaskRunningPrio的运算很不对劲!!!
定义方式:register unsigned char OSTaskRunningPrio asm("r3");//正在运行的任务
语 句:OSRdyTbl &= ~(1<<OSTaskRunningPrio);
编译后的汇编结果:
+00000121: 2DE3 MOV R30,R3 Copy register
+00000122: E0F0 LDI R31,0x00 Load immediate
+00000123: E081 LDI R24,0x01 Load immediate
+00000124: E090 LDI R25,0x00 Load immediate
+00000125: C002 RJMP PC+0x0003 Relative jump
+00000126: 0F88 LSL R24 Logical Shift Left
+00000127: 1F99 ROL R25 Rotate Left Through Carry
+00000128: 943A DEC R3 Decrement
+00000129: F7E2 BRPL PC-0x03 Branch if plus
+0000012A: 9580 COM R24 One's complement
+0000012B: 2228 AND R2,R24 Logical AND
“r3”寄存器的值竟然被改的面目全非了!!!后续也没有还原!!!
很恶心的地方!是编译器的问题么?花费了偶2天的时间(汇编菜鸟哈)!
哪位大虾说说这是怎么回事? |
|