Újabb élmények. Megnéztem, mit fordít az xc8, de buta, pedig -O2. A static inline függvényt az inline ellenére nem mindannyiszor helyettesíti, hanem CALL-lal hívja, minekutána valóban a stack-en keresztül megvalósította a függvénypointeres hívást. Az egész felhajtás 212 byte-tal lett hosszabb - ha jól emlékszem -, mint a statikus megoldásnál, amikor is makróval a preprocessor helyettesít a fordítás előtt.
Szóval visszatértem a makrós megoldáshoz. Nem a 212 byte fáj igazán, hanem az interrupt rutin hatalmas overhead-je.