问题标签 [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 投票
2 回答
11080 浏览

timer - 如何在sw4stm32中启用中断功能

我使用 SW4STM32 工具链,我想在溢出时使用 timer2 闪烁 LED,在 STM32103RET 中,这是我打开和关闭 LED 的功能。

stm32 cube mx设置了timer2初始化,但是不知道timer2溢出时调用哪个函数?

0 投票
1 回答
6582 浏览

c++ - C++中的中断服务程序

对于实时嵌入式系统,我试图提供一个中断处理程序,它允许注册任何非静态方法指针(当然还有对象的实例),当中断发生时,它会被调用。

在 C 中,这很容易做到,例如:

Afaik,这符合调用非静态方法时 C++ 隐式调用的 this-call。

但是,编译器的 C++ 拒绝将方法指针转换为函数指针(至少我找不到这样做的方法)——这当然是可以理解的,但在我的情况下会适得其反。

有什么方法可以像 C 中那样直接模拟 C++ this-call 吗?我知道委托,但是我的编译器仅限于 C++98,没有 boost 库等;甚至自定义的轻量级实现,例如 Sergey Ryazanov 的 Impossibly Fast C++ Delegates,提供了我希望尽可能避免的一定开销。

0 投票
1 回答
95 浏览

assembly - 将特殊功能寄存器中的值存储到变量中

我正在开发一个基于飞思卡尔 MPC5534 控制器的开发项目。
对于某个要求,我需要在 ISR(已经存在)期间将两个特殊函数寄存器(即SRR0SRR1 )的值存储到可以从函数中访问的变量中。以下是现有 ISR 的汇编代码片段:

我打算如何以下列方式存储寄存器中的值:

困扰我的是,我怎么知道寄存器 r4 和 r5 是否已经被其他一些功能用完了(比如我无权访问其他项目文件)?如果是这样,我的方法对吗?我是否必须为此 ISR 推送和弹出 r4 和 r5 显式创建堆栈帧,以确保不会发生寄存器冲突?是否有意义?

现在我无法编译文件并查看。

任何使用过飞思卡尔或 powerPC 的人都可以帮助我。提前致谢。

0 投票
1 回答
163 浏览

c - 主代码中全局的可变限定符,但在 ISR 中没有

我的代码是用 C 编写的。我有一个 ISR(中断服务例程),它使用全局变量与主代码进行通信。ISR 与主代码位于不同的编译单元中。有什么理由我不能对主代码使用“易失性”,而是将其留在 ISR 中吗?

我的推理如下: volatile 限定符阻止编译器完全优化 ISR。从 ISR 的角度来看,该变量不是易失的 - 即在 ISR 期间它不能被外部更改,并且在 ISR 期间不需要输出值。此外,如果 ISR 在其自己的编译单元中,编译器必须让 ISR 在第一次使用之前从内存中读取全局,并且必须在返回之前将更改存储回来。我的理由是:不需要同时编译不同的编译单元,因此编译器不知道 ISR 范围之外发生了什么(或者它应该假装),因此它必须确保读取全局/写在 ISR 的边界。

也许,我误解了编译单元的意义?我发现的一个参考资料说 GCC 使这种易失性不匹配成为编译时错误;我不确定它怎么可能,如果它们在不同的编译单元中,它们不应该是独立的吗?我可以不单独编译库函数并稍后链接它吗?

使用 volatile 破坏系统代码的九种方法

也许可以从序列点的概念提出一个论据。我不完全理解序列点或副作用的概念;但是,C99 规范在 5.1.2.3 第 2 段中指出:“......在称为序列点的执行序列中的某些指定点处,先前评估的所有副作用都应是完整的,并且不应发生后续评估的副作用。 "

附件 C,列出了包括以下内容的序列点:

  • 在评估参数之后对函数的调用。
  • 紧接在库函数返回之前。

参考:WG14 文件:N1013,日期:2003 年 5 月 7 日

注意:上一个问题,相对于函数调用和返回的全局变量访问询问是否在函数调用和返回之前/之后存储/写入全局变量。但这是一个不同的问题,它询问全局变量在不同的编译单元中是否可能被不同地限定为“易失性”。我使用了很多相同的推理来证明我的初步结论是正确的,这促使一些读者认为这是同一个问题。

0 投票
0 回答
232 浏览

c - 在 MSP430 上的 ISR 期间发送 UART 字节

我试图找出在 ISR 中处理数据的最佳设计实践。我知道我希望我的 ISR 很快,那么在 ISR 期间向 UART 发送数据是否可以?我做的太多了吗?

0 投票
4 回答
780 浏览

c++ - 是否为每个函数和 ISR 分配了自己的堆栈大小

我假设这个问题取决于操作系统或平台。

它是在我使用端口音频库在 Windows 上编写 C++ 代码时出现的。

它在文档中声明不要在我的回调函数中编写太多代码,这些代码将被传递给端口音频引擎,因为根据系统,它可以从 ISR 和另一个论坛上的阅读中调用,说明它可能导致堆栈溢出。

我不是在这里询问任何特定于端口音频的事情,但我想知道如果在 ISR 中编写的代码比在主函数中编写的代码更多,为什么会出现堆栈空间问题。

我希望从回调中调用几个不同的函数。如果这个回调实际上是从 ISR 调用的,那么从 ISR 调用更多函数是否有问题?

当我调用每个函数时,这是否会允许我额外的堆栈空间,因为每个函数都有自己的最大堆栈大小?这我觉得有点混乱。

我一直认为函数和 ISR 可以使用尽可能多的堆栈堆栈空间,直到完整分配的堆栈。这是否意味着主函数比其他函数拥有更大的堆栈部分。

提前谢谢了。

0 投票
1 回答
152 浏览

contiki - 在 Contiki 上下文中使用 ISR 函数

我是使用 Contiki OS 的新手,我有一个基本问题。

我可以在 Contiki 流程中安全地使用低级别 ISR 吗?

我这样做是为了快速测试,它运行良好。但是,我担心我可能会破坏操作系统中的某些内容,这些内容稍后会在不同的条件下失败。

在基于事件计时器定期触发的进程的上下文中,我正在调用一个函数,该函数将 LED 设置为闪烁。LED 闪烁功能本身是由 Atmel SAMD21 MCU 上的硬件计时器触发的 ISR 的回调。

有人可以为我澄清在这种特殊情况下我应该关注哪些限制吗?

谢谢你。

0 投票
1 回答
180 浏览

c++ - 使用临时 volatile 限定符优化共享数组访问

我想知道在以下情况下,临时 volatile 限定符是否会产生正确的行为。假设 ISR 收集数组中的值,一旦收集到足够的值,它就表示准备就绪。

这里的 ISR 是伪代码

假设我们可以保证只有在发出信号array才会被读取,并且元素只能通过特定的方法访问: ready

根据cpp-reference似乎是允许的

将非易失性值转换为易失性类型无效。要使用易失性语义访问非易失性对象,必须将其地址转换为指向易失性的指针,然后必须通过该指针进行访问。

为了完整起见,主程序执行以下操作

在这种情况下,我应该期望从数组元素中读取正确的值array还是在数组元素上易失,以保证从内部写入数组ISR()实际上是在 RAM 中执行的?

请注意,为什么在 C 中需要 volatile?没有详细说明在这种特殊情况下是否需要 volatile。

0 投票
2 回答
1432 浏览

c - ARM 中断处理程序

首先要说我已经读过这个并且无法理解或得到明确的答案。我是一个试图学习 ARM 的 AVR 人。我正在对 ATMEL 的 ATSAM4LC2AA 进行编程。当我遇到 ISR 处理程序时,我应该禁用全局中断吗?如果是这样,这是正确的代码吗?

0 投票
1 回答
476 浏览

javascript - 有没有办法在运行 windows iot 的树莓派 2 上使用时钟中断

我正在为 Raspberry Pi 2 开发信号发生器 Windows IoT 通用 javascript 应用程序。

我通过 SPI 将 MCP4921 DAC 连接到它。

我想做的是生成具有给定频率、幅度和偏移的正弦波。我已经让设备工作了,但是当我尝试产生准确的波时,应用程序甚至可以减慢 10 Hz 的准确正弦波。

当前波是这样生成的。

我尝试使用 setInterval,我知道这不是一个好习惯,它至少要等待 10 毫秒才能再次运行。

有没有办法修改覆盆子定时器、时钟或任何东西以每 0.1 毫秒运行一次自定义中断 ISR 功能?

我已经在BCM2835 数据表BCM2836 数据表数据表中查看了 dma 寄存器。我找不到任何解决方案如何管理 Raspberry Pi 时钟中断,只有引脚中断。

我也知道如何在 Arduino Uno 中做到这一点,但这对我没有帮助,因为我不知道如何操作覆盆子寄存器。

这是生成的正弦波的图像。

正弦波

提前致谢。