私は定期的なタスクを実行する独自のMCUを持っており、その「ダウンタイム」を他のことで埋めたいと思っています。通常、これは大きなswitchステートメントを使用して実行されますが、これは問題ありませんが、もっとエレガントな方法があるかどうか疑問に思っています。これは、この特定のデバイスのコードで非常に一般的なパターンであるため、一般的なメソッドがあると便利です。
だから私は次のコードを書きました、そしてそれは動作します、しかしそれは現在関数をインライン化しません。
static InterlacedFunction searchFunctions[4] = {...};
typedef int (* const InterlacedFunction)(int);
template<const int numberOfWovenFunctions> int SendPacketWithWovenFunctions(
int * packet,
const int packetLength,
InterlacedFunction (&functions)[numberOfWovenFunctions],
int firstArgument = 0)
{
int returnFromLastWoven = (numberOfWovenFunctions != 0) ? (functions[0])(firstArgument) : 0;
SendData(packet[0]);
for(int i = 1; i < packetLength; i++)
{
if(i < numberOfWovenFunctions)
returnFromLastWoven = (functions[i])(returnFromLastWoven);
SendData(packet[i]);
}
return returnFromLastWoven;
}
私は何かが足りないのですか、Clangがこれらの関数をインライン化することは不可能ですか、それともClangにはまだ最適化がありませんか?