搜索
bottom↓
回复: 20

如果开启两个中断,高优先级的中断打断低优先级导致数据丢失应该如何解决

[复制链接]

出0入0汤圆

发表于 2022-5-19 11:22:26 | 显示全部楼层 |阅读模式
问题如下,uart串口打印发不出数来,或者发错误的数,或者发全是0;很好笑这个问题,给我恼了两天。找来找去找不到问题,挨个屏蔽挨个试。最后发现屏蔽定时器初始化才正常。
完全想不明白定时器怎么能跟串口冲突?又是试来试去,最后是发现,屏蔽按键扫描就行。

个人觉得应该是定时器0的中断优先级太高,不停的打断了uart,导致读取的数值错误。或者读不到。
但是不太确定是不是,uart中断被打断了应该是中断嵌套,从定时器回来应该继续发送啊,怎么会发不出来



void timer0() interrupt 1
{
          TL0 = (65536 - 8000)%256;                        //手动重装载值低8位
        TH0 = (65536 - 8000)/256;                        //手动重装载值高8位
        Timer0_1msFg_Buzz = 1;
//          Key_Scan();
}

出0入0汤圆

发表于 2022-5-19 11:35:28 | 显示全部楼层
按键扫描里面有delay?时间过长,导致这个中断还没结束下一个就来了

出0入75汤圆

发表于 2022-5-19 11:51:09 来自手机 | 显示全部楼层
在Key_Scan这设置一个标识位,在主程序里判断这个标识位执行按键扫描程序,不要在中断里长时间延时。

出0入4汤圆

发表于 2022-5-19 14:09:59 | 显示全部楼层
MCU的软件,感觉就是一个时序大管理的工程,时序管理做好了基本就没有什么问题。

出0入0汤圆

发表于 2022-5-19 14:48:41 | 显示全部楼层
肯定是你的案件扫描和串口程序有冲突。串口程序只负责把数据放入串口模块,发送数据是模块硬件的事,不会受到timer中断的影响。

出0入0汤圆

 楼主| 发表于 2022-5-19 15:15:22 | 显示全部楼层
爱晴海玩偶 发表于 2022-5-19 11:35
按键扫描里面有delay?时间过长,导致这个中断还没结束下一个就来了
(引用自2楼)

写软件我能用定时器解决的,不会用delay。在按键扫描里只有一个消抖的计时KeyCount++。按键持续按下超过5ms没有抖动,给KeyValue这个变量返回一个键值。在另一个嵌套在主函数的KeyProcess()里面,根据返回来的键值KeyValue在不同界面进行对应的处理

出10入120汤圆

发表于 2022-5-19 15:23:23 来自手机 | 显示全部楼层
无所谓吧,计算好中断占用时间和可接受的中断延迟就行,那些以讹传讹说中断要简单的估计都从来没经自己的理解和判断。

出0入0汤圆

发表于 2022-5-19 16:48:57 | 显示全部楼层
那你倒是把KEY_SCAN代码放上来呀

出0入0汤圆

发表于 2022-5-19 17:48:11 | 显示全部楼层
中断里用到的函数最好定义成可重入函数

出10入120汤圆

发表于 2022-5-19 18:08:55 来自手机 | 显示全部楼层
串口驱动写的太差了

出0入75汤圆

发表于 2022-5-19 20:29:30 来自手机 | 显示全部楼层
makesoft 发表于 2022-5-19 15:23
无所谓吧,计算好中断占用时间和可接受的中断延迟就行,那些以讹传讹说中断要简单的估计都从来没经自己的理 ...
(引用自7楼)

给新手说让他分析中断占用延时,还不如简单点让他在中断中少占用时间,新手没有足够的分析能力。

出0入16汤圆

发表于 2022-5-19 20:40:51 | 显示全部楼层
不是耗时操作肯定没影响,发个数据还能数据慢啊

出16170入6148汤圆

发表于 2022-5-19 20:49:25 来自手机 | 显示全部楼层
“菜鸟有关中断里不能处理复杂的事情的问题 ”标题不合格。请自行修正。不理会此通知,将可能会被封锁ID。

帖子标题必须能充分说明帖子的内容。如你要问AVR的ADC如何才能测量得比较准确,“AVR的ADC如何消除干扰测量得比较准确?”是合格的标题。不合格举例:
    1:小女子冰天雪地裸体跪求解决方法
    2:救命啊...
    3:高手请出招,一个无法解决的AVR问题
    4:一个困扰学习单片机初学者,惊动单片机开发者的难题
    5:AVR的ADC测量   (点评:你到底是问问题,或是有技术心得与大家分享?)

出0入0汤圆

 楼主| 发表于 2022-5-23 09:23:30 | 显示全部楼层
armok. 发表于 2022-5-19 20:49
“菜鸟有关中断里不能处理复杂的事情的问题 ”标题不合格。请自行修正。不理会此通知,将可能会被封锁ID。 ...
(引用自13楼)

抱歉,标题起得不合格。我原本想问如果开启两个中断,高优先级的中断打断低优先级导致数据丢失应该如何解决。

出0入0汤圆

 楼主| 发表于 2022-5-23 09:42:04 | 显示全部楼层
gsq19920418 发表于 2022-5-19 16:48
那你倒是把KEY_SCAN代码放上来呀
(引用自8楼)

好的好的,其实问题已经解决,但是我还是不太明白原因。希望大哥帮忙看看。
当我开启定时器中断,打开定时器0(中断号为1),关闭其他定时器。同时开启uart串口(中断号4)。此时串口发不出去,也是收不到东西。(定时器中断里没东西都不行)
当我屏蔽了定时器的时候,串口又恢复正常。我猜测是中断优先级的问题。并关闭了定时器0,打开了定时器3(中断号13)。依然没有恢复正常,然后屏蔽了按键扫描,只留一个bit 变量置位。然后才恢复正常。
我不是很明白为什么发不出去东西,不是中断嵌套,回来继续执行吗

void main(void)
{
        uchar m;
        IO_Init();
        Timer_Init();//
        Buzz_Drive(500);
        BTM_Init();
        Uart_Init(16,9600);
        SR_Cmd2_Gain();       
        TM1640_Init();
        for(m=0;m<16;m++)
        {       
                TM1640_display_H(m,0xFF);
        }
        delay_ms(16);
        for(m=0;m<16;m++)
        {       
                TM1640_display_H(m,0x00);
        }       
        while(1)
        {       
                DisAll();
                Key_Scan();               
                Key_Process();
                GoWork();
                Work_State();
        }
}

出16170入6148汤圆

发表于 2022-5-31 03:30:16 来自手机 | 显示全部楼层
niugangzhou 发表于 2022-5-23 09:23
抱歉,标题起得不合格。我原本想问如果开启两个中断,高优先级的中断打断低优先级导致数据丢失应该如何解 ...
(引用自14楼)

注意:主题发出24小时后就不能修改帖子。

你应该自修修改标题,我帮你修改了。

本应封锁ID一星期,这次不处罚。

下次再违反,将永久封锁ID。

出0入0汤圆

 楼主| 发表于 2022-6-1 17:18:52 | 显示全部楼层
armok. 发表于 2022-5-31 03:30
注意:主题发出24小时后就不能修改帖子。

你应该自修修改标题,我帮你修改了。
(引用自16楼)

好的,以后我会注意的。之前发完帖子一直没登录论坛,满脑子都在想这个问题怎么解决。等我解决了以后才想起来论坛上我有发求助的帖子。那时候已经是4天后了。

出0入8汤圆

发表于 2022-6-1 17:36:12 来自手机 | 显示全部楼层
串口驱动中断优先级最高,驱动要在几个微秒执行完成。

出95入100汤圆

发表于 2022-6-1 19:41:59 | 显示全部楼层
去看看周航慈的书吧,给讲的明明白白

出1310入193汤圆

发表于 2022-11-9 20:45:27 | 显示全部楼层
lhj200304 发表于 2022-6-1 19:41
去看看周航慈的书吧,给讲的明明白白
(引用自19楼)

基于嵌入式实时操作系统程序设计---周慈航  这本?

出95入100汤圆

发表于 2022-11-10 09:06:41 | 显示全部楼层
lb0857 发表于 2022-11-9 20:45
基于嵌入式实时操作系统程序设计---周慈航  这本?
(引用自20楼)

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

本版积分规则

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

GMT+8, 2024-4-19 00:12

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

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