我有一個叫做interrupt_Foo() {...}
的中斷函數,它在1秒過去時打開一個標誌,並且一個用戶定義的函數foo_calling() {...}
調用另一個函數foo_called() {...}
。我想在1秒鐘內停止foo_called()
的過程。中斷退出功能
的代碼片段可如下闡述進一步我需要:
void interrupt interrupt_foo() {
...
if(1 second has elapsed) {
flag1s = 1;
} else {
flag1s = 0;
}
}
void foo_calling() {
// need something here to stop the process of foo_called()
...
(*fptr_called)(); // ptr to function which points to foo_called
...
}
void foo_called() {
// or something here to stop the process of this function
...
// long code
...
}
這是實時操作系統,以便輪詢1個第二標誌內foo_called()在代碼中的一些部分是不希望的。請幫忙。
否則怎麼你所期望的功能停止不投票的標誌?你寧願殺死線程嗎?這聽起來不像是最好的選擇恕我直言。 –
這是我的問題。由於這是針對微控制器(即PIC)的,所以線程可能具有複雜的實現。如果在微控制器中做先發制人的RTOS似乎是不可能的,那麼我會採用輪詢而不是最後的手段。 –
我和傑夫在一起,我認爲解決這個問題的唯一方法就是通過查詢這個變量。根據foo_called()中的內容,有很多聰明的方法可以進行輪詢,比如使用標記值或類似的東西。我看到你解決這個問題的唯一方法是,如果你正在編寫/編輯實時操作系統,並以某種方式改變信號處理程序中的TCB,並且有一種聰明的方法來管理它。 – dbeer