用一个携带memset或memcpy的并行ARM硬件中断

问题描述

这是一个相当“专家”的问题,但是我们有一个类似的问题,并且我很难理解在嵌入式DSP系统中执行ISR的中断优先级的概念。

比方说,我们有两个-ISR1和ISR2-彼此之间发生如下所示的中断:

enter image description here

我想就系统的中断优先级和线程安全性比较两种情况。假设我们没有信号量,互斥量等,并且没有gcc作为编译器

因此,如果发生以下情况,会发生什么情况

a)

  • IRQ1的NVIC优先级高于IRQ2
  • ISR1包含关键的内存集功能,ISR2仅包含非关键部分

b)

  • IRQ1的NVIC优先级低于IRQ2
  • ISR1包含关键的内存集功能,ISR2仅包含非关键部分

我的期望是:

a)什么也没发生,一旦ISR1完成,ISR2就被执行

b)Memset被中断(哦,哦,系统抛出异常)。

我可以纠正吗?

解决方法

如果看到NVIC,那么我了解到我们谈论的是Cortex-M核心uC。

第一个问题是按关键部分衡量的内容。有两种可能性:

  1. Yo修改共享对象。
  2. 执行代码的时间很关键,不应被tytyy打断(例如,它是位带通信驱动程序)

如果中断1的优先级高于中断2,则中断1不能被中断2抢占。uC将记住中断2处于挂起状态,并且在中断完成时将调用其处理程序。 / p>

在相反情况下,中断2将抢占执行并在完成后返回中断1处理程序。

b)Memset被中断(哦,哦,系统抛出异常)。

我不明白你的意思。 memset只是一个正常功能。如果中断在执行过程中到达,则当中断处理程序将控制权返回给它时,它将从被中断处继续执行。没有例外。中断总是发生在某些功能的中间。

如果两个处理程序都修改了相同的内存区域,则需要提供同步机制来防止此操作的意外结果。示例:中断1执行memset并将值5设置到从地址100开始到地址100结束的存储位置。您希望所有100个字节中都有5。但是与此同时(假设memset位于地址160),中断2到达并将相同的存储位置设置为10。当该中断完成执行时,该存储区被设置为10。但是中断1继续执行,并将剩余的40个字节设置为5。因此,将地址从100到159的存储区域设置为10,将地址从160到200的存储区域设置为5可能不是您所期望的。