エンジニアコラム

渡邊 聡 渡邉 聡

1 0

真犯人はいつも「まさか」

2017.01.30

真犯人はいつも「まさか」

ファーム開発では「タスクの優先度」を常に意識しよう

さて今回も新人の頃のお話です。通信チップ更新にともなう通信ドライバの変更で見落とした「タスク処理の優先度」についての経験です。

代替のLSIはDMAC非搭載タイプ

通信LSIにはDMAC(ダイレクト・メモリ・アクセス・コントローラ)を搭載したICがあります。ファームウェアを担当の方ならご存知の通り、DMACを搭載したLSIを使用すると、データ転送時にマイコンの処理負荷を軽減することができます。

【例1】データを送信したい場合
  登場物:DMAC搭載LSI、RAM、マイコン

(1) マイコンは送信したいデータをRAM上に作成
(2) マイコンはDMAC搭載LSIに送信開始アドレスと送信レングスを設定
(3) マイコンはDMAC搭載LSIに送信開始コマンドを発行
(4) DMAC搭載LSIはRAM上のデータを積極的に読み込んで送信
  →この時、マイコン側はデータ送信のことは意識せず、別の処理を行うことができる。
(5) DMAC搭載LSIはデータ送信完了を割り込みでマイコンに通知

【例2】データを受信したい場合
  登場物:DMAC搭載LSI、RAM、マイコン

(1) マイコンはDMAC搭載LSIに受信データを格納するRAMの開始アドレスと最大レングスを設定
(2) マイコンはDMAC搭載LSIに受信開始コマンドを発行
(3) DMAC搭載LSIはデータを受信すると、積極的にRAM上にデータを展開する。
  →この時、マイコン側はデータ受信のことは意識せず、別の処理を行うことができる。
(4) DMAC搭載LSIはデータ受信完了を割り込みでマイコンに通知

ある製品に採用されていたこのタイプのLSIが生産中止になり、DMAC非搭載LSIに代替が決まりました。DMAC非搭載LSIはFIFO(先入れ先出し)方式を取っており、マイコン側が積極的にデータをFIFOに書き込み or 読み込みしなければなりません。
なので、【例1】の(4)と【例2】の(3)においてマイコンの負荷が増える、つまり、送受信タスクのCPU占有率が前より高くなるということです。

さて、この製品、通信でファームアップデートができるのですが、「事件」はこのファームアップデートの検証中に起きました。

本サイトの閲覧には会員登録(無料)が必要です。

会員登録はこちら

×