說我有控制一些聖誕彩燈(這是不實際的應用中,只有一個例子)的程序。這些燈具有一些不同的計算來確定燈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這裏的場景只是一個例子,實際的功能較長,但它們之間的複雜性相似。 –