OS

rt_hw_interrupt_disable 关闭总中断未打开总中断

发布于 2020-07-22 21:14:01

大部分的RT-THREAD中,用到了大量的开总中断和关总中断。
问题:
开关总中断的用法如下:

                rt_base_t level;

                level = rt_hw_interrupt_disable();
                recved = _serial_fifo_calc_recved_len(serial);
                rt_hw_interrupt_enable(level);

但是RT-THREAD中有一个地方却不是这么写的。

 int rtthread_startup(void)
{
    rt_hw_interrupt_disable();

想请问,
此处的level是否缺省?
如何解释一开始就关闭总中断?
何时代码会执行打开总中断?
此处代码如果产生意想不到的结果,比如一些带中断才能起来的驱动起不来,如何workaround?

查看更多

关注者
0
被浏览
463
yangjie
yangjie 2020-07-23

全局中断开关都是成对的
1、系统启动前:

int rtthread_startup(void)
{
    rt_hw_interrupt_disable(); //关中断
    //......
    rt_system_scheduler_start();//调用的rt_hw_context_switch_to里面开中断
}

image.png

2、系统启动之后,有level就能防止嵌套混乱出错

3 个回答
JQRR_7669
JQRR_7669 认证专家 2020-07-22

系统启动之初关闭中断进行一系列的初始化操作,这时是不可被中断干扰的,等初始化完成,开始进入系统调度时才会打开中断。

bernard
bernard 2020-07-24

切换到第一个任务时,全局中断就会被打开了。(初始的任务上下中断是打开的)

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览