搜索
bottom↓
回复: 2

AVR Atmel studio 6.0 C++ 中断实例,真的很疼

[复制链接]

出0入0汤圆

发表于 2013-7-7 22:37:47 | 显示全部楼层 |阅读模式
  首先,名字打得很认真,是为了让大家能馊得到。其次,用AVR Studio,真的很蛋疼。

  很疼1:Atmel studio 6.0用软件仿真时,需要关闭防火墙。我还没有找到更好的方法,有高手知道其它方法的话,还望不吝赐教。

  很疼2:大多数资料显示,studio 6中断还是用ISR(向量)。找了很多资料,都没有说具体怎么把中断例程做成类的友元。后来查看了<interrupt.h>,才发现ISR是一个宏,有兴趣的朋友可以打开头文件查看一下。
  好了,废话少说,真接上代码:

  在类的头文件里如此声明:
        extern "C" void TIMER1_CAPT_vect(void);
        class TIMER
        {
        private:
                friend        void        TIMER1_CAPT_vect(void);
                static volatile unsigned char        Time1Out;
        };

  在CPP文件里如此声明和定义中断函数:
        extern "C" void TIMER1_CAPT_vect (void) __attribute__ ((signal,__INTR_ATTRS));
        void TIMER1_CAPT_vect (void)
        {
                TIMER::Time1Out ++;
        }

  为什么中断函数的声明和定义这么怪,我就不多说了,看一下<interrupt.h>就什么都明白了。TIMER1_CAPT_vect不能乱写,在一个头文件里有定义,具体哪个文件忘了。
  另外例子有点简单,也不全,不能直接拿来编译,还望见谅。

  很疼3:这可能是最蛋疼的了。

  变量定义如下:
        volatile unsigned char        Cnt = 0;

  代码一:
        if (! (Cnt & 0x03))        {...}

  代码二:
        Cnt        &=        0x03;
        if (! Cnt)        {...}

  这两段代码都是想判断Cnt低两位是否为0,但是反汇编出来的代码显示,第一段代码比第二段代码多出三条汇编指令。第一段代码把Cnt当字来处理了,即使我用各种强制转换的组合,编译出来的代码始终是字处理。而第二段代码是按字节处理的。
  还有一种情况,当把第一段代码的0x03改为0xf3或0x13,编译结果为字节处理;如果把0x03改为0x07、0x0f等等,编译结果还是字处理。

  一开始以为AVR Studio 4.x如此,后来换了6.0结果一样。真的无语了,就用网友的一句话来形容吧:真的很蛋疼!
  以上代码用的单片机是ATMEGA8,如果我哪里做得不对,还望不吝赐教。

  写完这么多,想起一个笑话:
  甲:代码编译不通过。
  乙:加一个空格。

  最可笑的是,我不知道该如何评判乙说得话。我不知道该说乙是高手还是...

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

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

出0入0汤圆

发表于 2014-10-10 16:02:38 | 显示全部楼层
1  啥防火墙? 我用6.2没这问题。能在防火墙中设置一下不?
2 怎么个怪法?
3 代码2的Cnt 多个赋值操作吧?

出0入0汤圆

发表于 2014-10-10 16:06:19 | 显示全部楼层
postek 发表于 2014-10-10 16:02
1  啥防火墙? 我用6.2没这问题。能在防火墙中设置一下不?
2 怎么个怪法?
3 代码2的Cnt 多个赋值操作吧? ...

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

本版积分规则

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

GMT+8, 2024-7-4 02:21

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

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