[AVR单片机] 求助:中断中的变量怎么没传到主函数

[复制链接]
 楼主| 5_0_5 发表于 2007-8-5 09:12 | 显示全部楼层 |阅读模式
    本人针对MAGE88用C编了个小程序:
    程序由定时中断(T0中断)和主函数构成,在头函数后定义了全局变量:int a01;
    中断函数中只有一句话:a01++;
    主函数中开中断(中断测试确认过已经打开)和初始化后程序为:
     while(1)
        {
          for(a01=0;a01>10;)
             {
               PORTB=0;   //PORTB初始化设置为输出,外接一发光LED,
                          //低电平驱动。
             }
         }
程序运行后无输出,也就是说中断中a01的数值变化没有传到主函数中,请问为什么?
是不是a01定义有问题?中断和主函数中用的不是一个地址空间?
computer00 发表于 2007-8-5 10:59 | 显示全部楼层

试试volatile

 楼主| 5_0_5 发表于 2007-8-5 11:08 | 显示全部楼层

路过的给指条路啊?

 楼主| 5_0_5 发表于 2007-8-5 11:13 | 显示全部楼层

谢谢,computer00

今天主要是求各位指条路,明天上班试一试了!嗨没电脑的悲哀啊!

再次谢谢computer00
xwj 发表于 2007-8-5 11:16 | 显示全部楼层

有人指过了啊

另外;
只有定义在所有函数外的才是全局变量,
main()里定义的也是局部变量,别人是访问不到的,只不过生存时间场点罢了
 楼主| 5_0_5 发表于 2007-8-5 11:17 | 显示全部楼层

对了,我用的是WINAVR,

不知道是不是编译器是不是有什么特殊的要求。我明天再调试调试。
 楼主| 5_0_5 发表于 2007-8-5 11:22 | 显示全部楼层

我是定义在函数外的,

头文件的后面:int a01;
xwj 发表于 2007-8-5 11:27 | 显示全部楼层

一个基本原则:头文件中 不应该 包含任何会产生段分配的语

 楼主| 5_0_5 发表于 2007-8-5 11:30 | 显示全部楼层

请xwj说清楚点

我刚刚接触C和AVR
 楼主| 5_0_5 发表于 2007-8-5 11:31 | 显示全部楼层

段分配的语句 是怎么样子的

xwj 发表于 2007-8-5 11:35 | 显示全部楼层

就是任何会产生代码、变量等占用了存储器的语句啊

 楼主| 5_0_5 发表于 2007-8-5 11:37 | 显示全部楼层

我有一个指针变量,存储数码管显示代码

我有一个指针变量,存储数码管显示代码的,这个算不算
 楼主| 5_0_5 发表于 2007-8-5 11:39 | 显示全部楼层

xwj可以留个油箱给我么

 楼主| 5_0_5 发表于 2007-8-5 11:44 | 显示全部楼层

OK

xwj我已经看过你的资料,我明天如果有什么问题在麻烦你帮忙好么?先说声谢谢了!!!
taoest 发表于 2007-8-6 18:05 | 显示全部楼层

for(a01=0;a01>10;)

改成
a01=0;
while(a01<=10);
PORTB=0; 
 楼主| 5_0_5 发表于 2007-8-7 09:00 | 显示全部楼层

顺便问一问各位高手:面对一个新的编译器,应该怎么去学

我想知道从哪里入手
computer00 发表于 2007-8-7 09:12 | 显示全部楼层

看菜单里面的help......

 楼主| 5_0_5 发表于 2007-8-7 09:25 | 显示全部楼层

help到是好教材

但是我的英语不是很好^

看来学什么都没有捷径啊
 楼主| 5_0_5 发表于 2007-8-7 15:32 | 显示全部楼层

终于想通要问什么了?

是不是中断函数和主函数的公用同一个变量的时候,该变量都要用volatile来定义,但是,主函数中的全局变量就不必要用volatile定义,是不是?
 楼主| 5_0_5 发表于 2007-8-7 15:46 | 显示全部楼层

这个好象跟编译器有关,对吧?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

402

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部