问题标签 [isr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
559 浏览

windows - 为什么 Windows 设备驱动程序中断服务例程 (ISR) 是可中断的?

我是编写 Windows 设备驱动程序的新手。

我的理解是,在硬件层面,当一个x86处理器被中断时(当CPU的INTR线被设备触发时),处理器在执行中断服务程序之前清除EFLAGS寄存器的中断标志位来禁用中断( ISR)。所以通常,x86 ISR 在完成其工作并发出 IRET 指令之前不能再次被中断。但是为什么 Windows ISR 是可中断的呢?Windows ISR 是否与处理器的 ISR 相同?

根据此处,Windows 设备驱动程序 ISR 是可中断的: MSDN:Writing an ISR

0 投票
2 回答
3871 浏览

stm32 - 如何从高优先级 ISR 中唤醒 FreeRtos 任务?

使用:

  • Stm32F10x、F2xx、F4xx
  • FreeRtos 8.1.1
  • gcc-arm-none-eabi-4_8-2014q2

我有一个必须以高中断优先级运行的 ISR,因此禁止在此 ISR 中调用 FreeRtos Api(请参阅此处此处)。

在某些情况下,这些 ISR 会检测条件,在这些条件下,休眠的 FreeRtos 任务应该以至少可能的延迟唤醒。

通常(如果由于足够低的优先级而允许 ISR 调用 FreeRtos Api)我会使用队列或信号量来解决这个问题。

但是如何通过高优先级 ISR 实现这一点?

我目前的临时方法是这样的(简要概述):

但这种方法有以下缺点:

  • 延迟(从在 ISR 中设置标志直到任务唤醒)最多为 1 个 FreeRtos 滴答。
  • 需要轮询标志(浪费 cpu 周期)。

有什么建议可以更好地解决这个问题,尤其是延迟更少?

0 投票
2 回答
5504 浏览

c - STM32 Discovery 上看门狗定时器的中断服务程序

我最近购买了一个 STM32 价值线发现套件来与 STM32 设备配合使用。我现在正在做一个需要看门狗的项目。它在STM32中称为IWDG。但我的问题是当看门狗被触发时我需要一个 ISR。

有谁知道如何实现这个(甚至有一个例子)?

0 投票
2 回答
613 浏览

c - 从 ISR 和非 ISR 上下文中原子禁用和恢复中断:在某些平台上可能会有所不同吗?

我现在使用嵌入式产品,即 PIC32 Microchip CPU。

我熟悉几个实时内核:AVIXFreeRTOSTNKernel,在所有这些内核中,我们几乎都有两个版本的函数:一个用于从任务调用,第二个用于从 ISR 调用。

当然,这对于可以切换上下文和/或睡眠的函数是有意义的:显然,ISR 不能睡眠,并且应该以不同的方式进行上下文切换。但是有几个函数既不切换上下文也不休眠:比如说,它可能返回系统滴答计数,或者设置软件计时器等。

现在,我正在实现自己的内核:TNeoKernel,它具有格式良好的代码并经过仔细测试,并且有时我正在考虑发明“通用”函数:可以从任务或 ISR 上下文调用的函数。但是由于所有上述三个内核都使用单独的功能,我担心我会做错什么。

比如说,在任务和 ISR 上下文中,TNKernel 使用不同的例程来禁用/恢复中断,但据我所知,唯一可能的区别是,如果目标平台不支持,ISR 函数可能被“编译”作为优化嵌套中断。但是如果目标平台支持嵌套中断,那么禁用/恢复中断对于任务和 ISR 上下文看起来完全一样。

所以,我的问题是:在哪些平台上,从 ISR 禁用/恢复中断的操作应该与非 ISR 上下文不同?

如果没有这样的平台,我更愿意使用“通用”功能。如果您对此方法有任何意见,我们将不胜感激。

UPD:我不喜欢有两组函数,因为它们会导致明显的代码重复和复杂化。说,我需要提供一个应该启动软件定时器的功能。这是它的样子:

因此,对于几乎所有系统功能,我们都需要像上面这样的包装器。对于作为内核开发人员以及内核用户的我来说,这是一种不便。

唯一的区别是使用了不同的宏:对于任务,这些是TN_INTSAVE_DATA, TN_INT_DIS_SAVE(), TN_INT_RESTORE(); 对于中断,这些是TN_INTSAVE_DATA_INT, TN_INT_IDIS_SAVE(), TN_INT_IRESTORE().

对于支持嵌套中断的平台(ARM、PIC32),这些宏是相同的。对于不支持嵌套中断的其他平台,TN_INTSAVE_DATA_INT,TN_INT_IDIS_SAVE()TN_INT_IRESTORE()扩展为空。所以有点性能优化,但是在我看来成本太高了:更难维护,用起来不太方便,而且代码量变大了。

0 投票
1 回答
1276 浏览

gcc - 如何使用 C/gcc 从外围 IO 寄存器中读取数据?

我在 AVR32 上有一个中断服务路由。我需要从中断状态寄存器中读取以取消中断。但是我不使用读取的结果。我宁愿不使用 asm 指令,但我担心 gcc 会优化对虚拟变量的读取。什么是正确的方法?

目前我有:

tmp 也应该是易变的吗?我担心如果不使用 tmp,gcc 会跳过读取。

0 投票
1 回答
5802 浏览

button - 带旋转编码器的 Arduino Mega 2560 中断

我开始使用 Uno,我能够从我在网上找到的旋转库中获得一个中断工作,但是当我将项目移动到 Mega 并尝试将它更改为它停止的不同引脚时。我花了几个小时试图从在线资源中找出兆的中断引脚,但找不到任何好的资源来充分解释兆中断引脚。

我正在尝试使用这样的中断。

如果有人有首选方法,我使用什么引脚进行中断并不重要。我只需要它工作。

0 投票
1 回答
362 浏览

c++ - Arduino上一次中断的多个触发器

我正在研究 Arduinos,我想使用中断来使用旋转编码器。但我想将中断代码减少到最低限度。

我可以在单个中断上使用多个触发器吗?

我想替换我的实际代码:

像这样的东西

可能吗?

0 投票
1 回答
125 浏览

real-time - 在使用 freeRTOS 实时内核 PIC32 时没有定义“mainSW1_INT_BIT”

我正在关注“使用 FreeRTOS 实时内核实用指南 - PIC32 版”。在页面的清单 52 中,没有 mainSW1_INT_BIT 的定义。我很困惑,因为我没有这本书的任何源 zip。代码片段是:

请帮忙。

0 投票
3 回答
3396 浏览

c - freeRTOS 中的软件中断

我正在学习freeRTOS。我需要在 freeRTOS 中为 PIC32 平台(cerebot Mx7ck)编写软件中断 ISR 处理程序。我浏览了文档但没有帮助。请有人帮忙。

0 投票
2 回答
185 浏览

c - Spi 中断处理程序在使用 printf() 时起作用

我正在尝试在 omap 处理器和 sam4l 处理器之间启动 spi 通信。我已经配置了spi协议,omap是master。现在我看到的是我发送的测试数据在 sam4l 上正确到达,我可以看到 isr 正在打印该数据。在 isr 中在这里和那里使用更多 printf 会使操作发生并且相应的操作发生,但是如果我删除所有 printfs 我看不到任何操作发生。这种异常的原因可能是什么?这是错误频率设置的常见情况还是什么?如果需要代码,我也会发布它,但它很大。谢谢