8ビットマイコンの割り込み処理・・・1バイトに収まるなら1バイトに
2022年9月1日:8ビットマイコンの割り込み処理・・・言い足りないぞ
ここ↑では、トランジスタ技術2018年5月号での記述を
「ちょっと違うけどなぁ」っと話題にしました。
この内容↓です。
「割り込み処理関数とメイン関数の両方から
アクセスされる変数はchar型にしておく」
確かに、1バイトにしておくと安全側にはなるのですが、
間違いなく割り込みを動かそうとすると、アトミック処理
(いったんn割り込み禁止にしてごそごそ)が必須です。
で、またまた何気なく古いトラ技を見ていたらの話
になります。
今度は2019年4月号。
この連載:宇宙ロケットMOMO 開発深堀り体験<2>
ブロック図を記したp.129の図1を見ると、ジャイロや
サーボの制御に8bitマイコンATmega328が乗った
Arduino Pro Miniが使われています。
p.135に制御ソフトが載っていたんで、ちょっと
追いかけてみました。
まず、目に入ったのが割り込みで処理されるであろう
変数です。
Volatileが前置されたint値(2バイト値)です。
これを使うのが0.1ms周期のタイマー割り込みの中。
pwm_cntがアップカウンタで、200になったら
出力ピンをHにしてゼロクリア。
そして、pwm_cntがpwm_h_periodeになったら
出力ピンをLにという制御。
200がPWM周期でpwm_h_periodでPWMの
パルス幅を決めています。
pwm_cntはこの割り込みの中だけで使われて
いるようなので、割り込みとの競合は問題なし。
比較するデータpwm_h_periodはどうかと追いかけ
ますと、gimbal_agl_to_pwmという関数で値を
出していました。
これはメイン側の処理です。
gimbal_agl_to_pwmがint値を算出して、それを
pwm_h_periodeに書く時に割り込みが入ると
どうなるか・・・
2バイト値ですので、2回に分けて値が書き込まれます。
もしその中間で割り込みが入り、なおかつ、
0x00FF → 0x0100 や 0xFFFF(-1) → 0x0001(+1)の
ような2バイトにまたがる数値の変化が発生したら、
割り込み処理での数値判定をミスするかもしれません。
しかし・・・このプログラムでは
・pwm_cntは200が最大値なんで、int値(2バイト)の
下位側しか変化しない。
・関数gimbal_abl_to_pwmが返す値は
+8~+20の範囲で1バイトの範囲内。
負にもならない。
ということで、2バイトデータと割り込み処理との競合は
大丈夫でした。
でも、もし上位バイト変化するようなint値なら
割り込み禁止にしてデータを更新して割り込み処理に
知らせるというアトミック処理が必須です。
このプログラムでは、変数が1バイトに収まるならデータの
宣言は1バイトでということにしておくと、処理も速くなるし
でエエんじゃないでしょか。
ただ、昔人間からすると、
charは符号有りか符号無しかどっちやねん?
コンパイラはどう処理するんや?
Arduino環境なら符号無しは byte やろ。
今ふうにちゃんと書くなら uint8_t、int8_t で宣言か。
こんなところが気になります。
| 固定リンク
「Arduino」カテゴリの記事
- 初めて買ったArduino UNO・・・今は(2023.05.25)
- 液晶表示コントローラ HD44780で迎撃(2023.05.16)
- Arduino UNOで3相モーターを回す(2023.05.01)
- Arduino サーミスタを使った温度測定で 【ゼロ除算問題】(2023.03.23)
- A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?(2023.03.21)
「割り込み処理」カテゴリの記事
- 初めて買ったArduino UNO・・・今は(2023.05.25)
- 8ビットマイコンの割り込み処理・・・1バイトに収まるなら1バイトに(2023.03.01)
- 8bitマイコンにも16bitのメモリ読み書き命令があった(2022.10.14)
- 何度も言うぞ! Arduino(8bitマイコン)の割り込みには気をつけろ!(2022.10.11)
- ロータリーエンコーダーのチャタリング波形(2022.09.11)
「トランジスタ技術」カテゴリの記事
- 「漆谷正義」さんとむちゃ接近遭遇していた(2023.05.08)
- オペアンプ NJU7062の駆動能力を見る(2023.05.06)
- トラ技Jr.のレールスプリッタ回路(2023.04.14)
- トラ技Jr. 2023年春号(2023.04.12)
- トランジスタ技術2023年5月号 PICマイコンの話(2023.04.10)
コメント