操作系统中的中断控制

news/2025/1/3 5:18:18/

本文为随笔,更多细节可关注微信公众号:emOsprey

uCOS II
在这里插入图片描述

MAX_SYSCALL_INTERRUPT_PRIORITY     EQU   3  ; 屏蔽低于优先级 2 的中断,即抢占优先级设置为 0~2 将被屏蔽,3不屏蔽 OS_CPU_SR_SaveMRS     R0, BASEPRI  	; 读取 PRIMASK 到R0,R0为返回值 MOV     R1, #(MAX_SYSCALL_INTERRUPT_PRIORITY << 6) ; 优先级分组为 2 , 共四位优先级  MSR     BASEPRI, R1     ; 关闭中断BX      LR			    ; 返回;MRS     R0, PRIMASK    ; 读取PRIMASK到R0,R0为返回值 ;CPSID   I				; PRIMASK = 1,关中断( NMI 和硬件 FAULT 可以响应);BX      LR	OS_CPU_SR_RestoreMSR     BASEPRI, R0	   	; 读取 R0 到 PRIMASK 中,R0为参数BX      LR				; 返回;MSR     PRIMASK, R0	; 读取 R0 到 PRIMASK 中,R0为参数;BX      LR				; 返回

FreeRTOS

An aside: FreeRTOS API functions that are safe to be called from an interrupt use BASEPRI to implement interrupt safe critical sections. BASEPRI is set to configMAX_SYSCALL_INTERRUPT_PRIORITY when the critical section is entered, and 0 when the critical section is exited. Many bug reports are received that claim BASEPRI should be returned to its original value on exit, and not just set to zero, but the Cortex-M NVIC will never accept an interrupt that has a priority below that of the currently executing interrupt - no matter what BASEPRI is set to. An implementation that always sets BASEPRI to zero will result in faster code execution than an implementation that stores, then restores, the BASEPRI value (when the compiler’s optimiser is turned on).

另外:可以安全地从中断调用的FreeRTOS API函数使用BASEPRI来实现中断安全的关键部分。输入临界区时BASEPRI设置为configMAX_SYSCALL_INTERRUPT_PRIORITY,退出临界区时设置为0。收到许多错误报告声称BASEPRI应该在退出时返回其原始值,而不仅仅设置为零,但Cortex-M NVIC永远不会接受优先级低于当前正在执行的中断的中断 - 无论是BASEPRI的目标是什么。始终将BASEPRI设置为零的实现将导致比存储然后恢复BASEPRI值的实现更快的代码执行(当编译器的优化器打开时)。

修改优先级(4 bit 优先级)
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
#define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 5


http://www.ppmy.cn/news/123465.html

相关文章

【中断篇】中断控制器及中断检测时序

&#x1f31f;&#x1f31f;&#x1f31f;博主主页&#xff1a;MuggleZero &#x1f31f;&#x1f31f;&#x1f31f; 《ARMv8架构初学者笔记》专栏地址&#xff1a;《ARMv8架构初学者笔记》 GIC-500控制器支持GICv3架构&#xff0c;具有以下中断类型&#xff1a; SGI&#xff…

ARM通用中断控制器GIC之中断处理简介

在阅读本章之前&#xff0c;可以参考笔者之前关于GIC的一些描述&#xff1a; ARM通用中断控制器GIC(generic Interrupt Controller)简介 ARM架构Generic Interrupt Controller(GIC)之Distributor和CPU interface功能介绍 ARM架构Generic Interrupt Controller(GIC)详解之术语…

Linux中断子系统【1】- 中断控制器GIC驱动分析

系列文章目录 Linux中断子系统【1】- 中断控制器GIC驱动分析 Linux中断子系统【2】- Linux内核软中断softirq和小任务tasklet分析 Linux中断子系统【3】- Linux内核request_irq源码分析 Linux中断子系统【4】- Linux中断子系统之中断映射(初始化中断控制器) Linux中断子系统【…

操作系统中的中断

中断是指CPU对系统发生的某个事件做出的一种反应&#xff0c;CPU暂停正在执行的程序&#xff0c;保存现场后自动去执行相应的处理程序&#xff0c;处理完该事件后再返回中断处继续执行原来的程序。。中断一般三类&#xff0c;一种是由CPU外部引起的&#xff0c;称为外中断。如I…

系统中断介绍

1、介绍&#xff1a; 中断&#xff1a;是指计算机程序运行过程中&#xff0c;系统外部、系统内部或者现行程序本身若出现紧急事件&#xff0c;处理机立即中止现行程序的运行&#xff0c;自动转入相应的处理程序(中断服务程序)&#xff0c;待处理完后&#xff0c;再返回原来的程…

soc(九) 中断控制器

中断控制器在SOC中的位置 中断控制器需要做什么事情 从某个 简单中断处理器 的角度考虑 整个过程 既然处理中断的最核心模块是 中断控制器 , 那么 我们就应该了解 中断控制器的典型工作流程 . 在了解工作过程中自然了解到 中断控制器留给 CPU 的接口.从而达到怎么控制中断控制…

中断与中断控制器8259A

中断与中断控制器8259A 中断概述8086/8088中断矢量设置方法一方法二 可屏蔽中断的响应过程中断控制器8259A8259A工作原理8259A工作方式1.设置优先级的方式&#xff08;1&#xff09;全嵌套方式&#xff08;2&#xff09;特殊全嵌套方式&#xff08;3&#xff09;优先级自动循环…

单片机的中断系统(一)

想总结中断由来已久&#xff0c;但是总感觉一章的东西&#xff0c;太多&#xff0c;无从下手。 前几天看到一句话“能把自己学会的东西说出来&#xff0c;才是真的学会”。今天&#xff0c;就要会一会这中断系统。 图片和文字内容来自&#xff1a;普中科技的ppt&#xff0c;百度…