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

c - 是否可以将 16 位值与 8 位比较匹配 ISR 进行比较

我正在尝试制作一个分辨率比 ATtiny85 8 位定时器/计数器更高的伺服控制器。到目前为止,我已经设法在 21'000 µs 的时间内在我的伺服系统上获得了大约 2000 个位置(1µs/步)。我还设法以不同的速度顺序移动 5 个伺服系统,但现在我想同步移动它们。

我最大的问题是我不明白我应该如何实现它!我环顾了其他伺服代码,包括servo8bit库,并试图找到一种方法。似乎大多数示例都使用比较匹配 ISR 来“同时”移动伺服系统,我的问题是我有一个 16 位整数要比较。

有没有办法做一些魔术,所以我可以使用 8 位比较匹配 ISR 和我的 16 位整数?或者你们中是否有人对我如何在不使用比较匹配 ISR 的情况下同步移动伺服系统有其他建议?

我希望我的问题有意义!

因为我还没有任何代码可以显示(只有没有比较匹配 ISR 的有缺陷的尝试是没有意义的)如果有帮助,我会将链接发布到我的TinyServo代码。

编辑1:

这是我提到的代码的一部分,第一次没有发布:

编辑2:

这是我认为代码应该如何工作的说明: 在此处输入图像描述

......但它没有!

0 投票
1 回答
620 浏览

c++ - 在 Timer ISR 中使用 FreeRTOS 中的全局值

使用:

  • Arduino 超级 2560
  • Arduino IDE
  • 定时器2

代码:

问题:

volatile int pulse是我想在 Timer2 的 ISR 中使用的全局变量。使用receiveTask,我从队列中获取值并将其设置为脉冲值。

但每次脉冲的值为0。

0 投票
0 回答
479 浏览

buffer - 如何实现缓冲区来获取字符串数组并解析它?(C eclipse 中的 ATmega16)

我想像这样获取一个字符串数组: #s;12;34;56:
我将数据放入缓冲区,以便可以解析/处理数据。因此数据必须在第一个缓冲区索引中包含一个“#”,在要处理的最后一个缓冲区索引中包含一个“:”。
如果找到该符号,则向终端发送一些响应,例如响应“k”。当我实时测试代码时,结果仍然有一些错误。
当我使用 ISR 时,我很困惑将 BufferWrite() 函数放在哪里。
这是我的代码:

0 投票
1 回答
1188 浏览

embedded - ISR 中的过早“返回”会发生什么?

我正在使用 AVR-GCC 4.9.2,我想知道如果我在 AVR 的 ISR 中过早返回会发生什么?

return被翻译成reti指令吗?还是我需要包括reti()我自己?

我正在寻找幕后发生的事情的详细解释。

0 投票
2 回答
587 浏览

c - ISR + 代码,将计数代码与 ISR 例程集成

我有一段用于 PIC 设备的 C 代码,它将 4 个单独的继电器驱动为预定义的模式,每个继电器都通过计算时间和发生频率来单独设置。这种模式无限期地继续下去,但发现标准 delay_ms 上的时间不够准确。我希望将其转换为 ISR 例程,我附上了下面依赖于标准延迟的代码供您阅读,我主要关心的是如何将此代码抽象为 ISR,因为我知道不要将所有这些代码粘贴到实际的 ISR 例程中,任何非常感谢您的建议。

0 投票
1 回答
228 浏览

watchdog - ISR 与 WDT 的代码结构?

Watchdog在带有中断服务程序的嵌入式代码中,复位应该在哪里?

在主循环中,还是在中断服务部分?

0 投票
1 回答
397 浏览

c - 为什么只有第一个中断有效?

我正在做一个个人项目,破解万用表并为其添加背光。我正在使用 Attiny13。

我有以下代码:

问题是它只在第一次中断(按钮按下)时唤醒,执行它然后什么都没有。如果我不使用睡眠(只留下 while(1);)程序按预期运行。你知道可能是什么问题吗?

LE:添加了完整的代码。如果我有:

然后一切正常。我只是想用睡眠来减少消耗。

0 投票
2 回答
1468 浏览

assembly - 8086 组装键盘 ISR 实现

我不明白为什么我为我的程序编写的键盘中断服务例程(每次按下一个键时都应该打印“hello world”)只在我在dosbox上执行.exe时发生一次。这是代码:

我尝试了一些事情,例如使用另一个中断(系统时钟 08h)推送和弹出寄存器,但它们都不起作用。我知道 ISR 至少运行一次,因为屏幕上出现“hello world”消息,但是每次我按下一个键时它都会打印出来,我不知道为什么它不打印。

我该如何解决这个问题?

0 投票
1 回答
2527 浏览

assembly - 操作的微操作顺序?

考虑以下微操作序列。

以下哪一项是该序列可能执行的操作?

  1. 取指令
  2. 操作数获取
  3. 条件分支
  4. 启动中断服务

答案是选项(4)。

我的尝试:

  1. 取指令:取指令:从 PC 中的地址读取指令代码并放入 IR。(红外←内存[PC])
  2. Operand fetch:必要时从内存中获取操作数:如果任何操作数是内存地址,则启动内存读取周期以将它们读入 CPU 寄存器。如果操作数在内存中,而不是在寄存器中,则操作数的内存地址称为有效地址,简称 EA。因此,操作数的获取可以表示为寄存器←内存[EA]。在当今的计算机上,CPU 比内存快得多,因此操作数获取通常需要多个 CPU 时钟周期才能完成。
  3. 条件分支指令导致 PSW 中的位置计数器设置为寄存器中指定的地址或寄存器加上 12 位偏移量,如果满足条件(并且寄存器不为 0)
  4. 中断服务程序 (ISR) 是硬件调用以响应中断的软件程序。ISR 检查中断并确定如何处理它。ISR 处理中断,然后返回一个逻辑中断值。

您能按选项中给出的操作的微操作顺序解释吗?

0 投票
1 回答
4370 浏览

c - 如何将 ISR 设置为每秒运行 - C Atmega328p

我正在编写一个需要每 0.5 秒检查一次传感器输入的代码。我想使用 ISR,因为我希望我的代码一直执行到传感器的输入发生变化。

我将如何设置此 ISR 以每 0.5 秒执行一次?

谢谢 :)