首页 > 其他分享 >中断锁,中断通知与调度锁

中断锁,中断通知与调度锁

时间:2023-03-29 19:12:45浏览次数:48  
标签:rt 中断 通知 void 调度 hw enter interrupt

目录

中断锁

禁止多线程访问临界区最简单的方式,就是通过关闭系统中断来保证当前操作不会被打断。
全局中断开关也称为中断锁。

RT-Thread中关闭全局中断的函数接口如下:

rt_base_t rt_hw_interrupt_disable(void) 禁掉所有中断并返回禁掉之前的中断状态
void rt_hw_interrupt_enable(rt_base_t level) 恢复禁掉之前的中断状态

说明:

  • 中断锁可以用于任何需要操作临界区的场合。中断锁对系统的实时性影响非常大,要慎重使用。当然,若使用得当,则会变成一种快速、高效的同步方式。
  • 使用中断锁最主要的问题在于,在中断关闭期间系统将不再响应任何中断,也就不能响应外部的事件。因此在使用中断锁时,需要确保关闭中断的时间非常短。比如常用来完成对某些全局变量的加减操作。
  • 函数 rt_hw_interrupt_disable() 和函数 rt_hw_interrupt_enable() 一般需要配对使用,从而保证正确的中断状态。

中断通知

当中断发生,进入中断处理函数时,需要通知内核当前已经进入到中断状态。可以调用如下接口函数:

/* 进入中断时,通知内核当前已经进入中断状态 */
void rt_interrupt_enter(void);
/* 退出中断时,用于通知内核当前已经退出中断状态 */
void rt_interrupt_leave(void);

注意 不要在应用程序中调用这两个函数。

使用 rt_interrupt_enter/leave() 的作用是,在中断服务程序中,如果调用了内核相关的函数(如释放信号量等操作),则可以通过判断当前中断状态,让内核及时调整相应的行为。
如果中断服务程序不会调用内核相关的函数(释放信号量等操作),也可以不调用 rt_interrupt_enter/leave()函数。
为了编程模式规范化,建议在每个ISR中加上中断通知功能。

调度器锁

/**
 * This function will lock the thread scheduler.
 */
void rt_enter_critical(void)

/**
 * This function will unlock the thread scheduler.
 */
void rt_exit_critical(void)

对调度器上锁,系统依然能响应外部中断,中断服务例程依然能进行相应的响应。

拓展问题

Q: 请教下 rt_enter_critical 和 rt_interrupt_enter 的区别
这两个函数的实现都调用了 rt_hw_interrupt_disable,为什么称 rt_enter_critical 为调度器锁? http://www.bubuko.com/infodetail-654022.html 这个帖子里说 “对调度器上锁,系统依然能响应外部中断,中断服务例程依然能进行相应的响应。”,调用了 rt_hw_interrupt_disable,应该也响应不了外部中断吧?
A:调用 rt_hw_interrupt_disable 仅是为了防止访问冲突,随后就成对调用了 rt_hw_interrupt_enable 了。

rt_enter_critical 的关键是 lock_nest++
rt_interrupt_enter 的关键是 rt_interrupt_nest++

标签:rt,中断,通知,void,调度,hw,enter,interrupt
From: https://www.cnblogs.com/hanyli/p/17270018.html

相关文章

  • 51 单片机外部中断测试代码例程
    我的公众号目前已搁置(临近注销),所以我将以前所写的文章转移到博客园。此篇公众号文章创建于2019-11-1821:32,内容后期无修改。不会创建工程的可以跳转:KeilC51工程的......
  • Jenkins配置钉钉通知
    Jenkins配置钉钉通知  目录建群-配置机器人-取得讨论组token安装插件构建后-配置插件pipeline方式修改imageUrl图片地址调用一个图片地址就行了参考......
  • 手机怎样设置定时通知日程安排的提醒
    在日常的生活和工作中,我们需要面临各种各样的任务和日程安排,例如明天下午三点半开会、今天上午十点约见客户、周五下午完成报告并提交、下班去快递、亲朋好友生日等。但是......
  • 基于中断的字符串动态显示
    1:利用1CH中断,每隔一定时间间隔,在屏幕上打印一行自定义的字符串,按下键盘任意键后程序自动退出。2:利用系统定时源设计计时器,具体内容:利用日时钟1CH中断设计定时中断程序,每隔......
  • Jenkins如何配置邮箱通知?
    1.下载插件 EmailExtensionPlugin在Jenkins主界面,点击“ManageJenkins”->“ManagePlugins”->“Available”标签页。在搜索框中输入“EmailExtensionPlugin......
  • Koordinator 助力 ACK 容器调度升级,提升应用性能,节约资源成本
    作者: 佑祎Koordinator是什么Koordinator是一个开源项目,基于阿里巴巴在容器调度领域多年累积的经验孵化诞生,可以提升容器性能,降低集群资源成本。通过混部、资源画像......
  • 高级别智能驾驶业务系列:车队调度管理平台
        近年来,伴随着智慧化港口的大潮流,经纬恒润L4高级别智能驾驶业务产品也陆续扎根港口自动驾驶多个项目中,帮助港口实现无人水平运输自动化,达到降本增效的效果,助力客......
  • MATLAB代码:计及源-荷双重不确定性的虚拟电厂 微网日前随机优化调度
    MATLAB代码:计及源-荷双重不确定性的虚拟电厂微网日前随机优化调度关键词:虚拟电厂微网随机优化随机调度源-荷双重不确定性虚拟电厂调度   参考文档:《Virtualpo......
  • MATLAB代码:考虑用户舒适度的冷热电多能互补综合能源系统优化调度
    MATLAB代码:考虑用户舒适度的冷热电多能互补综合能源系统优化调度关键词:用户舒适度综合能源PMV优化调度仿真平台:MATLAB+yalmip+cplex主要内容:代码主要做的是考虑用户......
  • BIP发送通知
    packagecom.yonyou.mls.srm.mlssrmkkgys.deliveryplan.service.impl;importcom.yonyou.cloud.apm.internal.com.alibaba.fastjson.JSONObject;importcom.yonyou.iua......