__nearfunc __version_3 __interrupt void time1() time1: 00000000 930A ST -Y, R16 00000002 B70F IN R16, 0x3F 00000004 REQUIRE ?Register_R15_is_global_regvar 00000004 9468 SET 00000006 F8F0 BLD R15, 0 00000008 REQUIRE ?Subroutine96 00000008 ; // Fall through to label ?Subroutine96
In segment CODE, align 2, keep-with-next ?Subroutine96: 00000000 BF0F OUT 0x3F, R16 00000002 9109 LD R16, Y+ 00000004 9518 RETI
上面的函数就是 实现R15&=0X01; 我定义了一个变量到R15,放到中断中, 按道理生成的代码应该是 BLD R15,0; RETI; 不就行了吗,怎么还生成拉那么多垃圾代码,是不是哪里没有设置正确呢? 我是这样定义的 __regvar __no_init U8 m_u8SysIntFlag@15; C程序是这样。 //#pragma optimize=none #pragma vector = TIMER1_COMPA_vect __interrupt void time1(void) { m_u8SysIntFlag |= 0x01; }
请MEGA32大侠给分析一下,谢谢M32。
|