Stellaris LM3S811で日本語 | 16.78MHz

Stellaris LM3S811で日本語

k6x8でテキストを画像にしてStellarisの開発環境を整えてからずいぶん経ってしまったが、Stellarisで日本語を表示しておく。まずテキストの画像化で使ったk6x8描画関数をStellaris用に少し変更したものStellarisWareディレクトリの直下に展開する。(この場所に展開する理由はサンプルプログラムのMakefileから最小限の変更で済むという理由しかないので、あなたがMakefileの書き方をよく知っているのならどこに展開しても構わない)
続いてサンプルプログラムのhelloのなかから必要なものをコピーする
$ cd /path/to/StellarisWare/
$ cd boards/ek-lm3s811/
$ mkidr japanese
$ cp hello/{Makefile,hello.c,hello.ld,startup_gcc.c} japanese/
$ cd japanese/

そしてこのパッチを当ててビルドする。
$ patch -p1 <./japanese.diff
$ make

問題がなければgcc/hello.binが出来上がっているので、これをOpenOCDでボードに書き込む。ボードをリセットするとOLEDディスプレイにこんなのが出てくる。
16.78MHz-アレゲ
中でやってることについて軽く説明しておくと、まず1行分のテキストを画像にして、それをStellarisWareディレクトリ以下に入っているOLEDドライバの画像表示関数Display96x16x1ImageDrawを使って表示している。Stellaris LM3S811のOLEDディスプレイは96x8のディスプレイが2段重なって縦16ドットになっており1バイトが縦1列に対応する。OLEDドライバはこのフォーマットで画像データを渡すことを要求しているが、元々このk6x8でテキストを画像にする関数はStellarisで使うために作ったので、グリフデータは最初からこのフォーマットになっている。というわけで、drawLine関数ひたすら必要な部分を切り貼りする作業を行っている。ソースを書いてから思ったのだがこの関数名はベクタ画像でも描き始めたら絶対に同じ名前の関数を別の場所で作りそうだから別の名前に変えた方がいいかもしれない。改行やオフスクリーンバッファに描画してスクロールみたいなややこしいことは今日のところはしていないが、そんなに面倒ではないので近いうちに実装する予定。