-1
我想知道是否有任何優化(比memcmp/memcpy更有效,也許只是使用for循環或將其分解爲快速彙編指令)可以對此子例程執行。 NUM_BYTES
是恆定值(=總是18):使用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();
}
該子程序順利設置LED顏色可能被稱爲每秒幾百次。隨着loop()
功能在運行時間內增加,每個LED需要更多時間才能獲得所需的值。
任何幫助將不勝感激。先謝謝你!
爲了優化這個,你必須看看這些數組中存儲了什麼,以及是否有更好的方法來存儲數據。然後你必須通過'render'函數。這意味着在沒有提供任何背景或細節的情況下很難回答這個問題。 – Lundin
對於您的情況,如果您始終將ledTarget複製到target_arr,如果代碼變得更快,我不會感到驚訝。這可能比第一次比較便宜。無論如何,你總是希望他們平等。 –
上面的代碼是否需要'target_arr'?爲什麼不在'for'循環中比較'rgb_arr'值和'ledTarget'? –