搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2013-12-30 01:04:22 | 显示全部楼层 |阅读模式
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

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

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

出0入0汤圆

 楼主| 发表于 2013-12-30 01:06:43 | 显示全部楼层
经检验 定时器0比较匹配A  配置正确,就是不执行while(1)循环程序中的    if(time_temp >=1000) .

出0入0汤圆

 楼主| 发表于 2013-12-30 01:08:37 | 显示全部楼层
请有相似经历的朋友指点一下,谢谢!

出0入8汤圆

发表于 2013-12-30 08:54:43 | 显示全部楼层
看门狗关掉试试

出0入0汤圆

发表于 2013-12-30 11:04:06 | 显示全部楼层
volatile unsigned int time_temp = 0;

出0入169汤圆

发表于 2013-12-30 11:28:51 | 显示全部楼层
额~~发生过高版本的winavr编译老工程出一堆错的路过。

出0入58汤圆

发表于 2013-12-30 11:45:06 来自手机 | 显示全部楼层
d__xin 发表于 2013-12-30 11:28
额~~发生过高版本的winavr编译老工程出一堆错的路过。

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

出0入0汤圆

 楼主| 发表于 2013-12-30 12:22:20 | 显示全部楼层
d__xin 发表于 2013-12-30 11:28
额~~发生过高版本的winavr编译老工程出一堆错的路过。

你是怎么样解决的啊

出0入0汤圆

 楼主| 发表于 2013-12-30 12:22:43 | 显示全部楼层
prow 发表于 2013-12-30 08:54
看门狗关掉试试

看门狗没开啊

出0入0汤圆

 楼主| 发表于 2013-12-30 12:46:01 | 显示全部楼层
askme 发表于 2013-12-30 11:04
volatile unsigned int time_temp = 0;

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

出0入169汤圆

发表于 2013-12-30 13:01:41 | 显示全部楼层
perfect@ 发表于 2013-12-30 12:22
你是怎么样解决的啊

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

出0入169汤圆

发表于 2013-12-30 13:03:50 | 显示全部楼层
shawn_bu 发表于 2013-12-30 11:45
我也同样遇到过。我调试的结果是执行速度变了导致时序错乱。

我的程序里面用了好多printf,新版本和老版本处理上好像差距比较大,根本连编译都过不了。
最后换回老的WINAVR才算完事。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 22:20

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

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