惊奇!进不了循环!!while(1);for(;;1)
惊奇!进不了循环!!#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include <avr/wdt.h>#include "key.c" #define COM_PORT PORTB#define COM_PIN1 (1<<PINB1)#define COM_PIN2 (1<<PINB2)#define SET_COM1 {PORTB |= (1<<PINB1);}#define CLR_COM1 {PORTB &= ~(1<<PINB1);}#define SET_COM2 {PORTB |= (1<<PINB2);}#define CLR_COM2 {PORTB &= ~(1<<PINB2);}#define SEG_PORT PORTC const unsigned charnum_table[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};unsigned char num_buf; void Num_San(void){ if(COM_PORT & COM_PIN1) { SET_COM2 SEG_PORT = num_table[num_buf%10]; CLR_COM1 } else { SET_COM1 SEG_PORT = num_table[num_buf/10]; CLR_COM2 }} SIGNAL(SIG_OVERFLOW1){ TCNT1H = 0xAA; //赋计数初值 TCNT1L = 0xFF; //赋计数初值 Num_San(); KeyScan();} voidGPIO_Init(void){ //数码管初始化 DDRB |= (1<<PINB1)|(1<<PINB2); DDRC |= 0xFF;} void TM1_init(void){ TCCR1B |= 0x01; //进行1024分频 TCNT1H = 0x00; //赋计数初值 TCNT1L = 0x12; //赋计数初值 TIMSK |= 0x04;; //开使能 sei(); //开总中断} int main( void ){ wdt_disable(); GPIO_Init(); KeyInit(); TM1_init(); num_buf = 1; _delay_ms(1000); num_buf = 2; _delay_ms(1000); num_buf = 3; _delay_ms(1000); num_buf = 4; _delay_ms(1000); num_buf = 5; _delay_ms(1000); while(1) { num_buf = 45; }}
while(1)是不是被編譯器優化處理了,看看編譯后的彙編代碼吧 NemoGu 发表于 2013-4-6 16:38 static/image/common/back.gif
while(1)是不是被編譯器優化處理了,看看編譯后的彙編代碼吧
真的是代码优化问题啊,请问你们一般怎么选择代码优化等级的。-00,-01,-02,-03,-0s 你什么都没说明,所以没看你的程序,如果真的不循环极有可能是开看门狗了反复重启。 leafstamen 发表于 2013-4-6 16:47 static/image/common/back.gif
你什么都没说明,所以没看你的程序,如果真的不循环极有可能是开看门狗了反复重启。 ...
是优化问题,我的看梦禁止了 sohappyoh 发表于 2013-4-6 16:46 static/image/common/back.gif
真的是代码优化问题啊,请问你们一般怎么选择代码优化等级的。-00,-01,-02,-03,-0s ...
-O0 無優化。
-O1 減少代碼尺寸和執行時間,不進行需要大量編譯時間的優化。
-O2 幾乎執行所有優化,而不考慮代碼尺寸和執行時間。
-O3 執行-O2所有的優化,以及內聯函數,重命名寄存器的優化。
-Os 針對尺寸的優化。執行所有-O2優化而不增加代碼尺寸
推薦-Os優化。全局變量注意加volatile,注意全局變量的原子操作 NemoGu 发表于 2013-4-6 17:32 static/image/common/back.gif
-O0 無優化。
-O1 減少代碼尺寸和執行時間,不進行需要大量編譯時間的優化。
-O2 幾乎執行所有優化,而不 ...
感谢,确实是这样! volatile unsigned char num_buf;
页:
[1]