标签: interrupt

我希望我的线程处理中断,但我无法捕获InterruptedException,因为它是一个已检查的异常

我有一个Java调用的线程

t.interrupt();
Run Code Online (Sandbox Code Playgroud)

使t(不同的线程)中断.我希望"t"线程然后捕获一个InterruptedException但是Eclipse不会让我InterruptedException说它不会在try体中抛出.我怎样才能得到这个InterruptedException名字?我用t.interrupt()错了吗?

java multithreading interrupt

2
推荐指数
2
解决办法
3471
查看次数

为什么不在中断中使用互斥锁

我已经通过了这篇文章,我注意到在 Clifford 的回答中,他说我们不应该在中断中使用互斥锁,我知道在中断中我们必须避免过多的指令和延迟 ext...但我不是很清楚关于原因,任何人都可以向我澄清我们必须避免这种情况的原因吗?

如果我们想在 2 个中断驱动线程之间建立同步通信,如果不允许使用互斥锁,还有什么其他机制可以使用?

embedded multithreading interrupt

2
推荐指数
1
解决办法
7425
查看次数

轮询与中断?

假设您有一个具有 32 深度 FIFO 的设备,其中在转换完成后存储来自 ADC 的数据。每次 FIFO 中有 X 个样本时,您都可以触发中断并从中获取数据。

当中断触发时,设备上的中断寄存器中的一个位被设置并且中断线被断言。

所以我的问题是:轮询中断寄存器以获取数据与使用中断线的功能有什么不同吗?是否有任何时间问题或我应该注意的任何问题?

microcontroller interrupt fifo

2
推荐指数
1
解决办法
2万
查看次数

STM32L151 RTC闹钟中断

我遇到了 STM32L151 的 RTC 警报中断问题。我希望我的程序每秒进入 RTC 警报中断,但它不起作用。我的主要功能:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_IWDG_Init();
  MX_RTC_Init();
  MX_SPI1_Init();
  MX_USART1_UART_Init();

  __HAL_RTC_ALARM_ENABLE_IT(&hrtc, RTC_IT_ALRA);

  while (1)
  {

  }
}
Run Code Online (Sandbox Code Playgroud)

函数配置 RTC: MX_RTC_Init():

void MX_RTC_Init(void)
{
  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;
  RTC_AlarmTypeDef sAlarm;

  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  HAL_RTC_Init(&hrtc);

  sTime.Hours = 0x14;
  sTime.Minutes = 0;
  sTime.Seconds = 0;
  sTime.TimeFormat = RTC_HOURFORMAT12_AM;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

  sDate.WeekDay …
Run Code Online (Sandbox Code Playgroud)

microcontroller interrupt stm32 real-time-clock stm32l152

2
推荐指数
2
解决办法
1万
查看次数

获取信号量必须是原子的。Pintos 的 sema_down 安全吗?

这段代码来自 Pintos 源码:https : //www.cs.usfca.edu/~benson/cs326/pintos/pintos/src/threads/synch.c

void
sema_down (struct semaphore *sema) 
{
  enum intr_level old_level;

  ASSERT (sema != NULL);
  ASSERT (!intr_context ());

  old_level = intr_disable ();
  while (sema->value == 0) 
    {
      list_push_back (&sema->waiters, &thread_current ()->elem);
      thread_block ();
    }
  sema->value--;
  intr_set_level (old_level);
}
Run Code Online (Sandbox Code Playgroud)

采取信号量的事实是sema->value--;。如果它有效,它必须是一个原子操作。我们怎么知道它实际上是原子操作?我知道现代 CPU 保证对齐的内存操作(对于字/双字/四字 - 它取决于)是原子的。但是,在这里,我不相信为什么它是原子的。

x86 multithreading interrupt atomicity pintos

2
推荐指数
1
解决办法
950
查看次数

在 STM32 上编程 NVIC(无库)

我已经彻底搜索了我正在使用的 STM32F4 MCU 的数据表和用户手册(包括用于 STM32F4xx MCU 的 PM0214)以及关于一般 MCU 的在线信息,以了解如何在没有库的情况下进行编程中断......但无济于事。NVIC 是否与硬件如此紧密地联系在一起,以至于在没有某种库的情况下对中断进行编程并为函数指定 ISR 地址和首字母缩略词在当今是不切实际的?在每篇文章和文档中,我都会看到类似的内容:

NVIC_EnableIRQ(IRQn_Type IRQn)
NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
Run Code Online (Sandbox Code Playgroud)

但是如果有人出于学习目的想从头开始编写 ISR 呢?

涉及哪些步骤?支持文件在哪里?是否建议/值得我这样做?

embedded interrupt stm32 isr

2
推荐指数
1
解决办法
1271
查看次数

发生中断时覆盖 golang 配置文件停止

当我kill -SIGINT pid使用 Golang 服务时,我会正常关闭调用profile.Stop,但在调用它之前,我收到了以下消息:profile: caught interrupt, stopping profiles

我什至无法调用 profile.Stop 因为它触发得更快,但是 grpc 侦听和 couchbase 连接关闭正常工作。

无论如何我可以覆盖这个故障的配置文件停止吗?

profiling interrupt go sigint

2
推荐指数
1
解决办法
283
查看次数

How are software interrupts triggered in windows when the IRQL drops?

I know that for hardware interrupts, when KeLowerIrql is called by KeAcquireInterruptSpinLock, the HAL adjusts the interrupt mask in the LAPIC, which will allow queued interrupts (in the IRR probably) to be serviced automatically. But with software interrupts, for instance, ntdll.dll sysenter calls to the SSDT NtXxx system services, how are they 'postponed' and triggered when the IRQL goes to passive level Same goes for the DPC dispatcher software interrupt (if the DPC is for the current CPU and of …

windows kernel interrupt

2
推荐指数
1
解决办法
1018
查看次数

为什么stm32一进入就立即退出停止模式?

我目前正在研究一种设备,它需要按下按钮才能将设备置于 STOP 低功耗模式,然后按下不同的按钮以引起中断以再次唤醒设备。目前,第一个按钮按下中断确实有效,并且设备进入停止模式。但是,设备不会等待其他按钮被按下,而是立即退出 STOP 模式。我尝试过搜索,但没有发现任何其他迹象表明正在调用另一个会导致 WFI 触发和唤醒设备的中断。以下是我正在使用的代码:

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"

#define BUTTON_WAKE_PIN             GPIO_PIN_0
#define BUTTON_WAKE_PORT            GPIOA
#define BUTTON_SLEEP_PIN            GPIO_PIN_9
#define BUTTON_SLEEP_PORT           GPIOE
#define LED_GR_PIN                  GPIO_PIN_0
#define LED_GR_PORT                 GPIOD
#define LED_RG_PIN                  GPIO_PIN_1
#define LED_RG_PORT                 GPIOD

/* Private variables ---------------------------------------------------------*/
static uint8_t buttonPress = 0;

/* Private function prototypes -----------------------------------------------*/
void        SystemClock_Config ( void );
static void Gpio_Sleep_Mode    ( void );

/**
* @brief This function handles (wakeup) interrupts.
*/
void EXTI0_IRQHandler ( void )
{
  /* Clear …
Run Code Online (Sandbox Code Playgroud)

c embedded arm interrupt stm32

2
推荐指数
1
解决办法
2706
查看次数

如何重置 STM32 HAL UART 驱动程序 (HAL) 状态?

我知道可以使用启用 UART 接收中断

HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_buffer, expectedNumberOfBytes)
Run Code Online (Sandbox Code Playgroud)
  • 但是一旦开始,如何“手动”停止它?

我们可以使用HAL_NVIC_DisableIRQ()(例如:)禁用 UART 中断HAL_NVIC_DisableIRQ(USART1_IRQn)。这将防止它抛出一个中断,但该函数的状态集HAL_UART_Receive_ITHAL_UART_STATE_BUSY_RX需要设置回HAL_UART_STATE_READY为UART手柄回到可以接受一个新的状态HAL_UART_Receive_IT()调用。

问题
如果我想在一段时间后禁用 Rx 中断,如何重置 UART 中断的状态?

堆栈溢出问题不涉及如何重置状态;我提到了这些问题:

  1. 在中断处理程序 STM32F407 中禁用中断
  2. https://electronics.stackexchange.com/questions/100073/stm32-usart-rx-interrupts

我可以使用USART_ClearITPendingBit()orUSART_ITConfig()但这些被 STM 的 HAL 库定义为私有函数。那么我应该使用它们吗?

c hardware interrupt stm32

2
推荐指数
1
解决办法
1万
查看次数