搜索
bottom↓
回复: 7

有关AVR_GCC编译器的奇怪问题,肯求高人停下脚步看看!!!

[复制链接]

出0入0汤圆

发表于 2012-10-26 17:47:43 | 显示全部楼层 |阅读模式
最近写的一个程序出现一个很奇怪的问题,之前程序是在ICCAVR编译上做的,程序完好,没问题,后来我想转移到GCC上,就出问题了

这里就贴出一个简单的测试程序:
#include <avr/io.h>
#include <avr/interrupt.h>

#define  nop()  asm("nop")
  
unsigned char  a=0;

ISR(INT0_vect)    ;外部中断0服务函数
{
    a=1;
}

void DelayMgr1us(unsigned int DelayData)   ;1us延时函数
{
    while((!a)&&(DelayData--))
    {
        nop();nop();
    }
}

int main(void)
{
     DDRD &= ~(1<<2);     ;外部中断0口配置为输入
     SREG &= 0X7F;
     EIMSK |= 0X01;          ;开外部中断0
     EICRA |= 0X03;
     SREG |= 0X80;

     DelayMgr1us(50000);
    nop();nop();
}
先说下我的问题,程序很简单,主意就是当运行到延时函数时,若有中断则a的值赋为1,则不再延时,退出延时函数,可是现在是
我通过单目运行进延时后,人为触发中断,此时程序还正常运行,进入中断服务函数后,a的值也被重新赋为了1,然后退出中断反回到
延时函数内,可a已经为1了,延时函数仍旧一直运行,直至DelayData自减到0为止才退出。但头文件,中断服务函数稍修改后放在ICCAVR环境中编译却是正常。就这个程序,我暂时也不知道是我程序有问题还是编译器有问题,可编译器换过几个还是出一样的问题,程序我也实在看不出问题在哪,
还望高人停下脚步帮小弟看看。感激不尽!!!

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

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

出0入0汤圆

发表于 2012-10-26 17:52:31 | 显示全部楼层
#define  nop()  asm("nop")
可能有问题

出0入0汤圆

发表于 2012-10-26 17:53:54 | 显示全部楼层
volatile的问题?你 unsigned char  a=0; 改为 volatile unsigned char a=0;试一下.

出0入0汤圆

发表于 2012-10-26 17:59:56 | 显示全部楼层
int main(void)
{
     DDRD &= ~(1<<2);     ;外部中断0口配置为输入
     SREG &= 0X7F;
     EIMSK |= 0X01;          ;开外部中断0
     EICRA |= 0X03;
     SREG |= 0X80;

     DelayMgr1us(50000);
    nop();nop();
}


If this piece of code worked under ICCAVR or any compiler, you should throw that compiler in the trash bin.

出0入0汤圆

 楼主| 发表于 2012-10-27 12:20:28 | 显示全部楼层
yaoyyie2003 发表于 2012-10-26 17:53
volatile的问题?你 unsigned char  a=0; 改为 volatile unsigned char a=0;试一下.

果然如你所说,禁止优化后便好了,花了几天时间被你这一说便搞定了,再次感谢!!!

出0入0汤圆

发表于 2012-10-27 12:46:18 | 显示全部楼层
yaoyyie2003 发表于 2012-10-26 17:53
volatile的问题?你 unsigned char  a=0; 改为 volatile unsigned char a=0;试一下.

那volatile的作用是什么啊?

出0入0汤圆

发表于 2012-10-27 22:19:08 | 显示全部楼层
有一种东西叫百度

出0入0汤圆

 楼主| 发表于 2012-10-29 09:27:23 | 显示全部楼层
笑笑我笑了 发表于 2012-10-27 12:46
那volatile的作用是什么啊?

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

本版积分规则

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

GMT+8, 2024-7-4 10:27

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

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