c - 当按下输入时禁用/启用中断(时间)

标签 c assembly input interrupt avr

会清除中断/打破循环然后设置中断,恢复ISR吗? 我对格式化还很陌生,所以我不确定这是否可行。

else if(serial_input == 'p' || serial_input == 'P') {

    while(serial_input = fgetc(stdin)) {
        if(serial_input == 'p' || serial_input == 'P'){
            cli();
            break;
        }
        sei();  
    }

最佳答案

记住 sei() 和 cli() 的作用。 cli() 全局设置中断屏蔽,有效屏蔽所有传入中断。所有这一切都会在下一次 sei() 调用之前“保护”代码不被中断。在此期间收到的所有中断都不会被作为中断处理。实际上,在设置掩码位时,它们会被“忽略”。 Here是关于 AVR 中断的易于阅读的引用,其中包括有关 sei() 和 cli() 的信息以及我在下面提到的任何其他中断信息。

您询问有关停止和恢复 ISR 的问题,这本身就是一个奇怪的问题。当遇到中断时,当前进程将停止,使用 ISR 信息生成新的堆栈帧,并执行中断例程,直到遇到中断返回。

reti()// In AVR-C

这会重新加载您的用户程序。实际上没有(安全)方法可以“暂停”ISR 并返回到程序的主执行,只能返回到更深(更高优先级)的中断。为此查找嵌套中断。

关于c - 当按下输入时禁用/启用中断(时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035988/

相关文章:

c++ - Arduino 上运行时速度汇编与 C/C++ 的差异

assembly - movzwl、%ax 和负值的奇怪结果

java - 在 Java 程序的命令行中使用 *

c - If 语句和表达式质疑建议

c - 将节点插入二叉树时我在哪里做错了?

c++ - 机器语言究竟是什么?

c++ - 为什么 std::getline() 在格式化提取后跳过输入?

javascript - 使用 Javascript 获取动态列表中的输入值

c - Visual Studio 8 的 C 源代码上出现错误 C2491

c - 为什么我的变量在编译时报告为 "undeclared identifier"?