我有一些嵌入式 C 代码,我想要一个正弦值列表。我在 C++ 中使用 constexpr 函数做了类似的事情,该函数在主循环之外返回 std::array :
#include <array>
#include <cmath>
#define sineListSize 100
#define sineListAmp 100
constexpr auto makeSineList() {
std::array<int, sineListSize> list = {};
for (int i=0; i<sineListSize; i++) {
list[i] = sineListAmp * sin(i * 2 * M_PI / sineListSize);
}
return list;
}
auto sineList = makeSineList();
我现在所做的只是将列表放在单独的头文件中,因为它有 8192 个元素,并且达到有符号的 32 位整数限制。很难修改(我必须生成值并在我想更改生成参数时手动复制它们)并且我必须将所有参数保留在注释中。我该如何在 C 中做这样的事情?
经典方法是编写一个程序来计算值并将它们以 C 数组初始化的格式写入输出。作为项目构建过程的一部分,它在构建主机上编译并运行该程序,将其输出定向到头文件。该头文件包含在您的其他源中。