打印

关于忙检测的一个解决办法!

[复制链接]
762|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangjiahao88|  楼主 | 2016-9-5 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
事件触发中,包含while等待的处理


//氧浓度设置
void YangNongDu_Set(void)
{
    if(KEY==KEY_O2_SONG)
    {
        KEY=0;
        O2_SET=O2_SET+1;

        if(O2_SET>5)
        {
            O2_SET=1;
        }

        AT24C64_Write_Byte(_EE_O2_SET,O2_SET);
        O2_SET=AT24C64_Read_Byte(_EE_O2_SET);
                                
        Play_O2();

    }
}

相关帖子

沙发
wangjiahao88|  楼主 | 2016-9-5 10:35 | 只看该作者
void Play_O2(void)
{
    Pley_Voice(LL_Sound,Play_Enable[VOL_SET]);
    while(!BUSY);

    Pley_Voice(Sound_O2_LL[O2_SET-1],Play_Enable[VOL_SET]);
    while(!BUSY);
}

使用特权

评论回复
板凳
wangjiahao88|  楼主 | 2016-9-5 10:35 | 只看该作者
******************************************************************
请各位高手与网友指点一下,我按下一个按键,松手判断以后,对数据进行了一些简单处理,并且存入到了EEROM。同时进行语音播报。
但是我发现,数据进行了运算之后,并不能立刻进行显示,而是等待语音播放完毕之后才进行显示。
显示周期是100ms.请各位高手给予指点,该怎么写好这个构架。

使用特权

评论回复
地板
wangjiahao88|  楼主 | 2016-9-5 10:36 | 只看该作者
我后来得到了一个处理办法,就是,按键事件里面,语音播放之前,多加一遍显示的变量与显示的函数,这样也不会受while读忙检测了!

使用特权

评论回复
5
wangjiahao88|  楼主 | 2016-9-5 10:37 | 只看该作者
大家有什么解决之道,一起探讨吧!谢谢!

使用特权

评论回复
6
wangjiahao88|  楼主 | 2016-9-5 10:39 | 只看该作者
请问,使用rots,可以解决这个问题吗?

使用特权

评论回复
7
merry_zsp| | 2016-9-5 15:38 | 只看该作者
因为你的语音播放占用了内存,只能等播放完毕了

使用特权

评论回复
8
wangjiahao88|  楼主 | 2016-9-5 17:29 | 只看该作者
是啊!语音播放占用了内存,只能等播放完毕了

使用特权

评论回复
9
Creas_Tall| | 2016-9-6 17:36 | 只看该作者
按键放在中断中,中断中改变声音播放的方式。

使用特权

评论回复
10
wangjiahao88|  楼主 | 2016-9-7 09:34 | 只看该作者
按键,已经是在中断里面完成的。

使用特权

评论回复
11
magicoctoy| | 2016-9-8 15:19 | 只看该作者
换好的语音播放芯片就可以解决了,你这个肯定是便宜的语音播放芯片。

使用特权

评论回复
12
tomyoct| | 2016-9-10 21:48 | 只看该作者
试试新唐的ISD960的芯片,这个自带MCU,很方便的。

使用特权

评论回复
13
chrise23| | 2016-9-11 16:33 | 只看该作者
程序中最好不要用while这类的检测,碰到特殊情况,会把板子卡死的。

使用特权

评论回复
14
MTCN2013| | 2016-9-11 20:01 | 只看该作者
    Pley_Voice(LL_Sound,Play_Enable[VOL_SET]);
    while(!BUSY);

    Pley_Voice(Sound_O2_LL[O2_SET-1],Play_Enable[VOL_SET]);
    while(!BUSY);

问题在于你的这个while检测。去掉它试试。

使用特权

评论回复
15
叶覃| | 2016-9-11 23:12 | 只看该作者
首页的那一段函数,应该是放在中断中的,中断中不能带有延时函数,或者while的函数,对时间要求很严格的

使用特权

评论回复
16
huafei123| | 2016-9-12 10:53 | 只看该作者
需要测试指令执行的时间,估计是你中断中程序执行的时间太长了

使用特权

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

本版积分规则

473

主题

7517

帖子

30

粉丝