搜索
bottom↓
回复: 7

惊奇!进不了循环!!while(1);for(;;1)

[复制链接]

出0入0汤圆

发表于 2013-4-6 16:22:05 | 显示全部楼层 |阅读模式
惊奇!进不了循环!!
#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;
    }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-4-6 16:38:07 | 显示全部楼层
while(1)是不是被編譯器優化處理了,看看編譯后的彙編代碼吧

出0入0汤圆

 楼主| 发表于 2013-4-6 16:46:31 | 显示全部楼层
NemoGu 发表于 2013-4-6 16:38
while(1)是不是被編譯器優化處理了,看看編譯后的彙編代碼吧

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

出0入57汤圆

发表于 2013-4-6 16:47:43 | 显示全部楼层
你什么都没说明,所以没看你的程序,如果真的不循环极有可能是开看门狗了反复重启。

出0入0汤圆

 楼主| 发表于 2013-4-6 17:12:08 | 显示全部楼层
leafstamen 发表于 2013-4-6 16:47
你什么都没说明,所以没看你的程序,如果真的不循环极有可能是开看门狗了反复重启。 ...

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

出0入0汤圆

发表于 2013-4-6 17:32:58 | 显示全部楼层
sohappyoh 发表于 2013-4-6 16:46
真的是代码优化问题啊,请问你们一般怎么选择代码优化等级的。-00,-01,-02,-03,-0s ...

-O0 無優化。
-O1 減少代碼尺寸和執行時間,不進行需要大量編譯時間的優化。
-O2 幾乎執行所有優化,而不考慮代碼尺寸和執行時間。
-O3 執行-O2所有的優化,以及內聯函數,重命名寄存器的優化。
-Os 針對尺寸的優化。執行所有-O2優化而不增加代碼尺寸

推薦-Os優化。全局變量注意加volatile,注意全局變量的原子操作

出0入0汤圆

 楼主| 发表于 2013-4-6 19:18:03 | 显示全部楼层
NemoGu 发表于 2013-4-6 17:32
-O0 無優化。
-O1 減少代碼尺寸和執行時間,不進行需要大量編譯時間的優化。
-O2 幾乎執行所有優化,而不 ...

感谢,确实是这样!

出0入0汤圆

发表于 2013-4-6 19:36:34 | 显示全部楼层
volatile unsigned char num_buf;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表