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