我正在考虑以下问题:我想用一个使用某种查找表的程序对一个微控制器(比如说一个 AVR 巨型类型)进行编程。
第一次尝试是在一个单独的文件中找到该表并使用任何其他脚本语言/程序/....创建它。在这种情况下,为 C 创建必要的源文件需要付出相当大的努力。
我现在的想法是使用预处理器和编译器来处理事情。我尝试使用正弦值表来实现这一点(仅作为示例):
#include <avr/io.h>
#include <math.h>
#define S1(i,n) ((uint8_t) sin(M_PI*(i)/n*255))
#define S4(i,n) S1(i,n), S1(i+1,n), S1(i+2,n), S1(i+3,n)
uint8_t lut[] = {S4(0,4)};
void main()
{
uint8_t val, i;
for(i=0; i<4; i++)
{
val = lut[i];
}
}
sin
如果我编译此代码,我会收到有关该函数的警告。在大会的进一步部分中没有任何内容.data
。如果我只是删除sin
第三行中的,我会在程序集中获得数据。显然,所有信息在编译时都可用。
你能告诉我是否有办法实现我的意图:编译器计算尽可能多的离线值?还是使用外部脚本/程序/...来计算表条目并将它们添加到一个单独的文件中的最佳方法是#include
d?