- Katılım
- 24 Şubat 2018
- Mesajlar
- 24,139
@taydin abi yeni konuda mı olsun buraya mı atayım?
Sen bilirsin. Ama ayrı konu olursa daha kolay bulunabilir.
@taydin abi yeni konuda mı olsun buraya mı atayım?
kısa bilgi : udemy de falan kuantum çekirdek programlama ile ders almak istersen (geleceğin teknolojisi) python da içinde geliyor paket olarakBence python bilgisayar tarafinda arayuz yaparken yada derleyici ile işgili otomasyonlar felan yazarken faydalı olabilir çünkü bilgisayarda kaynak bol ve bilgisayarı o işe adamıyoruz işimiz bitince kapatacağız o programı ama iş 50 centlik 1 dolarlık 2 dolarlık işlemcilere gelince donanımın suyunu sıkmak gerekiyor öyle ki hala c ile yazdıgı kodu sonra assemblyde düzenleyen veya bazı kritik fonksyonları assembly ile yazanlar var bol bol kullanırsak ne olur 1 dolar fazla verir üst işlemciye geçeriz sonra 10.000 tane sipariş gelir hem 10.000 doları çöpe atmış oluruz hem 10.000 dolar dovizi yurtdışına göndermiş oluruz hem de ihtiyacimizdan fazla elektronik atık üretmiş oluruz
Önce c yi ve mikrodenetleyici mimarilerini düzgün öğrenmek istıyorum sonrasında phyton bakabilirimkısa bilgi : udemy de falan kuantum çekirdek programlama ile ders almak istersen (geleceğin teknolojisi) python da içinde geliyor paket olarak
Nesneye yönelik programlamanın en bereketli olduğu konudur kullanıcı arayüzü yazılımları. Tabi bu mutlaka C++ kullanacaksın anlamına gelmiyor, C dilinde de nesneye yönelik programlama yapılabiliyor. Benim şu anda çalıştığım ve C de yazılmış firmware'de şöyle bir "class" yapısı var.
typedef struct M_item
{
char * itemHeader; // menu öğesi başlığı
char * prefix; // menü öğesi ön eki (% gibi)
char * itemText; // menü öğresi metni
char * suffix; // menü öğresi son eki (TL Volt vs.)
uint8_t screenType; // hangi ekran tasarımında gösterilecek
int8_t step; // öğe değerinin değişim adımı
int64_t valMin; // öğenin alabileceği en küçük değer (8byte)
int64_t valMax; // öğenin alabileceği en büyük değer
int64_t valOld; // öğenin mevcut değeri (yeni değer set edilmez ise eski değeri korumak için)
int64_t valNew; // öğenin mevcut değeri (yeni değer set edilmez ise eski değeri korumak için)
};
typedef class M_subMenu
{
public:
static int subMenuIndex;
M_item item;
int itemNum;
M_subMenu() // yapıcı fonksiyon. Nesne oluşturulduğunda otomatik çağırılır.
{
subMenuIndex++;
itemNum=subMenuIndex;
}
};
enum MENU_TYPES
{
MTYPE_NONE,
MTYPE_STR,
MTYPE_SEP,
MTYPE_SUB,
};
class MENU
{
public:
int id;
MENU_TYPES type;
MENU* sub_menu;
char name[100];
};
static MENU menu_file_export[] =
{
{1, MTYPE_STR, 0, "Export to file"},
{2, MTYPE_STR, 0, "Export to Dropbox"},
{0, MTYPE_NONE, 0, 0},
};
static MENU menu_file[] =
{
{3, MTYPE_STR, 0, "New"},
{4, MTYPE_STR, 0, "Open"},
{5, MTYPE_SEP, 0, 0}, // ayirici yatay çizgi
{6, MTYPE_STR, 0, "Print"},
{0, MTYPE_SUB, menu_file_export, "Export"},
{7, MTYPE_STR, 0, "Exit"},
{0, MTYPE_NONE, 0, 0},
};
static MENU menu_edit[] =
{
{8, MTYPE_STR, 0, "Undo"},
{9, MTYPE_STR, 0, "Redo"},
{10, MTYPE_SEP, 0, 0}, // ayirici yatay çizgi
{11, MTYPE_STR, 0, "Cut"},
{12, MTYPE_STR, 0, "Copy"},
{13, MTYPE_STR, 0, "Paste"},
{0, MTYPE_NONE, 0, 0},
};
static MENU menu_bar[] =
{
{0, MTYPE_SUB, menu_file, "File"},
{0, MTYPE_SUB, menu_edit, "Edit"},
{0, MTYPE_NONE, 0, 0},
};
int main()
{
}
struct ItemText
{
char *itemHeader; // menu öğesi başlığı
char *valText1; // "Açık" "kapalı" gibi metinbazlı ayarlar için
char *valText2; // "Açık" "kapalı" gibi metinbazlı ayarlar için
};
ItemText ayarlar[]=
{
{"1 Nolu menu", "Ayar1", "Ayar2" },
{"1 Nolu menu", "Ayar1", "Ayar2" },
{"1 Nolu menu", "Ayar1", "Ayar2" }
};
struct Item
{
byte itemNumber;
ItemText *text;
uint8_t screenType; // hangi ekran tasarımında gösterilecek
int8_t step; // öğe değerinin değişim adımı
int64_t valMin; // öğenin alabileceği en küçük değer (8byte)
int64_t valMax; // öğenin alabileceği en büyük değer
int64_t valOld; // öğenin mevcut değeri (yeni değer set edilmez ise eski değeri korumak için)
int64_t valNew; // öğenin mevcut değeri (yeni değer set edilmez ise eski değeri korumak için)
};
struct ItemText
{
const char *itemHeader; // menu öğesi başlığı
const char *valText1; // "Açık" "kapalı" gibi metinbazlı ayarlar için
const char *valText2; // "Açık" "kapalı" gibi metinbazlı ayarlar için
};
const ItemText ayarlar[]=
{
{"1 Nolu menu", "Ayar1", "Ayar2" },
{"1 Nolu menu", "Ayar1", "Ayar2" },
{"1 Nolu menu", "Ayar1", "Ayar2" }
};
// bütün tip bilgileri solda, değişken sağda, herşey net
const char* sade_tost;
// tip bilgileri hem solda, hem sağda, fazla karışık
const char *karisik_tost;
Böyle düşününce mantıklı ama ben "ampersand" nerede yıldız orada mantığını benimsedim galiba...C/C++ a yeni başladığın için sana şöyle bir stil önerisinde bulunayım: Pointer tanımlarken, yıldızı değişkene değil de tiplere dayamak bana daha mantıklı geliyor, çünkü o yıldız esasında tip tanımının bir parçası, değişkenin değil. Ama piyasada iki form da kullanılıyor, sana hangisi mantıklı geliyorsa o şekilde devam et.
Kod:// bütün tip bilgileri solda, değişken sağda, herşey net const char* sade_tost; // tip bilgileri hem solda, hem sağda, fazla karışık const char *karisik_tost;
bool OutputFunctionSelect(byte &OUT_FUNCTION)
// Menu 2
Item Kumanda_Ayarlari[] =
{ // No. Title Text ekran artış min maks old new
{ 1, "Kumanda Ekle", textVal, 1, 1, 0, 1, 0, 0 },
{ 2, "Kumanda Sil", textVal, 1, 1, 0, 1, 0, 0 },
{ 3, "Hepsini Sil", textVal, 4, 1, -1, 240, 0, 0 },
};
Yine bir noktada takıldım...
C++:// Menu 2 Item Kumanda_Ayarlari[] = { // No. Title Text ekran artış min maks old new { 1, "Kumanda Ekle", textVal, 1, 1, 0, 1, 0, 0 }, { 2, "Kumanda Sil", textVal, 1, 1, 0, 1, 0, 0 }, { 3, "Hepsini Sil", textVal, 4, 1, -1, 240, 0, 0 }, };
Kumanda_Ayarlari[] dizisinde 3 eleman var ama bunu nasıl tespit etmeliyim. Normal dizilerde kullandığım sizeof(dizi)/sizeof(dizi[0]); şeklindeki tespit işe yaramıyor.