【问题标题】:What happens if there's an IRQ when executing a stmfd instruction?如果在执行 stmfd 指令时出现 IRQ 会发生什么?
【发布时间】:2017-02-14 21:01:01
【问题描述】:

stmfd 指令是否被视为一条指令,这是否意味着它将在处理 IRQ 之前完全执行? 还是看成多条指令,是不是意味着我们要处理IRQ,然后完成stmfd指令?

【问题讨论】:

  • 取决于内核,必须分别查看每个内核和/或您拥有的特定内核。
  • 您通常不应该关心中断了什么指令。你唯一关心的是这是否与一个(设计不良的)外围设备进行通信,该外围设备对写入起作用,以某种方式,如果一些写入发生然后停止,然后其中一些再次发生(在它们的相同地址)或者它在中断的地方继续,外设的行为与它们在某个时间范围内按顺序发生的情况不同(一个 stm 无论如何都不能确保远端在任何确定的时间范围内得到事情,即使没有被中断)。
  • 出于延迟原因,人们可能会关心(或至少认为这很重要)。这取决于核心。一些 CORE 具有控制行为的配置。即,原子的或可重新启动的。较旧的内核总是原子的。通常,这仅与 FIQ 相关。除非您的内存非常慢,否则屏蔽 IRQ 和嵌套的其他地方通常会更长。

标签: arm


【解决方案1】:

确切的答案取决于您拥有的确切核心。例如,在 ARM Cortex-M4 上,这个操作不是原子的并且是可中断的。看这里 - http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/ch03s09s01.html

处理器实现可中断连续指令 场地。加载多个(LDM)操作并存储多个(STM) 操作是可中断的。 EPSR 的 ICI 字段持有 继续加载或存储多个从所需的信息 中断发生的点。这意味着软件不得 使用 load-multiple 或 store-multiple 指令来访问设备或 对读取敏感或对重复写入敏感的内存区域。 在任何情况下,软件都不得使用这些说明 重复读取或写入可能会导致结果不一致或不需要 副作用。

您应该在您拥有的 ARM 内核的文档中查找相同的章节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多