在阅读有关过滤的文章时,我发现.h
文件的一些奇怪用法-用它来填充系数数组:
#define N 100 // filter order
float h[N] = { #include "f1.h" }; //insert coefficients of filter
float x[N];
float y[N];
short my_FIR(short sample_data)
{
float result = 0;
for ( int i = N - 2 ; i >= 0 ; i-- )
{
x[i + 1] = x[i];
y[i + 1] = y[i];
}
x[0] = (float)sample_data;
for (int k = 0; k < N; k++)
{
result = result + x[k]*h[k];
}
y[0] = result;
return ((short)result);
}
那么,使用float h[N] = { #include "f1.h" };
这种方式是正常的做法吗?
预处理指令喜欢#include
只是在做一些文字替换(见GNU的文档CPP内GCC)。它可以发生在任何地方(注释和字符串文字之外)。
但是,a #include
应该#
作为其行的第一个非空白字符。所以你要编码
float h[N] = {
#include "f1.h"
};
原始问题没有#include
单独的代码,因此代码有误。
这不是正常的做法,但是是允许的做法。在这种情况下,我建议使用其他扩展名,.h
例如use #include "f1.def"
或#include "f1.data"
...
要求编译器向您显示预处理的表单。使用GCC进行编译,gcc -C -E -Wall yoursource.c > yoursource.i
并使用编辑器或寻呼机查看生成的内容yoursource.i
实际上,我更喜欢在自己的源文件中包含此类数据。因此,我建议h-data.c
使用诸如GNU awk之类的工具生成一个自包含文件(这样文件h-data.c
将以...开头const float h[345] = {
和结尾};
)。如果它是一个常量数据,则最好对其进行声明const float h[]
(这样它就可以放在read中) -段,例如.rodata
在Linux上)。另外,如果嵌入的数据很大,则编译器可能会花一些时间(无用地)对其进行优化(然后您可以在h-data.c
不进行优化的情况下快速编译)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句