我可以将哪些 Cortex-M3 中断用于通用工作?

2023-11-26

我有一些代码需要在特定中断发生时运行。

我不想在中断本身的上下文中执行它,但我也不希望它在线程模式下执行。

我想以低于促使其运行的高级中断的优先级运行它,但也以高于线程级别(以及其他一些中断)的优先级运行它。

我想我需要使用其他中断处理程序之一。

哪些是最好使用的以及调用它们的最佳方式是什么?

目前,我计划只对一些我没有使用的外设使用中断处理程序,并通过直接通过 NVIC 设置位来调用它们,但我希望有一种更好、更官方的方法。

Thanks,


ARM Cortex 支持一种非常特殊的异常,称为 PendSV。看来您可以完全使用此异常来完成您的工作。事实上,ARM Cortex 的所有抢占式 RTOS 都使用 PendSV 来实现上下文切换。

为了使其工作,您需要优先考虑 PendSV 低电平(将 0xFF 写入 NVIC 中的 PRI_14 寄存器)。您还应该将所有 IRQ 的优先级设置为高于 PendSV(在 NVIC 中的相应优先级寄存器中写入较低的数字)。当您准备好处理整个消息时,从高优先级 ISR 触发 PendSV:

*((uint32_t volatile *)0xE000ED04) = 0x10000000; // trigger PendSV

然后,ARM Cortex CPU 将完成您的 ISR 以及可能被它抢占的所有其他 ISR,并最终将尾部链接到 PendSV 异常。这是解析消息的代码应该所在的位置。

请注意,PendSV 可能会被其他 ISR 抢占。这一切都很好,但您显然需要记住通过代码的关键部分(短暂禁用和启用中断)来保护所有共享资源。在 ARM Cortex 中,可以通过执行 __asm("cpsid i") 禁用中断,并通过 __asm("cpsie i") 启用中断。 (大多数 C 编译器为此目的提供内置函数或宏。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将哪些 Cortex-M3 中断用于通用工作? 的相关文章

  • 如何在没有 root 权限的情况下创建多分区 SD 磁盘映像?

    是否可以在没有 root 权限 即无环回挂载 的情况下在 linux 中创建完整的 SD 映像 我正在寻找一种自动化嵌入式系统映像创建的方法 该映像应包含特定的分区结构以及格式化为 FAT 和 ext2 的分区 并填充来自构建系统的文件 最
  • 浮点线性插值

    在两个变量之间进行线性插值a and b给定一个分数f 我目前正在使用这段代码 float lerp float a float b float f return a 1 0 f b f 我认为可能有一种更有效的方法 我使用的是没有 FPU
  • 如何在嵌入式Linux中检测GPIO线上的中断?

    GPIO 39 上每 10ms 产生一个中断熊猫板 OMAP4 http www ti com product OMAP4460 我已在 Linux 驱动程序代码中为此注册了一个处理程序 但由于未检测到中断 因此未调用该处理程序 我在硬件级
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • 在 Visual Studio 中进行嵌入式代码开发(尤其是使用 C18 的 PIC)

    我使用 Visual Studio 编写桌面应用程序 我发现它非常用户友好且易于使用 如果可能的话 我还想在Visual Studio中编写嵌入式代码 例如 是否可以使用 C18 或任何其他类似的基于 C 的语言为 PIC18Fxxx 系列
  • 有人有关于 C 语言设计和错误跟踪/控制系统的好指南吗?

    我是 C 开发的软件工程方面的新手 有没有人有关于如何为 C 项目 尤其是嵌入式 设计错误跟踪或错误控制系统的良好指南 谈论 C 库的错误跟踪也会有帮助 根据我的经验 这里的策略分为几个阵营 全局变量ala的使用errno http www
  • Node.js |如何通过串口向设备发送和接收一个字节?

    我正在尝试编写使用以下方法的 Node js 脚本serialport https serialport io 用于读取和写入数据的 npm 包COM5串行端口 使用 RS 232 电缆连接到设备 该设备会自动传输其拥有的数据 要检索设备内
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • stm32中如何在同一个回调函数中从不同的uart获取数据

    我使用的是stm32f407控制器 我正在使用 2 个 uart 2 3 我第一次被中断 但第二次我在 uart 2 上被中断 我在 uart3 上没有被中断 下面是我的回调函数 void HAL UART RxCpltCallback U
  • 如何随时暂停 pthread?

    最近我开始将 ucos ii 移植到 Ubuntu PC 上 我们知道 在pthread的回调函数中的 while 循环中简单地添加一个标志来执行暂停和恢复是不可能模拟ucos ii中的 进程 的 如下解决方案 因为ucos ii中的 进程
  • 工作站和嵌入式程序员之间的心态差异[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 用于嵌入式系统的简约人类可读序列化格式解析器

    By 人类可读的序列化格式 I mean YAML JSON INI或喜欢 请注意 XML对于我的目的来说太冗长而且太不方便 所以让我们把它作为最后的手段 格式应将数据存储为 命名键 值 配对并允许嵌套和数组 不过 缺少数组并不重要 此外
  • 嵌入式系统:使用汇编语言时的内存布局

    根据我的理解 嵌入式系统运行机器代码 有多种方法可以生成此代码 一种是用 C 等高级语言编写程序 然后使用编译器获得这样的代码 另一种方法是用汇编语言为该嵌入式系统编写指令 并使用汇编器将其转换为机器代码 现在我们得到了加载到系统并执行的机
  • 错误:-march= 开关的值错误

    我写了一个Makefile 但无法让它工作 我有一个选项应该选择编译到哪个处理器 然而 当我跑步时make从命令行它说 tandex tandex P 6860FX emulators nintendo sdks 3DS SDK HomeB
  • 如何使用从偶数地址边界开始的两个字节值填充 S 记录?

    当我编译代码时我最终得到摩托罗拉 S 记录 http en wikipedia org wiki SREC 28file format 29 a mot 有间隙 整个地址范围不被代码和数据覆盖 我想用图案来填补这些空白0x01 0x80 然
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • 在 C/C++ 中除了使用 % (模数)之外还有其他选择吗?

    我曾经在某处读到 模数运算符在小型嵌入式设备 例如没有整数除法指令的 8 位微控制器 上效率低下 也许有人可以证实这一点 但我认为差异比整数除法运算慢 5 10 倍 除了保留计数器变量并在 mod 点手动溢出到 0 之外 还有其他方法可以做
  • ARM C++ - 如何将 const 成员放入闪存?

    我有这个代码 class IO public IO LPC GPIO TypeDef port int pin pin pin port port const int pin LPC GPIO TypeDef const port void

随机推荐

  • 如何在 OS X 上的 JavaFX 中显示表情符号?

    我在 Mac OS X 上的 JavaFX 应用程序中显示表情符号时遇到问题 在 Linux 上 只要系统上有表情符号字体 Symbola Noto Emoji 字体替换就会启动 然而 在 OS X 上却没有这样的运气 我尝试过添加Symb
  • 使用 JPA Hibernate 自动保存子对象

    我的父表和子表之间有一对多的关系 在父对象中我有一个 List
  • Eclipse 何时原生支持 Java 9?

    我知道有一个插件Java 9 对 Oxygen 的支持但有谁知道Eclipse什么时候会原生支持Java 9 我查看了项目网站和博客 行星食 但找不到任何信息 支持JDK 9 and JUnit 5将与Eclipse Oxygen 1a 2
  • PHP、nodeJS 和会话

    我有一个传递 php 文件的经典 apache 服务器 以及一个用于该 PHP 网站上的实时事件管理的 nodeJS 服务器 带有 socket io 但没有 express connect 我有时需要对连接到nodeJS服务器的客户端进行
  • 如何在 Delphi 中实现线程安全列表包装器?

    我有一个列表包装器 它维护两个 Tstringlists 和一个 TClassList 我需要它是线程安全的 这样 不允许并发写入 应进入某种等待状态 不允许边写边读 反之亦然 应该进入某种等待状态 并发读取are allowed 关于我如
  • boost::uuids::uuid 作为 std::unordered_map 中的键?

    我在 Mac OS X 上使用 clang CXX clang std c 11 stdlib libc 使用 boost 1 53 0 我想使用 uuid 作为 unordered map 中的键 但出现以下错误 usr bin lib
  • Java 中嵌套集合/结构的类型安全扁平化

    我想展平任意深度嵌套的集合 结构Java 中某种类型 T 的元素 最好是 只有实时视图 没有复制集合 不仅可以处理 Collections 还可以处理 Iterator 任意维度的 T 数组 Iterable 以及所有这些任意混合和嵌套的结
  • “反序列化时出错” - foreach/doSNOW/snow with SOCK (windows)

    我正在使用 SOCK 集群与本地计算机上的工作人员运行并行操作 如果我限制要迭代的集合 在一次测试中使用 70 个而不是完整的 135 个任务 那么一切都会正常工作 如果我选择全套 我会收到错误 unserialize socklist n
  • 简单的 XML 反序列化

    我正在尝试简单的 XML 序列化器 我对从 XML gt Java 的反序列化更感兴趣 这是我作为单元测试的代码 import java io StringReader import java io StringWriter import
  • Android Activity 重写的函数必须调用 super.*

    创建自己的 Activity 子类时 我们将重写一些基本的 Activity 生命周期函数 其中我们must调用超级实现 我们在其中should它在哪里只有良好的举止 base lifecycle onCreate Bundle saved
  • 使用 c:forEach tomcat ver7.0 时出现 JSTL 错误 javax/servlet/jsp/jstl/core/LoopTag 错误 [重复]

    这个问题在这里已经有答案了 你好使用Eclipse Juno 动态 Web 项目apache Tomcat v7 0 有自己的jstl 1 2 1 jar 我收到这个错误 javax servlet ServletException jav
  • 列出给定类的层次结构中的所有基类?

    给定一个类Foo 无论是一个新风格类与否 你如何生成all基类 继承层次结构中的任何位置 它issubclass of inspect getmro cls 适用于新式和旧式类 返回值与NewClass mro 类及其所有祖先类的列表 按用
  • 如何创建一个接受多个块的 Perl 子例程?

    使用原型 您可以创建一个接受代码块作为其第一个参数的子例程 sub example my code ref shift code ref gt example print Hello n 我怎样才能做同样的事情 但使用多个代码块 我想使用代
  • GAS 是否可以立即替换 getActiveDocument().getSelection() ?

    My User has the following selection in his Gdoc 现在 他想从侧边栏替换他在文档中所做的选择 GAS 问题是是否可以立即做到这一点 例如 var selection DocumentApp ge
  • 使用 Chrome Web 开发人员工具在 Angular 2 CLI 项目中未显示 Typescript 文件

    我使用 angular2 CLI ember cli 生成了一个打字稿项目 我正在使用 Chromium Web Developer 工具进行调试 我在开发人员工具设置中选择了 启用 javascript 源映射 我看到源视图中列出了 js
  • 如何在运行时向 ListView 项添加动态视图?

    我的问题是 我不知道是否应该使用多个列表视图或可以动态增长的自定义列表视图项目适配器 例如 对于特定用户 他们可以有多个活动 拍照 说些什么 办理登机手续 显然 这个列表会随着用户进行更多活动而增长 大多数时候 我经常创建一个自定义项目适配
  • 在 ASP.NET MVC 和 IIS7 中记录原始 HTTP 请求/响应

    我正在编写一个 Web 服务 使用 ASP NET MVC 出于支持目的 我们希望能够以尽可能接近原始的在线格式 即包括 HTTP方法 路径 所有标头和正文 存入数据库 我不确定如何以最少 损坏 的方式获取这些数据 我可以通过检查该请求的所
  • 如何改变JTabbedPane的背景颜色?

    我知道你可以修改LaF属性 但是如果不这样做 如何实现这一点呢 我问只是因为setBackground似乎没有这样做 请注意 我希望更改以下属性 TabbedPane background or TabbedPane contentArea
  • 验证是否调用了所有 getter 方法

    我有以下测试 我需要验证 Person 类的所有 getter 是否都被调用 到目前为止 我已经使用了mockito的verify 来确保调用每个getter 有没有办法通过反射来做到这一点 可能会出现这样的情况 一个新的 getter 被
  • 我可以将哪些 Cortex-M3 中断用于通用工作?

    我有一些代码需要在特定中断发生时运行 我不想在中断本身的上下文中执行它 但我也不希望它在线程模式下执行 我想以低于促使其运行的高级中断的优先级运行它 但也以高于线程级别 以及其他一些中断 的优先级运行它 我想我需要使用其他中断处理程序之一