reklam1

reklam1

22 Ağustos 2011 Pazartesi

PIC işlemcide C ile fonksiyona pointer atama...

Bugün PIC işlemciyi pert olmadan CCS ile koşturalım ve Fonksiyona pointer ataması yapalım.
Bu şekilde fonksiyonu dinamik olarak tanımlayarak program koştururken içeriğini değiştirelim.

önce func.c dosyası oluşturalım ve aşağıdaki kodu yazalım.

#if !defined(_PCD_)
typedef signed int8 (*_MyFunction) (int val);
#else
typedef signed int16 (*_MyFunction) (int val);
#endif

_Myfunction MyFunction;

signed int PIDproc1(int val) {
printf("\r\nPROC1");
return val+1;
}

signed int PIDproc2(int val) {
printf("\r\nPROC2");
return val+2;
}

void Exec(float value) {
int par1;
par1= value;
if(value > 50) MyFunction=PIDProc2;
else MyFunction=PIDProc1;
//DoIt(par1,MyFunction);
printf("\r\nRET:%u", (*MyFunction)(par1));
}

şimdi de main.c yi yazalım.
#include "func.c"
...
void main() {
...
While (TRUE) {
set_adc_channel(0);
delay_us(20);
value = read_ADC();
fvalue = 0.0977*value;
printf("\r\nVAL: %f",fvalue);
Exec(fvalue);
delay_ms(150);
}

}

Main.c de adc kanalından değer okunuyor. Okunan değer Exec fonksiyonuna gönderiliyor. Exec içinde MyFunc adında foknsiyona pointer tanımı var. Değer kontrol ediliyor. Değer 50 den büyükse pointer PIDProc2'e, değilse PIDProc'e eşitleniyor...

Hiç yorum yok :

Yorum Gönder

reklam4

reklam4