Y座標の変換(x240)を表引きを使って高速化する(STM32のしょぼい方のマイコンのテクニック)(M0系とか)


x カラー液晶は、 ST7789 ST7789V2 ATM0130B3 の事

目的
カラーの再表示が遅いので少しでも早くする←(予定)
液晶の座標変換を高速化する
yの値を240倍する、処理。
あくまでも、2バイト符号なし整数、一次元配列の場合。
しょぼいSTM32のマイコンは、掛け算に32サイクルかかるらしい
(一部、場合によっては)(誇張、おおげさに言って)
原理として
4ビットのシフトに4回と
5ビットのシフトに5回と
6ビットのシフトに6回と
7ビットのシフトに7回
かかるらしい。それを全部足すと答え
11110000B倍すればよい
でも、8ビット以内に収まる表引きには1サイクルらしい
↑(ぼほ、本当)

使用オンラインコンパイラー


https://paiza.io/ja


例 drawPixelで仮想VRAMのアドレス変換をする。

```c++

      break;
    }//end switch

    //ドットのカラーの設定
    buffer[ y_shift[y] + x ] = color;

  }//if
}//drawPixel

```


プログラム


```c++:main.cpp


#include <iostream>
using namespace std;


int y_shift[]={
0,240,480,720,960,1200,1440,1680,1920,2160,
2400,2640,2880,3120,3360,3600,3840,4080,4320,4560,
4800,5040,5280,5520,5760,6000,6240,6480,6720,6960,
7200,7440,7680,7920,8160,8400,8640,8880,9120,9360,
9600,9840,10080,10320,10560,10800,11040,11280,11520,11760,
12000,12240,12480,12720,12960,13200,13440,13680,13920,14160,
14400,14640,14880,15120,15360,15600,15840,16080,16320,16560,
16800,17040,17280,17520,17760,18000,18240,18480,18720,18960,
19200,19440,19680,19920,20160,20400,20640,20880,21120,21360,
21600,21840,22080,22320,22560,22800,23040,23280,23520,23760,
24000,24240,24480,24720,24960,25200,25440,25680,25920,26160,
26400,26640,26880,27120,27360,27600,27840,28080,28320,28560,
28800,29040,29280,29520,29760,30000,30240,30480,30720,30960,
31200,31440,31680,31920,32160,32400,32640,32880,33120,33360,
33600,33840,34080,34320,34560,34800,35040,35280,35520,35760,
36000,36240,36480,36720,36960,37200,37440,37680,37920,38160,
38400,38640,38880,39120,39360,39600,39840,40080,40320,40560,
40800,41040,41280,41520,41760,42000,42240,42480,42720,42960,
43200,43440,43680,43920,44160,44400,44640,44880,45120,45360,
45600,45840,46080,46320,46560,46800,47040,47280,47520,47760,
48000,48240,48480,48720,48960,49200,49440,49680,49920,50160,
50400,50640,50880,51120,51360,51600,51840,52080,52320,52560,
52800,53040,53280,53520,53760,54000,54240,54480,54720,54960,
55200,55440,55680,55920,56160,56400,56640,56880,57120,57360
};



int main(void){
    for(int i=0;i<240;i++){
        printf("[%d]\t[%d]:",i,i*240);
        printf("\ty_shift[");
        printf("%d",i);
        printf("]=");
        printf("\t%d",y_shift[i]);
        printf(";");
        printf("\n\r");
    }
}



```

●結果


```


[0]	[0]:	y_shift[0]=	0;

[1]	[240]:	y_shift[1]=	240;

[2]	[480]:	y_shift[2]=	480;

[3]	[720]:	y_shift[3]=	720;

[4]	[960]:	y_shift[4]=	960;

[5]	[1200]:	y_shift[5]=	1200;

[6]	[1440]:	y_shift[6]=	1440;

[7]	[1680]:	y_shift[7]=	1680;

[8]	[1920]:	y_shift[8]=	1920;

[9]	[2160]:	y_shift[9]=	2160;

[10]	[2400]:	y_shift[10]=	2400;

[11]	[2640]:	y_shift[11]=	2640;

[12]	[2880]:	y_shift[12]=	2880;

[13]	[3120]:	y_shift[13]=	3120;

[14]	[3360]:	y_shift[14]=	3360;

[15]	[3600]:	y_shift[15]=	3600;

[16]	[3840]:	y_shift[16]=	3840;

[17]	[4080]:	y_shift[17]=	4080;

[18]	[4320]:	y_shift[18]=	4320;

[19]	[4560]:	y_shift[19]=	4560;

[20]	[4800]:	y_shift[20]=	4800;

[21]	[5040]:	y_shift[21]=	5040;

[22]	[5280]:	y_shift[22]=	5280;

[23]	[5520]:	y_shift[23]=	5520;

[24]	[5760]:	y_shift[24]=	5760;

[25]	[6000]:	y_shift[25]=	6000;

[26]	[6240]:	y_shift[26]=	6240;

[27]	[6480]:	y_shift[27]=	6480;

[28]	[6720]:	y_shift[28]=	6720;

[29]	[6960]:	y_shift[29]=	6960;

[30]	[7200]:	y_shift[30]=	7200;

[31]	[7440]:	y_shift[31]=	7440;

[32]	[7680]:	y_shift[32]=	7680;

[33]	[7920]:	y_shift[33]=	7920;

[34]	[8160]:	y_shift[34]=	8160;

[35]	[8400]:	y_shift[35]=	8400;

[36]	[8640]:	y_shift[36]=	8640;

[37]	[8880]:	y_shift[37]=	8880;

[38]	[9120]:	y_shift[38]=	9120;

[39]	[9360]:	y_shift[39]=	9360;

[40]	[9600]:	y_shift[40]=	9600;

[41]	[9840]:	y_shift[41]=	9840;

[42]	[10080]:	y_shift[42]=	10080;

[43]	[10320]:	y_shift[43]=	10320;

[44]	[10560]:	y_shift[44]=	10560;

[45]	[10800]:	y_shift[45]=	10800;

[46]	[11040]:	y_shift[46]=	11040;

[47]	[11280]:	y_shift[47]=	11280;

[48]	[11520]:	y_shift[48]=	11520;

[49]	[11760]:	y_shift[49]=	11760;

[50]	[12000]:	y_shift[50]=	12000;

[51]	[12240]:	y_shift[51]=	12240;

[52]	[12480]:	y_shift[52]=	12480;

[53]	[12720]:	y_shift[53]=	12720;

[54]	[12960]:	y_shift[54]=	12960;

[55]	[13200]:	y_shift[55]=	13200;

[56]	[13440]:	y_shift[56]=	13440;

[57]	[13680]:	y_shift[57]=	13680;

[58]	[13920]:	y_shift[58]=	13920;

[59]	[14160]:	y_shift[59]=	14160;

[60]	[14400]:	y_shift[60]=	14400;

[61]	[14640]:	y_shift[61]=	14640;

[62]	[14880]:	y_shift[62]=	14880;

[63]	[15120]:	y_shift[63]=	15120;

[64]	[15360]:	y_shift[64]=	15360;

[65]	[15600]:	y_shift[65]=	15600;

[66]	[15840]:	y_shift[66]=	15840;

[67]	[16080]:	y_shift[67]=	16080;

[68]	[16320]:	y_shift[68]=	16320;

[69]	[16560]:	y_shift[69]=	16560;

[70]	[16800]:	y_shift[70]=	16800;

[71]	[17040]:	y_shift[71]=	17040;

[72]	[17280]:	y_shift[72]=	17280;

[73]	[17520]:	y_shift[73]=	17520;

[74]	[17760]:	y_shift[74]=	17760;

[75]	[18000]:	y_shift[75]=	18000;

[76]	[18240]:	y_shift[76]=	18240;

[77]	[18480]:	y_shift[77]=	18480;

[78]	[18720]:	y_shift[78]=	18720;

[79]	[18960]:	y_shift[79]=	18960;

[80]	[19200]:	y_shift[80]=	19200;

[81]	[19440]:	y_shift[81]=	19440;

[82]	[19680]:	y_shift[82]=	19680;

[83]	[19920]:	y_shift[83]=	19920;

[84]	[20160]:	y_shift[84]=	20160;

[85]	[20400]:	y_shift[85]=	20400;

[86]	[20640]:	y_shift[86]=	20640;

[87]	[20880]:	y_shift[87]=	20880;

[88]	[21120]:	y_shift[88]=	21120;

[89]	[21360]:	y_shift[89]=	21360;

[90]	[21600]:	y_shift[90]=	21600;

[91]	[21840]:	y_shift[91]=	21840;

[92]	[22080]:	y_shift[92]=	22080;

[93]	[22320]:	y_shift[93]=	22320;

[94]	[22560]:	y_shift[94]=	22560;

[95]	[22800]:	y_shift[95]=	22800;

[96]	[23040]:	y_shift[96]=	23040;

[97]	[23280]:	y_shift[97]=	23280;

[98]	[23520]:	y_shift[98]=	23520;

[99]	[23760]:	y_shift[99]=	23760;

[100]	[24000]:	y_shift[100]=	24000;

[101]	[24240]:	y_shift[101]=	24240;

[102]	[24480]:	y_shift[102]=	24480;

[103]	[24720]:	y_shift[103]=	24720;

[104]	[24960]:	y_shift[104]=	24960;

[105]	[25200]:	y_shift[105]=	25200;

[106]	[25440]:	y_shift[106]=	25440;

[107]	[25680]:	y_shift[107]=	25680;

[108]	[25920]:	y_shift[108]=	25920;

[109]	[26160]:	y_shift[109]=	26160;

[110]	[26400]:	y_shift[110]=	26400;

[111]	[26640]:	y_shift[111]=	26640;

[112]	[26880]:	y_shift[112]=	26880;

[113]	[27120]:	y_shift[113]=	27120;

[114]	[27360]:	y_shift[114]=	27360;

[115]	[27600]:	y_shift[115]=	27600;

[116]	[27840]:	y_shift[116]=	27840;

[117]	[28080]:	y_shift[117]=	28080;

[118]	[28320]:	y_shift[118]=	28320;

[119]	[28560]:	y_shift[119]=	28560;

[120]	[28800]:	y_shift[120]=	28800;

[121]	[29040]:	y_shift[121]=	29040;

[122]	[29280]:	y_shift[122]=	29280;

[123]	[29520]:	y_shift[123]=	29520;

[124]	[29760]:	y_shift[124]=	29760;

[125]	[30000]:	y_shift[125]=	30000;

[126]	[30240]:	y_shift[126]=	30240;

[127]	[30480]:	y_shift[127]=	30480;

[128]	[30720]:	y_shift[128]=	30720;

[129]	[30960]:	y_shift[129]=	30960;

[130]	[31200]:	y_shift[130]=	31200;

[131]	[31440]:	y_shift[131]=	31440;

[132]	[31680]:	y_shift[132]=	31680;

[133]	[31920]:	y_shift[133]=	31920;

[134]	[32160]:	y_shift[134]=	32160;

[135]	[32400]:	y_shift[135]=	32400;

[136]	[32640]:	y_shift[136]=	32640;

[137]	[32880]:	y_shift[137]=	32880;

[138]	[33120]:	y_shift[138]=	33120;

[139]	[33360]:	y_shift[139]=	33360;

[140]	[33600]:	y_shift[140]=	33600;

[141]	[33840]:	y_shift[141]=	33840;

[142]	[34080]:	y_shift[142]=	34080;

[143]	[34320]:	y_shift[143]=	34320;

[144]	[34560]:	y_shift[144]=	34560;

[145]	[34800]:	y_shift[145]=	34800;

[146]	[35040]:	y_shift[146]=	35040;

[147]	[35280]:	y_shift[147]=	35280;

[148]	[35520]:	y_shift[148]=	35520;

[149]	[35760]:	y_shift[149]=	35760;

[150]	[36000]:	y_shift[150]=	36000;

[151]	[36240]:	y_shift[151]=	36240;

[152]	[36480]:	y_shift[152]=	36480;

[153]	[36720]:	y_shift[153]=	36720;

[154]	[36960]:	y_shift[154]=	36960;

[155]	[37200]:	y_shift[155]=	37200;

[156]	[37440]:	y_shift[156]=	37440;

[157]	[37680]:	y_shift[157]=	37680;

[158]	[37920]:	y_shift[158]=	37920;

[159]	[38160]:	y_shift[159]=	38160;

[160]	[38400]:	y_shift[160]=	38400;

[161]	[38640]:	y_shift[161]=	38640;

[162]	[38880]:	y_shift[162]=	38880;

[163]	[39120]:	y_shift[163]=	39120;

[164]	[39360]:	y_shift[164]=	39360;

[165]	[39600]:	y_shift[165]=	39600;

[166]	[39840]:	y_shift[166]=	39840;

[167]	[40080]:	y_shift[167]=	40080;

[168]	[40320]:	y_shift[168]=	40320;

[169]	[40560]:	y_shift[169]=	40560;

[170]	[40800]:	y_shift[170]=	40800;

[171]	[41040]:	y_shift[171]=	41040;

[172]	[41280]:	y_shift[172]=	41280;

[173]	[41520]:	y_shift[173]=	41520;

[174]	[41760]:	y_shift[174]=	41760;

[175]	[42000]:	y_shift[175]=	42000;

[176]	[42240]:	y_shift[176]=	42240;

[177]	[42480]:	y_shift[177]=	42480;

[178]	[42720]:	y_shift[178]=	42720;

[179]	[42960]:	y_shift[179]=	42960;

[180]	[43200]:	y_shift[180]=	43200;

[181]	[43440]:	y_shift[181]=	43440;

[182]	[43680]:	y_shift[182]=	43680;

[183]	[43920]:	y_shift[183]=	43920;

[184]	[44160]:	y_shift[184]=	44160;

[185]	[44400]:	y_shift[185]=	44400;

[186]	[44640]:	y_shift[186]=	44640;

[187]	[44880]:	y_shift[187]=	44880;

[188]	[45120]:	y_shift[188]=	45120;

[189]	[45360]:	y_shift[189]=	45360;

[190]	[45600]:	y_shift[190]=	45600;

[191]	[45840]:	y_shift[191]=	45840;

[192]	[46080]:	y_shift[192]=	46080;

[193]	[46320]:	y_shift[193]=	46320;

[194]	[46560]:	y_shift[194]=	46560;

[195]	[46800]:	y_shift[195]=	46800;

[196]	[47040]:	y_shift[196]=	47040;

[197]	[47280]:	y_shift[197]=	47280;

[198]	[47520]:	y_shift[198]=	47520;

[199]	[47760]:	y_shift[199]=	47760;

[200]	[48000]:	y_shift[200]=	48000;

[201]	[48240]:	y_shift[201]=	48240;

[202]	[48480]:	y_shift[202]=	48480;

[203]	[48720]:	y_shift[203]=	48720;

[204]	[48960]:	y_shift[204]=	48960;

[205]	[49200]:	y_shift[205]=	49200;

[206]	[49440]:	y_shift[206]=	49440;

[207]	[49680]:	y_shift[207]=	49680;

[208]	[49920]:	y_shift[208]=	49920;

[209]	[50160]:	y_shift[209]=	50160;

[210]	[50400]:	y_shift[210]=	50400;

[211]	[50640]:	y_shift[211]=	50640;

[212]	[50880]:	y_shift[212]=	50880;

[213]	[51120]:	y_shift[213]=	51120;

[214]	[51360]:	y_shift[214]=	51360;

[215]	[51600]:	y_shift[215]=	51600;

[216]	[51840]:	y_shift[216]=	51840;

[217]	[52080]:	y_shift[217]=	52080;

[218]	[52320]:	y_shift[218]=	52320;

[219]	[52560]:	y_shift[219]=	52560;

[220]	[52800]:	y_shift[220]=	52800;

[221]	[53040]:	y_shift[221]=	53040;

[222]	[53280]:	y_shift[222]=	53280;

[223]	[53520]:	y_shift[223]=	53520;

[224]	[53760]:	y_shift[224]=	53760;

[225]	[54000]:	y_shift[225]=	54000;

[226]	[54240]:	y_shift[226]=	54240;

[227]	[54480]:	y_shift[227]=	54480;

[228]	[54720]:	y_shift[228]=	54720;

[229]	[54960]:	y_shift[229]=	54960;

[230]	[55200]:	y_shift[230]=	55200;

[231]	[55440]:	y_shift[231]=	55440;

[232]	[55680]:	y_shift[232]=	55680;

[233]	[55920]:	y_shift[233]=	55920;

[234]	[56160]:	y_shift[234]=	56160;

[235]	[56400]:	y_shift[235]=	56400;

[236]	[56640]:	y_shift[236]=	56640;

[237]	[56880]:	y_shift[237]=	56880;

[238]	[57120]:	y_shift[238]=	57120;

[239]	[57360]:	y_shift[239]=	57360;


```