Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我不知道';我不想回到产生中断的线路_C_Stack_Isr - Fatal编程技术网

C 我不知道';我不想回到产生中断的线路

C 我不知道';我不想回到产生中断的线路,c,stack,isr,C,Stack,Isr,通常当中断发生时,程序返回到产生中断的线路 我想在ISR例程完成后从新行运行程序,也就是说,我不希望它从生成中断的地方返回 我是否必须更改存储在SP中的IP或其他内容 感谢英特尔x86中通常称为指令指针(IP)的PC(程序计数器)将存储下一个指令地址。您需要在中断程序结束时将PC换成换行符 您还可以增加中断例程结束时存储在堆栈中的Pc值,然后将其存储在Pc中。您的ISR不知道其中断的执行点,也不知道其中断的堆栈上存储了什么。只是“跳转”到另一个“行”,而不进行堆栈清理操作(这是不可能的,因为您不

通常当中断发生时,程序返回到产生中断的线路

我想在ISR例程完成后从新行运行程序,也就是说,我不希望它从生成中断的地方返回

我是否必须更改存储在SP中的IP或其他内容

感谢

英特尔x86中通常称为指令指针(IP)的PC(程序计数器)将存储下一个指令地址。您需要在中断程序结束时将PC换成换行符


您还可以增加中断例程结束时存储在堆栈中的Pc值,然后将其存储在Pc中。

您的ISR不知道其中断的执行点,也不知道其中断的堆栈上存储了什么。只是“跳转”到另一个“行”,而不进行堆栈清理操作(这是不可能的,因为您不知道上面有什么),将生成UB(可能UB在AV/SEGFULT端出错)

我所知道的实现类似于所希望的东西的唯一方法是切换到不同的堆栈—向线程正在等待的信号量/事件发送信号,并请求在ISR退出时运行OS调度程序。新准备好的线程可能会在ISR完成后立即运行(取决于加载/优先级等),甚至可能抢占被中断的线程,因此“从新行运行程序”,类似于:)