state-event-transition nedir?

Başlatan mir_as82, 23 Eylül 2013, 16:39:34

OptimusPrime

#15
hayır belli etmek açısından değil. bir değişkeni veya fonksiyonu adlandırmaların da çeşitli kuralları var ama verdiğim örnekteki amaç yazım kolaylığı sağlamak.

bahsettiğim gibi menü yazılarını basmadan önce hangi dilde olduğunu kontrol ediyorsun ona göre ilgili fonksiyonu çağırıyorsun. 100 tane alt menü varsa 100 kez
kontrol et
ilgili fonksiyonu çağır
demen lazım

bunu function pointer a atarsan her seferinde kontrol etmeden 100 kez
function pointer çağır
demen kafi.

kabaca bakarsak bu sana daha neler kazandırdı.
- function pointer daha önce hangi fonksiyonu çalıştıracağını söylediğin için kontrol kısmından kurtuldun sonuç olarak yazdığın kod hızlandı
- kontrol kısmını 100 kez yazmadığın için 100xkontrol kısmının flash da kapladığı yer kadar flash dan kar ettin

gibi...
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Klein

Konu menü üzerinden yürüdüğü için menü ve fonksiyon işaretçisi  ile ilgili başka bir örnek vereyim.
Ama önce aşağıdaki gibi bir menüyü nasıl yapardın. Sen onu yaz , ben de sana bu iş fonksiyon işarretçisi ile nasıl yapılır onu anlatayım.

bir menümüz var. 5 başlıktan oluşuyor. Yukarı - aşağı tuşuna her basışta ekranda bu başlıklardan biri görünecek.
char *header1 = "Menu 1";
char *header2 = "Menu 2";
char *header3 = "Menu 3";
char *header4 = "Menu 4";
char *header5 = "Menu 5";


Bu başlıklardan birisini seçip enter tuşuna bastığımızda ise, başlığa göre farklı bir fonksiyon çalışacak.
fonksiyonlarımız da şöyle olsun.
motoru_çalıştır();
eeproma_yaz();
eepromdan_oku();
beep_ses_ver();
motoru_durdur();


menümüzün ana gövdesi de şöyle olsun
void menu(void)
{
     switch(button)
     {
        case up:
                 menu_index++;
                break;
        case down:
                 menu_index--;
                break;
        case enter:
               //burada menu_index değerine göre bir fonksiyon işleteceğiz
              break;
     }
     // menü başlığını ekrana bas;
}