标准库里有__disable_irq函数吗?
时间: 2023-08-04 20:05:10 浏览: 47
__disable_irq函数不是C/C++标准库中的函数,它是由编译器或芯片厂商提供的嵌入式系统编程中常用的函数。在ARM Cortex-M架构的芯片中,__disable_irq函数是CMSIS(Cortex Microcontroller Software Interface Standard)提供的一个函数,用于控制中断的开启和关闭。在其他架构的芯片中,可能会有不同的函数名或实现方式来完成类似的功能。
相关问题
__set_PRIMASK __disable_irq
__set_PRIMASK和__disable_irq是CMSIS提供的用来操作中断的接口。__set_PRIMASK用于设置PRIMASK寄存器的值,可以用来开启或关闭中断。__disable_irq是调用了__set_PRIMASK来关闭所有中断。通过调用__disable_irq,CPU将不再响应中断请求,但并不会屏蔽中断的触发。如果在关闭总中断后有中断触发,中断标志将被置位。当调用__enable_irq来开启总中断后,之前触发的中断将会立即被处理。要想禁止所有中断,可以对每个模块的中断进行Disable操作,或者通过清除中断标志或清除寄存器状态的方法来达到目的。这样在__enable_irq开启总中断后,MCU就不会响应之前触发的中断了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [STM32中断相关概念阐述](https://blog.csdn.net/qq153471503/article/details/126177103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [STM32关于开关总中断的问题](https://blog.csdn.net/weixin_42224980/article/details/105654722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
函数 disable_irq原型是?
函数 `disable_irq` 的原型可以根据具体的操作系统和硬件平台而有所不同。下面是几个常见操作系统和平台下的原型:
- 在 Linux 内核中,函数 `disable_irq` 的原型定义在 `include/linux/irqflags.h` 头文件中,其原型为:
```c
unsigned long disable_irq(unsigned int irq);
```
该函数用于禁止指定的中断,它会返回中断被禁止之前的状态标志,以便在以后恢复中断时使用。
- 在 Windows 操作系统中,函数 `disable_irq` 通常被称为 `KeDisableInterrupts`,其原型定义在 `ntddk.h` 头文件中,其原型为:
```c
KIRQL KeDisableInterrupts(void);
```
该函数用于禁用当前处理器上的所有中断,并返回当前的中断级别。在以后恢复中断时,需要使用 `KeRestoreInterrupts` 函数来恢复中断。
- 在嵌入式系统中,函数 `disable_irq` 的原型通常与硬件平台有关。例如,在 ARM Cortex-M3 处理器中,可以使用以下汇编代码来实现禁止中断:
```asm
cpsid i ; 禁止 IRQ 中断
bx lr ; 返回
```
在这种情况下,`disable_irq` 函数没有明确的原型,因为它是用汇编语言编写的。