x 過去ログを見てね!!
x いきなり、仮想VRAMといつてもわからない人よう
x ポインターや配列が[きちんと]理解できていれば、朝飯前。
目的
ST7735S(P)は、どうせなら速度を重視して仮想VRAM方式を採用
定義
VRAMとは、画面の情報が入っている一時的な領域
実VRAMとは、液晶装置側に搭載されたVRAM。
仮想VRAMとは、メインメモリー上に確保された一時的な
描画領域の事を言う。
仮想VRAM方式とは、実VRAMに直接に書き込むより、
速度が出て、ちらつきを抑えられる方式
デメリットは、実VRAMと同じ容量が必要
ST7735の時は、16ビットモードで
128x80で約20Kバイト
128x160で約40Kバイト
必要です。
仮想VRAMのサイズは、128x160です。
16ビットモードの時は、x2です。
リフレッシュとは、仮想VRAMの内容を
瞬時に実VRAMに転送して全画面を一気に
更新する事です。
実VRAMのバンク切り替えまたは、ページ切り替えは、
複数画面記録が出来る十分な実VRAMがある場合に
書き込み終わった、エリアを物理的に瞬時に切り替える方式
ST7735には、複数面の実VRAMは、ない
(ページインとかページアウトも同じ事)
(インとかアウトとかリフレッシュも同じ 人から見たらインが画面の表示)
(むかし、ズームインとか言う番組があった)
(バンクとは、あまり最近は、言わない インターネット老人会とバカにされる)
バンクとは、メモリの区切りのいいところで
物理アドレスの先頭を書き替えるで
瞬時にエリアを切り替える事
仕様
仮想VRAMの変数名は、bufferとする。
領域確保方法は、malloc関数を使い動的に確保する
mallocは、バイト単位で領域を動的に確保する。
誰も管理していないのでメモリーリークには、注意する事。
malloc(WIDTH * HEIGHT * 2)
仮想VRAMへのアクセス方法は、配列方式で行う
y_shift[y]は、7ビットシフト用の配列
//ドットのカラーの設定
buffer[ y_shift[y] | x ] = color;
リフレッシュは、全画面の更新
ptrとvgは、ポインターで実エリアを共有している。
for (int i = 0; i < (HEIGHT * WIDTH); i++) {
*ptr=buffer[i];
GPIO_8BIT(vg[1]);
//省略
GPIO_8BIT(vg[0]);
//省略
}//i