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


目的
カラーの再表示が遅いので少しでも早くする(予定)
液晶の座標変換を高速化する
しょぼいSTM32のマイコンは、掛け算に32サイクル
、7ビットのシフトに7サイクルかかるらしい。
でも、8ビット以内の表引きには1サイクルらしい



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

https://paiza.io/?language=cpp



プログラム

```c++





#include <iostream>
using namespace std;


int y_shift[]={
0,128,256,384,512,640,768,896,1024,1152,
1280,1408,1536,1664,1792,1920,2048,2176,2304,2432,
2560,2688,2816,2944,3072,3200,3328,3456,3584,3712,
3840,3968,4096,4224,4352,4480,4608,4736,4864,4992,
5120,5248,5376,5504,5632,5760,5888,6016,6144,6272,
6400,6528,6656,6784,6912,7040,7168,7296,7424,7552,
7680,7808,7936,8064,8192,8320,8448,8576,8704,8832,
8960,9088,9216,9344,9472,9600,9728,9856,9984,10112,
10240,10368,10496,10624,10752,10880,11008,11136,11264,11392,
11520,11648,11776,11904,12032,12160,12288,12416,12544,12672,
12800,12928,13056,13184,13312,13440,13568,13696,13824,13952,
14080,14208,14336,14464,14592,14720,14848,14976,15104,15232,
15360,15488,15616,15744,15872,16000,16128,16256,16384,16512,
16640,16768,16896,17024,17152,17280,17408,17536,17664,17792,
17920,18048,18176,18304,18432,18560,18688,18816,18944,19072,
19200,19328,19456,19584,19712,19840,19968,20096,20224,20352
};



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




```

結果

```


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

[1]	[128]:	y_shift[1]=	128;

[2]	[256]:	y_shift[2]=	256;

[3]	[384]:	y_shift[3]=	384;

[4]	[512]:	y_shift[4]=	512;

[5]	[640]:	y_shift[5]=	640;

[6]	[768]:	y_shift[6]=	768;

[7]	[896]:	y_shift[7]=	896;

[8]	[1024]:	y_shift[8]=	1024;

[9]	[1152]:	y_shift[9]=	1152;

[10]	[1280]:	y_shift[10]=	1280;

[11]	[1408]:	y_shift[11]=	1408;

[12]	[1536]:	y_shift[12]=	1536;

[13]	[1664]:	y_shift[13]=	1664;

[14]	[1792]:	y_shift[14]=	1792;

[15]	[1920]:	y_shift[15]=	1920;

[16]	[2048]:	y_shift[16]=	2048;

[17]	[2176]:	y_shift[17]=	2176;

[18]	[2304]:	y_shift[18]=	2304;

[19]	[2432]:	y_shift[19]=	2432;

[20]	[2560]:	y_shift[20]=	2560;

[21]	[2688]:	y_shift[21]=	2688;

[22]	[2816]:	y_shift[22]=	2816;

[23]	[2944]:	y_shift[23]=	2944;

[24]	[3072]:	y_shift[24]=	3072;

[25]	[3200]:	y_shift[25]=	3200;

[26]	[3328]:	y_shift[26]=	3328;

[27]	[3456]:	y_shift[27]=	3456;

[28]	[3584]:	y_shift[28]=	3584;

[29]	[3712]:	y_shift[29]=	3712;

[30]	[3840]:	y_shift[30]=	3840;

[31]	[3968]:	y_shift[31]=	3968;

[32]	[4096]:	y_shift[32]=	4096;

[33]	[4224]:	y_shift[33]=	4224;

[34]	[4352]:	y_shift[34]=	4352;

[35]	[4480]:	y_shift[35]=	4480;

[36]	[4608]:	y_shift[36]=	4608;

[37]	[4736]:	y_shift[37]=	4736;

[38]	[4864]:	y_shift[38]=	4864;

[39]	[4992]:	y_shift[39]=	4992;

[40]	[5120]:	y_shift[40]=	5120;

[41]	[5248]:	y_shift[41]=	5248;

[42]	[5376]:	y_shift[42]=	5376;

[43]	[5504]:	y_shift[43]=	5504;

[44]	[5632]:	y_shift[44]=	5632;

[45]	[5760]:	y_shift[45]=	5760;

[46]	[5888]:	y_shift[46]=	5888;

[47]	[6016]:	y_shift[47]=	6016;

[48]	[6144]:	y_shift[48]=	6144;

[49]	[6272]:	y_shift[49]=	6272;

[50]	[6400]:	y_shift[50]=	6400;

[51]	[6528]:	y_shift[51]=	6528;

[52]	[6656]:	y_shift[52]=	6656;

[53]	[6784]:	y_shift[53]=	6784;

[54]	[6912]:	y_shift[54]=	6912;

[55]	[7040]:	y_shift[55]=	7040;

[56]	[7168]:	y_shift[56]=	7168;

[57]	[7296]:	y_shift[57]=	7296;

[58]	[7424]:	y_shift[58]=	7424;

[59]	[7552]:	y_shift[59]=	7552;

[60]	[7680]:	y_shift[60]=	7680;

[61]	[7808]:	y_shift[61]=	7808;

[62]	[7936]:	y_shift[62]=	7936;

[63]	[8064]:	y_shift[63]=	8064;

[64]	[8192]:	y_shift[64]=	8192;

[65]	[8320]:	y_shift[65]=	8320;

[66]	[8448]:	y_shift[66]=	8448;

[67]	[8576]:	y_shift[67]=	8576;

[68]	[8704]:	y_shift[68]=	8704;

[69]	[8832]:	y_shift[69]=	8832;

[70]	[8960]:	y_shift[70]=	8960;

[71]	[9088]:	y_shift[71]=	9088;

[72]	[9216]:	y_shift[72]=	9216;

[73]	[9344]:	y_shift[73]=	9344;

[74]	[9472]:	y_shift[74]=	9472;

[75]	[9600]:	y_shift[75]=	9600;

[76]	[9728]:	y_shift[76]=	9728;

[77]	[9856]:	y_shift[77]=	9856;

[78]	[9984]:	y_shift[78]=	9984;

[79]	[10112]:	y_shift[79]=	10112;

[80]	[10240]:	y_shift[80]=	10240;

[81]	[10368]:	y_shift[81]=	10368;

[82]	[10496]:	y_shift[82]=	10496;

[83]	[10624]:	y_shift[83]=	10624;

[84]	[10752]:	y_shift[84]=	10752;

[85]	[10880]:	y_shift[85]=	10880;

[86]	[11008]:	y_shift[86]=	11008;

[87]	[11136]:	y_shift[87]=	11136;

[88]	[11264]:	y_shift[88]=	11264;

[89]	[11392]:	y_shift[89]=	11392;

[90]	[11520]:	y_shift[90]=	11520;

[91]	[11648]:	y_shift[91]=	11648;

[92]	[11776]:	y_shift[92]=	11776;

[93]	[11904]:	y_shift[93]=	11904;

[94]	[12032]:	y_shift[94]=	12032;

[95]	[12160]:	y_shift[95]=	12160;

[96]	[12288]:	y_shift[96]=	12288;

[97]	[12416]:	y_shift[97]=	12416;

[98]	[12544]:	y_shift[98]=	12544;

[99]	[12672]:	y_shift[99]=	12672;

[100]	[12800]:	y_shift[100]=	12800;

[101]	[12928]:	y_shift[101]=	12928;

[102]	[13056]:	y_shift[102]=	13056;

[103]	[13184]:	y_shift[103]=	13184;

[104]	[13312]:	y_shift[104]=	13312;

[105]	[13440]:	y_shift[105]=	13440;

[106]	[13568]:	y_shift[106]=	13568;

[107]	[13696]:	y_shift[107]=	13696;

[108]	[13824]:	y_shift[108]=	13824;

[109]	[13952]:	y_shift[109]=	13952;

[110]	[14080]:	y_shift[110]=	14080;

[111]	[14208]:	y_shift[111]=	14208;

[112]	[14336]:	y_shift[112]=	14336;

[113]	[14464]:	y_shift[113]=	14464;

[114]	[14592]:	y_shift[114]=	14592;

[115]	[14720]:	y_shift[115]=	14720;

[116]	[14848]:	y_shift[116]=	14848;

[117]	[14976]:	y_shift[117]=	14976;

[118]	[15104]:	y_shift[118]=	15104;

[119]	[15232]:	y_shift[119]=	15232;

[120]	[15360]:	y_shift[120]=	15360;

[121]	[15488]:	y_shift[121]=	15488;

[122]	[15616]:	y_shift[122]=	15616;

[123]	[15744]:	y_shift[123]=	15744;

[124]	[15872]:	y_shift[124]=	15872;

[125]	[16000]:	y_shift[125]=	16000;

[126]	[16128]:	y_shift[126]=	16128;

[127]	[16256]:	y_shift[127]=	16256;

[128]	[16384]:	y_shift[128]=	16384;

[129]	[16512]:	y_shift[129]=	16512;

[130]	[16640]:	y_shift[130]=	16640;

[131]	[16768]:	y_shift[131]=	16768;

[132]	[16896]:	y_shift[132]=	16896;

[133]	[17024]:	y_shift[133]=	17024;

[134]	[17152]:	y_shift[134]=	17152;

[135]	[17280]:	y_shift[135]=	17280;

[136]	[17408]:	y_shift[136]=	17408;

[137]	[17536]:	y_shift[137]=	17536;

[138]	[17664]:	y_shift[138]=	17664;

[139]	[17792]:	y_shift[139]=	17792;

[140]	[17920]:	y_shift[140]=	17920;

[141]	[18048]:	y_shift[141]=	18048;

[142]	[18176]:	y_shift[142]=	18176;

[143]	[18304]:	y_shift[143]=	18304;

[144]	[18432]:	y_shift[144]=	18432;

[145]	[18560]:	y_shift[145]=	18560;

[146]	[18688]:	y_shift[146]=	18688;

[147]	[18816]:	y_shift[147]=	18816;

[148]	[18944]:	y_shift[148]=	18944;

[149]	[19072]:	y_shift[149]=	19072;

[150]	[19200]:	y_shift[150]=	19200;

[151]	[19328]:	y_shift[151]=	19328;

[152]	[19456]:	y_shift[152]=	19456;

[153]	[19584]:	y_shift[153]=	19584;

[154]	[19712]:	y_shift[154]=	19712;

[155]	[19840]:	y_shift[155]=	19840;

[156]	[19968]:	y_shift[156]=	19968;

[157]	[20096]:	y_shift[157]=	20096;

[158]	[20224]:	y_shift[158]=	20224;

[159]	[20352]:	y_shift[159]=	20352;






```