闪烁的led会减慢微处理器的速度
flashing led slows down microprocessor
我设计了一个系统,当电位计的电阻低于设定值时,LED会闪烁led1 = 1; wait(0.2); led1 = 0 wait(0.2)
,这就是发生的情况。我需要两个等待序列,否则用户看不到任何变化。我还连接了一个LCD,当用户按下按钮时,LCD会改变以显示不同的东西。问题是LCD中的这种变化明显减慢到wait(0.2)
语句(0.2秒延迟)。这给系统一种滞后的感觉。你知道我能做什么吗?
ISR我最初考虑将闪烁的LED放入中断程序,但很快意识到,如果用户不更改电位计的值,并且电位计总是设置为0,系统将只停留在ISR中。
轮询我的第二个想法是尝试轮询,使LED每100次进入此功能时闪烁一次。结果并不好,它会时不时地减慢系统的速度。如果它不放慢系统的速度,它就会走得太快。
我建议使用硬件计时器和ISR。通过以这种方式延迟程序执行,您将经历任何其他处理的"滞后",而不仅仅是LCD。
这里的关键是,你需要考虑你在ISR中放置的逻辑,这样它就不会停留在那里。。。使用条件if
子句或类似子句来对电位计读数做出反应。
您需要完成系统工程。
听起来你现在没有使用ISR,这可以很好地工作。你需要走自己的执行之路,了解最坏的情况。
其中一些可能是工具链+处理器的问题。如果您所说的轮询导致滞后(与强制等待循环相比),那么这很可能是您正在做的任何事情的处理器时间,并且将存在于ISR中。也许我误解了。如果你的处理器+时钟+编译器+编程语言+编码样式等产生的东西无法在完成任务所需的时间内完成所有任务,那么添加更多的东西(ISR、轮询等)不会让它更快。找出实际的问题并加以解决,不要只是抛出更多的问题。
使用硬件计时器,你可能有一个。当你在主循环中行走时,你检查锅是否低,计时器是否超时,或者从上次时间到当前时间的增量是否大于X,然后改变led状态并继续循环,不要停在那里等待。如果状态机更容易编程,就使用它(对一些人来说,状态机要困难得多)。
如果你有其他像这样消耗cpu的等待循环,也可以使用计时器,不要在那里等待,而是回来检查。
如果ISR处理程序没有检查所有条件(但非ISR解决方案检查了),则添加条件,如果pot值为0是特殊情况,则有代码检查特殊情况。或者,如果用户设置了这种情况,则不要启用(或禁用)中断。基本编程问题,"编程的小事"来解决它。
我不确定你到底是什么意思。由于存在wait(0.2)
语句,LCD刷新非常缓慢。LED语句不需要放在ISR中。LCD刷新后,继续处理主while循环(while(1)
)中的LED。
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- 线程相互减慢速度
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 使用 Unity 构建加快C++构建速度,并减少标头依赖项
- 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最大 5 fps 的速度录制,而不是通常的 30 f
- 闪烁的led会减慢微处理器的速度