|
|
发表于 2014-4-4 10:10:20
|
显示全部楼层
本帖最后由 Super169 于 2014-4-4 10:15 编辑
Arduino 並不支援 multi-thread 的, 而且 interrupt 內亦不應做太多事情, 特別要注意它跟當前工作的影響. 它會把當前執行中的工作暫停, 先執行了 interrupt 的事再執行. 如果有些工作在 interrupt 及 loop 的程序有互相衝突的話, 當執行完 interrupt 程序回到主程序時可能會有問題. 而且也會有混亂.
例如當 hw1 - hw4 讀取後, 執行 interrupt, 之後回到主程序, 會如何? 又或者在 motor action 中途執行 interrupt, 又有什麼事發生? 這些都要考慮的.
簡單一點, 可以在 interrupt 程序內只設定一個變數 (例如 motor_stop = 1) , 在 loop 之內 或每一個動作之前 再檢查該變數決定是否停止. 這樣的話, 當前執行的動作會先完成, 在下一個動作時才停止, 就會清楚及安全得多了. 只是不能即時停下來. 如要把當前的執行中的動作也即時停下來, 就要更複雜一點了, 又或者每一句執行動作都檢查一下該變數. 但也要考慮實際是否可行.
|
|