打印
[技术问答]

关于中断中数据处理请教?

[复制链接]
1273|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
重庆酱油仔|  楼主 | 2014-2-10 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题如下:
比如我定义一个全局变量Time1=10,然后在SysTick中断(或者其他的中断)中执行Time1--;
main函数中写下“while(Time1);TestLED();”,为何在仿真的时候老是无法执行到TestLED()语句去。
Ps:使用芯片MINI54LAN。勾选了Use Cross_Module Optimization 和Use MicroLIB;
沙发
zxf0168| | 2014-2-10 23:41 | 只看该作者
time1大于等于一都看做为真

使用特权

评论回复
板凳
重庆酱油仔|  楼主 | 2014-2-11 09:04 | 只看该作者
        while(ADCStr.TimIndex<ADCDotNum)
        {
                __nop();
        }

        for(i=0;i<ADCDotNum;i++)
        {
                temp+=ADCStr.Uin*ADCStr.Uin;
        }
        ADCStr.Uinput=sqrt(temp);
        ADCStr.TimIndex=0;

代码如上述: 仿真时,即使ADCStr.TimIndex=0XFF;ADCDotNum=0X1E;也不能跳出while 的循环,ADCStr.TimIndex在ADC中断中改变。

使用特权

评论回复
地板
重庆酱油仔|  楼主 | 2014-2-11 09:34 | 只看该作者
        while(1)
        {
                Time1=10;
                while(Time1)
                {
                        __nop();
                }
                DataService();
        }
}



void SysTick_Handler()
{
        INVAdj(220);
        if(Time1)
        {
                Time1--;
        }
//        GreenLED=~GreenLED;
#ifdef DebugSysTick
        printf("SysTick_Handler!\n");
       
#endif
}
这一段也是这样,即使Time1归0后,依然无法跳出while的循环。

使用特权

评论回复
5
zxf0168| | 2014-2-11 10:14 | 只看该作者
重庆酱油仔 发表于 2014-2-11 09:34
while(1)
        {
                Time1=10;

你也可以用printf打印一下结果看看执行了没有

使用特权

评论回复
6
重庆酱油仔|  楼主 | 2014-2-11 10:39 | 只看该作者
执行了的,
因为在中断中有处理,所有应该是被编译器优化了,我在变量定义的时候加入volatile就搞定了,谢谢。
此问题已解决。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

55

帖子

1

粉丝