フォト
2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

« ドキュメント作成にAsciiDocを利用してみる (3) | トップページ | レーザーカッター初体験 »

2018年9月17日 (月)

豊四季Tiny BASIC for Arduino STM32 を更新しました

豊四季Tiny BASIC for Arduino STM32 をV0.86に更新しました。

注意:豊四季Tiny BASICのオリジナル版開発は私ではなく、鈴木氏です
オリジナル版 https://github.com/vintagechips/ttbasic_arduino
私は、オリジナル版からSTM32対応と機能拡張をしています。

V0.86の主な追加機能
・音楽演奏機能:PLAYコマンドの追加(MMLはマビノギMMLの文法をまねています)
・シリアルコンソール画面での全角文字対応(シフトJIS)
・TFT画面でのテキスト表示速度の改善(描画速度2倍、スクロール速度10倍)

V0.86からはプロジェクト管理サイトを
・Tamakichi/ttbasic_arduino_stm32
  https://github.com/Tamakichi/ttbasic_arduino_stm32

に変更しました。

01
マニュアル類は整備中です。AsciiDocを使ってリニューアル中です。
定数・コマンド関連のリファレンスマニュアル
https://tamakichi.github.io/ttbasic_arduino_stm32/manual.html

豊四季Tiny BASIC for Arduino STM32 コンパイル環境の構築
https://tamakichi.github.io/ttbasic_arduino_stm32/install.html


今回の修正ですが、
TFT(ILI9341)のフォント描画処理において、LI9341のウィンドウ機能とSTM32の
DMA転送の組合わせ技の効果が絶大で、いい感じに高速化出来ました。
DMA転送処理はオーバーヘッドが大きく、一回当たりのデータ送信量が少ないと、
効果で出ません。

通常、16ビットカラーで1文字(横6x縦8ドットx2バイト =  96バイト)を描画するにおいて、
1ライン目、2ライン目 ... 8ライン目とTFTへの転送アドレスは離散しており、
12バイト単位で8回発生します。オーバーヘッドの大きい、DMA転送において
これは効率が悪いです。

ところが、ウィンドウ機能を使って横6x縦8ドットの領域をウィンドウとして指定すると、
このウィンドウ内のドットは連続したシーケンシャルなデータ(連続したアドレス)とし
扱うことができます。

96バイトバイトを1回のDMA転送で行うことができます。
オーバヘッドが大きい処理が1回で済みます。
これは効果絶大でした。

また、TFT画面のスクロール処理や画面全体の再描画も
ウィンドウ機能を使うことで、DMA転送の一回当たりのデータ送信量を増やし、
DMA転送の回数を減らすことでオーバヘッドの大きい処理回数を減らすことで、
スクロール処理は10倍程度早くなりました。

このテクニックは、DMAを使わなくてもSPIのAPI呼び出し回数の削減にもなるので、
Arduino Unoでの高速化が期待できそうです。

« ドキュメント作成にAsciiDocを利用してみる (3) | トップページ | レーザーカッター初体験 »

arduino」カテゴリの記事

ARM」カテゴリの記事

STM32」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/67178954

この記事へのトラックバック一覧です: 豊四季Tiny BASIC for Arduino STM32 を更新しました:

« ドキュメント作成にAsciiDocを利用してみる (3) | トップページ | レーザーカッター初体験 »