Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: M_B - 14 Eylül 2016, 12:41:36

Başlık: Structure icinde fonksiyon Tanımı
Gönderen: M_B - 14 Eylül 2016, 12:41:36



typedef struct MenuStructure
{
unsigned char *text;
unsigned char num_menupoints;
unsigned char up;
unsigned char down;
unsigned char enter;
void(*fp) (void);
} MenuEntry;

unsigned char menu_000[]= "[MAIN MENU]";   //0
unsigned char menu_001[]= "Option 1";      //1
unsigned char menu_002[]= "Option 2";      //2
unsigned char menu_003[]= "Option 3";      //3
unsigned char menu_004[]= "START";         //4
unsigned char menu_100[]= "[SUB MENU]";    //5
unsigned char menu_101[]= "SubOption 1";   //6
unsigned char menu_102[]= "return";        //7


//MenuEntry
MenuEntry Manu[]={
              {menu_000,5,0,0,0,0},
              {menu_001,5,1,2,5,0},
              {menu_002,5,1,3,2,0},
              {menu_003,5,2,4,3,0},
              {menu_004,5,3,4,4,0},
              {menu_100,3,0,0,0,0},
              {menu_101,3,6,7,6,0},
              {menu_102,3,6,7,7,0}
          };


Nette menu yapımıyla ilgili buldugum bir ornek .
burda anlayamadığım. yapi icerisinde tanımlı olan void(*fp) (void);
bu fonksiyon kullanımı nasıl oluyor.
Veya kısaca yapı icerisinde boyle bir fonksiyon tanımlamakla ne elde ediyoruz veya nasıl kullanıyoruz.
Bunu bir ornekle acıklayabilirmiyiz.
Başlık: Ynt: Structure icinde fonksiyon Tanımı
Gönderen: quarko - 14 Eylül 2016, 13:08:33
fp aslında bir function pointer oluyor. fp ye "void xxx (void)" prototipinde bir fonksiyonun adresini verdiğinizde ve "fp()" diye çağırdığınızda ilgili fonksiyon çağrılır. Ben menülerimde ihtiyaç olursa fonksiyon işaretçisi türünden dizi tanımlayıp ilgili fonksiyonu indeksleyip çağırıyorum. Gayet kullanışlı ve kolay oluyor.
Başlık: Ynt: Structure icinde fonksiyon Tanımı
Gönderen: M_B - 14 Eylül 2016, 17:07:08
@gerbay Hocam acıklama icin teşekkürler.
GLCD ekran icin menu üzerine calısıyorum. Doğru yoldamıyım  ?
Menu olusturmak için daha başka ne tur yontemler vardır. Veya onerebileçeğiniz bir modul/sistem varmıdır.


Not:
GLCD KS0108 128x64
Başlık: Ynt: Structure icinde fonksiyon Tanımı
Gönderen: berkay_91 - 14 Eylül 2016, 20:13:06

#define F_CPU 1000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "ks0108.h"
#include "times_new_romen_10_B.h"
#include "arial_10.h"

void menu_isimleri_init();

volatile int satir=11,j=0;

struct menuler{

char *menu_isimi;

} menu[5];

void menu_isimleri_init(){

menu[0].menu_isimi="Sony";
menu[1].menu_isimi="Samsung";
menu[2].menu_isimi="Panasonic";
menu[3].menu_isimi="Nokia";
menu[4].menu_isimi="LG";

}


int main(void) {

int y=12;

_delay_ms(10);

ks0108Init(0);

menu_isimleri_init();

ks0108SelectFont(times_new_romen_10_B, ks0108ReadFontData, BLACK); // Select a font

ks0108GotoXY(38,0);
ks0108Puts("AYARLAR");

ks0108SelectFont(arial_10, ks0108ReadFontData, BLACK); // Select a font

for(int i=0; i<5; i++){

ks0108GotoXY(1,y);
ks0108Puts(menu[i].menu_isimi); 

y+=10;

}


while(1);

return 0;

}



programı Atmel için yazdım, istediğin stringi basmak için sadece menu.menu_isimi deki i değişkeniyle oynaman yeterli olacak
Başlık: Ynt: Structure icinde fonksiyon Tanımı
Gönderen: M_B - 14 Eylül 2016, 21:19:30
@berkay_91 hocam tesekkur ederim.