チェックサムもいろいろあるが
製品の世代によって、異なる2つのアーキテクチャのマイコンを使っているのだが、
新しい世代のマイコンで使っているコンパイラは、チェックサムの埋込を自動的にやってくれる。
けっこういろいろな設定が出来るので、ビット幅とかエンディアンとか自由自在で便利だ。
ところが、古い世代のマイコンのコンパイラは、チェックサムの埋込ができない。
そのため、別のツールでチェックサムを埋め込む処理をしている。
もっとも、チェックサムの埋め込み方が複雑なのも背景ではある。
ROM内を2つのセクションに分けて、セクションごとに末尾の定数にサムを埋め込むようになってるんだよね。
実態としては2つ目のセクションはほとんど意味を成していないけど。
今回、とある目的のために新しいセクションを追加して、このセクションに対してチェックサムを埋め込む必要が生じた。
他にも出力データにいくつかの加工が必要と言うことで、新しいツールを作った。
このツールはコンパイラからSフォーマット(モトローラ形式)で出力されたデータを読み込み、
これに対して、セクションごとにサムを埋め込み、さらにセクションによってアドレス変換を行う。
そして、最終的には バイナリデータ と Sフォーマット でROMデータを出力する。
バイナリとSフォーマットの両方で出力するのは、オフセットアドレスがあるから。
デバッガにはSフォーマットで食わせれば、オフセットアドレスの設定を考えなくても正しく認識されるので便利だろう。
一方でROMライターではバイナリデータを使っているので、バイナリデータの出力はそれはそれで必要。
さらにROMライターでの書き込みにあたってはROMライター用のチェックサムを計算しておかないといけない。
そのROMライター用のチェックサムも自動計算できるようにした。
やってみると気づくんだけど、いろいろな種類のチェックサムを計算しないといけないんだよね。
ROM内に埋め込むチェックサムは32bit幅で加算し続けたものが基本だが、一部の製品では、検出能力を高めるためにCRC16が採用されている。
(ちなみに新しい世代で使っているマイコンでは、CRC演算ペリフェラルが内蔵されていることもあって、CRC32で一貫している)
さらにSフォーマットでは行ごとにチェックサムが必要で、これは8bit幅で加算して1の補数(ビット反転)を取ったものである。
さらにROMライターのチェックサムはそれはそれで計算範囲や計算方法が違う。
今回のシステムでは16bit幅で加算したものがROMライター用のチェックサムになっている。
新しい世代のマイコンではROMライター用のサムは8bit幅で加算して計算するので、同じだと思ったら違ったので戸惑った。
というわけで、一言にチェックサムと言っても、いろいろあるのだ。
これを手作業でやるのはあり得ないけど、一方でオールインワンでできるツールはなかった。
複数のツールを組み合わせてやるのが現実的なところかと思うが、操作が複雑で時間がかかってしまう。
今回作ったツールはあらかじめ設定しておけば、ボタン1つで全部完了するので、とても便利ですね。
もっともROMライター用のサムは、生産準備のときだけ算出できればいいんだけどね。
ツールは必要と思ってたが、まずは手作業で加工して試してみようとか思ってたんだけど、想定よりも加工内容が多くてね。
それならということで最初からツールの作成に取りかかったんだけど、いろいろめんどくさかったね。
特にSフォーマットの加工をやるのが初めてで、いろいろ戸惑いもあった。
想定外だったのはコンパイラが吐くSフォーマットのデータがアドレス順に並んでなかったこと。
新しいバージョンのコンパイラはアドレス順だったけど、古いバージョンは気まぐれと言うほかない。
確かにSフォーマットの表現としては間違えてないけど、さすがにそれは考えなさすぎだろと。
それでも対応できるアルゴリズムに書き換えたら、シンプルになったからかえってよかったかもしれないが。
Author : Hidemaro
Date : 2019/07/11(Thu) 22:59
コンピュータ・インターネット | Comment | trackback (0)