表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
6/26

6.terminalとdisplayの構造

いろいろ調べた結果のまとめ


確認に使ったmicroPython用ドライバ(再掲)

https://github.com/zenodante/PicoCalc-micropython-driver


このドライバの構造は大まかに以下

pico_files/modules

ドライバの Python インタフェース部分

picocalcdisplay/picocalcdisplay.c

Cで記述してある display ドライバ本体

vtterminal/vtterminal.c

Cで記述してある VT100 エミュレータライバ本体

displayモードはデフォルトの 4bit/pixel を前提にしている


このpicocalcdisplayとvtterminalが連携して動作している。

ざっくり書くと

displayがframebufferを確保し、teriminalが標準入出力データを横取り(dupterm)して文字bitmapを作成し framebuffer に書き込む。


1.display driver

初期化時に framebuffer を確保しアドレスを返す。

RGB565だと 204KB必要だが標準の4bitモードだと51kBで済む。

このメモリにデータを書いておけば、自動的にLCDに転送される。

リフレッシュ有効・無効の切り替え可。WiFiを使う場合はリフレッシュ無効にする必要あり。


画面モードとは無関係に LCD は RGB565 になっている。

CPU負荷の都合か、LCDへのデータ転送は Picoの core1 を占有して実行している。

(自分でコア1を使いたいときはどうすればいい??)


core1の動作は以下

1. framebuffer から64ピクセル分のデータ読み出す

2. カラーテーブル(LUT)を参照し、RGB565に変換

3. 64x2バイトの Linebuffer にコピー

4. Linebuffer をDMA転送でSPI経由LCDへ送る

以後、繰り返し


RGB565の場合は framebuffer を直接変換なしでLCDへ送る。これが画面が乱れる原因。

terminal は framebuffer が 4bitモードを前提としてデータを書きこむためアドレスがずれる。

色数が多いモードなら画面が乱れるだけだが、色数が少ないモードだとメモリ破壊を起こす。



評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ