说我有控制一些圣诞彩灯(这是不实际的应用中,只有一个例子)的程序。这些灯具有一些不同的计算来确定灯i
是否会在给定的框架中亮起,t
。每个i
和t
是uint8_t
,所以它可以假设有256个灯和t
将循环每256帧。一些光图案可能是以下几点:广场功能的指令
int flash(uint8_t t, uint8_t i) {
return t&1;}
int alternate(uint8_t t, uint8_t i) {
return i&1 == t&1;}
int loop(uint8_t t, uint8_t i) {
return i == t;}
如果我当时就想实现模式改变制度,通过这些模式的循环,我可以用一个函数指针数组int (*modes)(uint8_t, uint8_t)[3]
。但是,由于这些都是如此简短的函数,我是否有办法强迫编译器将函数直接放在另一个函数的程序存储器中,有点像内联数组?
这个想法是,访问这些函数中的一个不需要评估指针,而是可以告诉处理器正确的功能是modes + pitch*mode
,其中pitch是函数之间的间距(至少是最长)。
我要求更多的是出于好奇心比的要求,因为我怀疑这实际上会造成多大的速度提升。
使用SELECT语句。它通常编译为你想要的。 – fuz
为什么你需要函数来实现像'&'和'=='这样的基本运算符? 'flash'甚至不使用参数'i'。 –
@WeatherVane这里的场景只是一个例子,实际的功能较长,但它们之间的复杂性相似。 –