フレッシャーズのための組み込みソフト開発講座 ――新人エンジニアがまわりの信頼を勝ち得るには...

宿口雅弘

tag: 組み込み

技術解説 2002年3月14日

 あるとき,最大データ長を2,048バイトにする仕様変更が発生しました.そこで,内部バッファ・サイズだけを2,048バイトにして,リリースしました.ところが,受信データが1~2バイト欠落するというトラブルが発生したのです.

 原因は,内部バッファから上位プログラムのバッファへデータを転送する箇所を割り込み禁止にしていたためでした(図4(a)).内部バッファは,割り込みハンドラと通常のタスクによって共有されています.つまり,内部バッファを操作する場合,割り込み禁止が必須でした.割り込み禁止・解除の処理のオーバヘッドを嫌って,かなり長い区間を割り込み禁止にしたのですが,データ・サイズをまったく考慮していませんでした.

 例えば1バイトのコピーに1μsかかるとすると,128バイトの転送では128μsの割り込み禁止時間が生じます(これでも十分長いのだが,このときはたまたまほかの問題が発生しなかった).内部バッファのサイズが2,048バイトだと,割り込み禁止時間は2,048μs(=約2ms)にも及びます.これを9,600bpsの伝送速度で通信したとすると,約2バイトのデータを受信する間,割り込み禁止の状態となり,受信割り込みを検出できなかったのです.

 結局,割り込み禁止区間を見直して,オーバヘッドの問題をあきらめ,こまごまと割り込み禁止・解除の処理を行うことにしました(図4(b)).当時,仕様変更の依頼が来たとき,「割り込み禁止区間はだいじょうぶか?」と先輩たちに指摘されたのですが,筆者はその重要さや問題を認識できませんでした.

 この件を通じて,筆者は「割り込み禁止がシステムに及ぼす影響」や「データ数がプログラム(システム)全体に及ぼす影響」を身を持って感じるようになり,それ以降,割り込み禁止とデータ量の問題には非常に気を配るようになりました.

f04_01.gif

f04_02.gif
〔図4〕トラブルが発生したコピー処理
原因は,内部バッファから上位プログラムのバッファへデータを転送する箇所を割り込み禁止にしていたためだった.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日