方加断点,可以很容易找到上面主程序中循环部分程序编译后的汇编指令: 3f8011 l1: 3f8011761fmovwdp,#0x01c3 3f8013 2820 mov@32,#0xffff 3f8015 2820 mov@32,#0xffff 3f8017 2820 mov@32,#0xffff 3f8019 2820 mov@32,#0xffff 3f801b 2820 mov@32,#0xffff 3f801d 2820 mov@32,#0xffff 3f801f 2b20 mov@32,#0 3f8020 2b20 mov@32,#0 3f8021 2b20 mov@32,#0 3f8022 6fef sbl1,unc 其中第1列为程序在ram中的位置,第2列为机器码,后面就是汇编语言程序。指令“mov @32,#0xffff”使gpio输出高电平,指令“mov @32,#0”使gpio输出低电平。其中含有6个使gpioa0输出高电平的指令和3个使gpioa0输出低电平的指令,系统的指令周期为10 ns,因此循环周期中保持高电平的时间为60 ns。通过将
的地方加断点,可以很容易找到上面主程序中循环部分程序编译后的汇编指令: 3f8011 l1: 3f8011761fmovwdp,#0x01c3 3f8013 2820 mov@32,#0xffff 3f8015 2820 mov@32,#0xffff 3f8017 2820 mov@32,#0xffff 3f8019 2820 mov@32,#0xffff 3f801b 2820 mov@32,#0xffff 3f801d 2820 mov@32,#0xffff 3f801f 2b20 mov@32,#0 3f8020 2b20 mov@32,#0 3f8021 2b20 mov@32,#0 3f8022 6fef sbl1,unc其中第1列为程序在ram中的位置,第2列为机器码,后面就是汇编语言程序。指令"mov @32,#0xffff"使gpio输出高电平,指令"mov @32,#0"使gpio输出低电平。其中含有6个使gpioa0输出高电平的指令和3个使gpioa0输出低电平的指令,系统的指令周期为10 ns,因此循环周期中保持高电平的时间为60 ns。通过将该程
link=0; if(rx_freq_set_flag!=0) scan_freq_start_flag=1; }//error请问上面的程序为什么在子程序中,条件成立也不会执行,而在主程序中条件成立会执行,太奇怪了。下面是在主程序中和子程序中的汇编对照。(注:将改为if(scan_time_flag==3))后就不会出现上述现象了) // 下面是在主程序中汇编 结果if(scan_time_flag>3) 2b20 0108 movlb 0x8 //比子程序汇编 中多了此行。 2b22 514d movf 0x4d, w, banked 2b24 0803 sublw 0x3 2b26 e207 bc 0x2b3692: { scan_freq_test_flag=0; 2b28 6b4f clrf 0x4f, banked93: scan_