perfect@ 发表于 2013-12-30 01:04:22

碰上WINAVR20090313 + AVR Studio 编译不正确的问题了。望高人指点

WINAVR20090313 + AVR Studio 4.17

以下简单的测试代码所用的器件是ATTINY13A。led0.8秒一闪地指示定时器工作.
但现在LED一直不亮

换到MEGA16L 也是相同的效果
换WINAVR20100110 无果



搞了一整天都无法解决。



烦请有相似经历的朋友指点一下,谢谢!

#include <avr/io.h>
#include <avr/interrupt.h>

typedef unsigned int uint;

uint time_temp = 0;

/*******************************************************************/
/*                                                                                                                   */
/*   定时中断为100uS         TINY13A                                                                  */
/*                                                                                                                   */
/*******************************************************************/
void TIME0_CTC_MODE_init()
{

TCCR0A = 0x02;   //COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00
//CTC模式

TCCR0B = 0x03;    //FOC0A FOC0B – – WGM02 CS02 CS01 CS00
// clkI/O / 64 ( 来自预分频器 )

TIMSK0 = 0x04;// –––– OCIE0B OCIE0A TOIE0 –
OCR0A = 150;   

__asm__ __volatile__ ("sei" ::) ;    //开总中断
}


/*******************************************************************/
/*                                                                                                                */
/*定时器0比较匹配A中断服务函数                                                                  */
/*                                                                                                                */
/*******************************************************************/
ISR(TIM0_COMPA_vect)
{
    time_temp++;//指示时间基准用
}



int main()
{
TIME0_CTC_MODE_init();

DDRB = 0XEF;//只有PB4为输入
PORTB = 0X18;

while(1)
{
   
if(time_temp >=1000)
{
   PORTB ^= 0X08;   // led接PB3
   time_temp = time_temp-1000;
}

}//while

}//main

perfect@ 发表于 2013-12-30 01:06:43

经检验 定时器0比较匹配A  配置正确,就是不执行while(1)循环程序中的    if(time_temp >=1000) .

perfect@ 发表于 2013-12-30 01:08:37

请有相似经历的朋友指点一下,谢谢!

prow 发表于 2013-12-30 08:54:43

看门狗关掉试试

askme 发表于 2013-12-30 11:04:06

volatile unsigned int time_temp = 0;

d__xin 发表于 2013-12-30 11:28:51

额~~发生过高版本的winavr编译老工程出一堆错的路过。

shawn_bu 发表于 2013-12-30 11:45:06

d__xin 发表于 2013-12-30 11:28
额~~发生过高版本的winavr编译老工程出一堆错的路过。

我也同样遇到过。我调试的结果是执行速度变了导致时序错乱。

perfect@ 发表于 2013-12-30 12:22:20

d__xin 发表于 2013-12-30 11:28
额~~发生过高版本的winavr编译老工程出一堆错的路过。

你是怎么样解决的啊

perfect@ 发表于 2013-12-30 12:22:43

prow 发表于 2013-12-30 08:54
看门狗关掉试试

看门狗没开啊

perfect@ 发表于 2013-12-30 12:46:01

askme 发表于 2013-12-30 11:04
volatile unsigned int time_temp = 0;

很感谢你的回答!就是加了类型修饰符volatile解决这个问题了

d__xin 发表于 2013-12-30 13:01:41

perfect@ 发表于 2013-12-30 12:22
你是怎么样解决的啊

额~~~找回老版本GCC的编译。

d__xin 发表于 2013-12-30 13:03:50

shawn_bu 发表于 2013-12-30 11:45
我也同样遇到过。我调试的结果是执行速度变了导致时序错乱。

我的程序里面用了好多printf,新版本和老版本处理上好像差距比较大,根本连编译都过不了。
最后换回老的WINAVR才算完事。
页: [1]
查看完整版本: 碰上WINAVR20090313 + AVR Studio 编译不正确的问题了。望高人指点