SORU
10 Kasım 2014, PAZARTESİ


Alışılmadık kullanım .h C dosyasında

Filtreleme ile ilgili makale okuma sırasında, .h dosya biraz garip kullanılarak katsayılar dizi doldurmak için kullanmak buldum:

#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" }; Bu şekilde kullanmak için normal bir uygulama mı?

CEVAP
10 Kasım 2014, PAZARTESİ


#include gibi Preprocessor talimatlar sadece bazı yapıyorlarmetinikame (GCC içinde 23* *GNU belgelerine bakın). Herhangi bir yerde (yorum dizelerini dışında) ortaya çıkabilir.

Ancak, bir #include satır # ilk boş olmayan karakterinden olmalıdır. Kod

float h[N] = {
  #include "f1.h"
};

Asıl soruya kendi satırında #include yoktu, bu yüzden yanlış bir kod vardı.

Değilnormalpratik, ama öyleizinuygulama. Bu durumda, 10* örneğin *#include "f1.def" den başka bir uzantı kullanarak veya 12* * ... öneririm

Senin derleyici önişlenmiş şeklinde göstermek istiyoruz. GCC gcc -C -E -Wall yoursource.c > yoursource.i derleme ve bir editör veya bir çağrı ile bak yoursource.i oluşturulan

Ben aslında kendi kaynak dosyada bu verilerin bir tercih. Çok isterdim bunun yerine önermek oluşturmak için kendi kendine yeten h-data.c dosyası kullanarak örneğin bazı aracı gibi GNU awk (yani dosya h-data.c başlamak const float h[345] = { son };...) Ve eğer sürekli bir veri ise, daha iyi const float h[] salt okunur Linux .rodata gibi segmentinde kalabilir) bildirin. Eğer gömülü veri büyük ise, derleyici (boşuna) optimize etmek için zaman (**21 hızlı bir şekilde en iyi duruma getirme olmadan derlemek olabilir) alabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BgirlNilaya

    BgirlNilaya

    29 EKİM 2008
  • MrOctopi

    MrOctopi

    6 Aralık 2010
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006