このサブルーチンで実行できる最適化があるかどうか(memcmp/memcpyよりも効率的かもしれません。 NUM_BYTES
が一定値である(常に18 =):円滑にLEDの色を設定memcmp、memcpyで最適化サブルーチン
void ledSmoothWrite(uint8_t ledTarget[])
{
// If the new target is different, set new target
if(memcmp(target_arr, ledTarget, NUM_BYTES)) memcpy(target_arr, ledTarget, NUM_BYTES);
// Obtain equality
for(uint8_t i = 0; i < NUM_BYTES; i++)
{
if(rgb_arr[i] < target_arr[i]) rgb_arr[i]++;
else if(rgb_arr[i] > target_arr[i]) rgb_arr[i]--;
}
render();
}
このサブルーチンは、毎秒数百回呼び出されるかもしれません。 loop()
の機能が実行時間に増加するので、各LEDが望ましい値になるまでにはるかに多くの時間がかかります。
ご協力いただければ幸いです。前もって感謝します!
これを最適化するには、それらの配列に格納されているものを調べ、データを格納するためのより良い方法があるかどうかを調べる必要があります。それで 'render'関数を実行する必要があります。文脈や細部がなくてもこの質問に答えることは難しいということです。 – Lundin
あなたが常にledTargetをtarget_arrにコピーすると、あなたのコードがより速くなるなら、私は驚くことはありません。それはおそらく最初に比較するよりも安価でしょう。あなたはいつもそれらをとにかく平等にしたい。 –
上記のコードに 'target_arr'がまったく必要ですか?あなたの 'for'ループで' rgb_arr'値を 'ledTarget'と比較するだけではどうですか? –