问题标签 [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.
c - 是否可以将 16 位值与 8 位比较匹配 ISR 进行比较
我正在尝试制作一个分辨率比 ATtiny85 8 位定时器/计数器更高的伺服控制器。到目前为止,我已经设法在 21'000 µs 的时间内在我的伺服系统上获得了大约 2000 个位置(1µs/步)。我还设法以不同的速度顺序移动 5 个伺服系统,但现在我想同步移动它们。
我最大的问题是我不明白我应该如何实现它!我环顾了其他伺服代码,包括servo8bit库,并试图找到一种方法。似乎大多数示例都使用比较匹配 ISR 来“同时”移动伺服系统,我的问题是我有一个 16 位整数要比较。
有没有办法做一些魔术,所以我可以使用 8 位比较匹配 ISR 和我的 16 位整数?或者你们中是否有人对我如何在不使用比较匹配 ISR 的情况下同步移动伺服系统有其他建议?
我希望我的问题有意义!
因为我还没有任何代码可以显示(只有没有比较匹配 ISR 的有缺陷的尝试是没有意义的)如果有帮助,我会将链接发布到我的TinyServo代码。
编辑1:
这是我提到的代码的一部分,第一次没有发布:
编辑2:
这是我认为代码应该如何工作的说明:
......但它没有!
c++ - 在 Timer ISR 中使用 FreeRTOS 中的全局值
使用:
- Arduino 超级 2560
- Arduino IDE
- 定时器2
代码:
问题:
volatile int pulse
是我想在 Timer2 的 ISR 中使用的全局变量。使用receiveTask
,我从队列中获取值并将其设置为脉冲值。
但每次脉冲的值为0。
buffer - 如何实现缓冲区来获取字符串数组并解析它?(C eclipse 中的 ATmega16)
我想像这样获取一个字符串数组:
#s;12;34;56:
我将数据放入缓冲区,以便可以解析/处理数据。因此数据必须在第一个缓冲区索引中包含一个“#”,在要处理的最后一个缓冲区索引中包含一个“:”。
如果找到该符号,则向终端发送一些响应,例如响应“k”。当我实时测试代码时,结果仍然有一些错误。
当我使用 ISR 时,我很困惑将 BufferWrite() 函数放在哪里。
这是我的代码:
embedded - ISR 中的过早“返回”会发生什么?
我正在使用 AVR-GCC 4.9.2,我想知道如果我在 AVR 的 ISR 中过早返回会发生什么?
会return
被翻译成reti
指令吗?还是我需要包括reti()
我自己?
我正在寻找幕后发生的事情的详细解释。
c - ISR + 代码,将计数代码与 ISR 例程集成
我有一段用于 PIC 设备的 C 代码,它将 4 个单独的继电器驱动为预定义的模式,每个继电器都通过计算时间和发生频率来单独设置。这种模式无限期地继续下去,但发现标准 delay_ms 上的时间不够准确。我希望将其转换为 ISR 例程,我附上了下面依赖于标准延迟的代码供您阅读,我主要关心的是如何将此代码抽象为 ISR,因为我知道不要将所有这些代码粘贴到实际的 ISR 例程中,任何非常感谢您的建议。
watchdog - ISR 与 WDT 的代码结构?
Watchdog
在带有中断服务程序的嵌入式代码中,复位应该在哪里?
在主循环中,还是在中断服务部分?
c - 为什么只有第一个中断有效?
我正在做一个个人项目,破解万用表并为其添加背光。我正在使用 Attiny13。
我有以下代码:
问题是它只在第一次中断(按钮按下)时唤醒,执行它然后什么都没有。如果我不使用睡眠(只留下 while(1);)程序按预期运行。你知道可能是什么问题吗?
LE:添加了完整的代码。如果我有:
然后一切正常。我只是想用睡眠来减少消耗。
assembly - 8086 组装键盘 ISR 实现
我不明白为什么我为我的程序编写的键盘中断服务例程(每次按下一个键时都应该打印“hello world”)只在我在dosbox上执行.exe时发生一次。这是代码:
我尝试了一些事情,例如使用另一个中断(系统时钟 08h)推送和弹出寄存器,但它们都不起作用。我知道 ISR 至少运行一次,因为屏幕上出现“hello world”消息,但是每次我按下一个键时它都会打印出来,我不知道为什么它不打印。
我该如何解决这个问题?
assembly - 操作的微操作顺序?
考虑以下微操作序列。
以下哪一项是该序列可能执行的操作?
- 取指令
- 操作数获取
- 条件分支
- 启动中断服务
答案是选项(4)。
我的尝试:
- 取指令:取指令:从 PC 中的地址读取指令代码并放入 IR。(红外←内存[PC])
- Operand fetch:必要时从内存中获取操作数:如果任何操作数是内存地址,则启动内存读取周期以将它们读入 CPU 寄存器。如果操作数在内存中,而不是在寄存器中,则操作数的内存地址称为有效地址,简称 EA。因此,操作数的获取可以表示为寄存器←内存[EA]。在当今的计算机上,CPU 比内存快得多,因此操作数获取通常需要多个 CPU 时钟周期才能完成。
- 条件分支指令导致 PSW 中的位置计数器设置为寄存器中指定的地址或寄存器加上 12 位偏移量,如果满足条件(并且寄存器不为 0)
- 中断服务程序 (ISR) 是硬件调用以响应中断的软件程序。ISR 检查中断并确定如何处理它。ISR 处理中断,然后返回一个逻辑中断值。
您能按选项中给出的操作的微操作顺序解释吗?
c - 如何将 ISR 设置为每秒运行 - C Atmega328p
我正在编写一个需要每 0.5 秒检查一次传感器输入的代码。我想使用 ISR,因为我希望我的代码一直执行到传感器的输入发生变化。
我将如何设置此 ISR 以每 0.5 秒执行一次?
谢谢 :)