我有一个专有的 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 还没有优化?