sohappyoh 发表于 2013-4-6 16:22:05

惊奇!进不了循环!!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;    }}

NemoGu 发表于 2013-4-6 16:38:07

while(1)是不是被編譯器優化處理了,看看編譯后的彙編代碼吧

sohappyoh 发表于 2013-4-6 16:46:31

NemoGu 发表于 2013-4-6 16:38 static/image/common/back.gif
while(1)是不是被編譯器優化處理了,看看編譯后的彙編代碼吧

真的是代码优化问题啊,请问你们一般怎么选择代码优化等级的。-00,-01,-02,-03,-0s

leafstamen 发表于 2013-4-6 16:47:43

你什么都没说明,所以没看你的程序,如果真的不循环极有可能是开看门狗了反复重启。

sohappyoh 发表于 2013-4-6 17:12:08

leafstamen 发表于 2013-4-6 16:47 static/image/common/back.gif
你什么都没说明,所以没看你的程序,如果真的不循环极有可能是开看门狗了反复重启。 ...

是优化问题,我的看梦禁止了

NemoGu 发表于 2013-4-6 17:32:58

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,注意全局變量的原子操作

sohappyoh 发表于 2013-4-6 19:18:03

NemoGu 发表于 2013-4-6 17:32 static/image/common/back.gif
-O0 無優化。
-O1 減少代碼尺寸和執行時間,不進行需要大量編譯時間的優化。
-O2 幾乎執行所有優化,而不 ...

感谢,确实是这样!

i_kkyu 发表于 2013-4-6 19:36:34

volatile unsigned char num_buf;
页: [1]
查看完整版本: 惊奇!进不了循环!!while(1);for(;;1)