Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

CFront source

Başlatan hasankara, 09 Ekim 2014, 01:04:59

hasankara

http://cfront.cvs.sourceforge.net/viewvc/cfront/

yanlış anlamadı isem bu linkte cfront un yani c++ ın ilk zamanlarının, kaynak kodlarını barındıran bir proje nin dosyaları bulunuyor. bazı dosyalarından anladığım kadarı ile linux üzerinde çalışılınan bir proje. kaynak kodlarını visual studio da c++ projesi oluşturarak derlemeye çalıştığımda başarılı olamadım. <> şeklindeki include tanımlamalarının bazılarını hatta çoğunu bulamıyor. bu projeyi windows ortamında çalışabileceğimiz bir proje haline getirmek için neler yapabiliriz. hatta hazır linux kurulu olanlarımızdan bazıları projeyi direk derlemeyi denese burada paylaşsa nasıl olur?

Tagli

Verdiğin yerdeki kodu derleyemedim. Gereksinim duyduğu iki kütüphanenin sistemde yüklü olması gerekiyor sanırım. Bunlara da ulaşamadım. Zaten derleyebilseydim bile, benim GNU/Linux'ta derlediğim dosya senin Windows bilgisayarda çalışmazdı.

Bunu ne amaçla kullanmayı planlıyorsun? Bu programın muadilleri de olabilir.
Gökçe Tağlıoğlu

hasankara

tıpkı cfront gibi kendi ara derleyicimi yapmaya karar vermiştim. aslında makrolarla kısmen istediğimi yapabiliyorum ama yetersiz geldiğini düşünmeye başladım. bu yüzden bu dosyaları değerlendirebilmek benim için önemli.

peki bu kütüphaneleri nerede bulabiliriz?

mufitsozen

Alıntı yapılan: hasankara - 10 Ekim 2014, 19:54:13
tıpkı cfront gibi kendi ara derleyicimi yapmaya karar vermiştim. aslında makrolarla kısmen istediğimi yapabiliyorum ama yetersiz geldiğini düşünmeye başladım. bu yüzden bu dosyaları değerlendirebilmek benim için önemli.

peki bu kütüphaneleri nerede bulabiliriz?

nicin?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

hasankara

hocam c de uzun uzun yazıp elde ettiğim çalışmalarda bazı şeyleri sürekli yaptığımı fark ettim. aynı zamanda kendi standart yazım şeklimi elde ettiğimi düşünüyorum. makrolar la standart yazımdan epey uzaklaştığım ve bir yerden sonra makroların yetersiz olması sebebi ile bu standart yapıyı arka planda otomatik yapılabileceğini düşündüm. hem c++ bile olsa kendi ekstra yazım standartlarımızı ekleyebiliyor olmamız fena olmaz mıydı? makrolara çoğunlukla böyle durumlarda ihtiyaç duymuyor muyuz zaten?

bulduğum cfront kaynak dosyalar benim için önemli dedim çünkü tamda benim yapmak istediğim işi yapan bir proje sadece kuralları ben tekrar düzenleyerek amacıma ulaşmış bile olabilirim.

mufitsozen

Alıntı yapılan: hasankara - 10 Ekim 2014, 20:21:09
hocam c de uzun uzun yazıp elde ettiğim çalışmalarda bazı şeyleri sürekli yaptığımı fark ettim. aynı zamanda kendi standart yazım şeklimi elde ettiğimi düşünüyorum. makrolar la standart yazımdan epey uzaklaştığım ve bir yerden sonra makroların yetersiz olması sebebi ile bu standart yapıyı arka planda otomatik yapılabileceğini düşündüm. hem c++ bile olsa kendi ekstra yazım standartlarımızı ekleyebiliyor olmamız fena olmaz mıydı? makrolara çoğunlukla böyle durumlarda ihtiyaç duymuyor muyuz zaten?

bulduğum cfront kaynak dosyalar benim için önemli dedim çünkü tamda benim yapmak istediğim işi yapan bir proje sadece kuralları ben tekrar düzenleyerek amacıma ulaşmış bile olabilirim.

affiniza siginarak "surekli yaptigimi farkettim" dediginiz seylerle ilgili 3-4 ornek verebilirmisinz? cfront yerine daha guncel birtakim cozumler onerilebilir yada yapmak istedigniz sey icin boyle bir frontend dogru bir yontem olmayabilir.

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

hasankara

estağfurullah hocam ne haddime. kabaca bahsedecek olursam, tüm fonksiyonların ihtiyaç duyduğu static değişkenler sadece main içerisinde tanımlanacak. ihtiyaç duyulan değişkenlerin adresleri alt fonksiyonlara giriş parametresi olarak girecek. tek bir fonksiyon aynı zaman aralığında birbirinden alakasız amaçlar için kullanılabilecek. bahsi geçen static değişkenler fonksiyonlar yazılırken tanımlanacak ama ara derleyici sayesinde hiyerarşik yapı typedef ler kullanılarak sağlanacak.

Tagli

Alıntı yapılan: hasankara - 10 Ekim 2014, 20:37:20
tek bir fonksiyon aynı zaman aralığında birbirinden alakasız amaçlar için kullanılabilecek.
Birbirinden alakasız amaçlar varsa, birbirinden alakasız fonksiyonlar kullanmalısın. Öbür türlüsü mantık hatasıdır bence.

Yoksa C++'taki "template function" tarzı bir şey mi elde etmek istiyorsun? Onda olay farklı ama. Aynı işlem farklı veri türleri üzerinde yapılıyor.

Ulaşmak istediğin şeyi biraz daha açarsan ve daha da iyisi bir kullanım örneği verebilirsen belki yol gösterebiliriz.

Benzer bir ihtiyacı ben de hissetmiştim. PIC - PC arası seri port iletişimini bir standarta oturtmaya çalışıyorum ve kodun mesaj paketindeki farklı kodlara göre farklı yerlere dallanması, farklı boyutta verilere erişmesi vs. gerekiyordu. Bir süre sonra aynı şeyleri tekrar tekrar yaptığımı farkettim. Kendimce basit bir betik dili oluşturdum, bunu flex ve bison kullanarak işledim ve eskiden elle yazdığım C ve C++ kodlarının otomatik olarak üretilmesini sağladım.

Ancak yukarıda anlattığım gibi bir işi hazır bir program ile yapamazsın. flex ve bison ikilisini öğrenip bunları kullanarak C veya C++ ile esaslı bir program yazman gerekir.
Gökçe Tağlıoğlu

mufitsozen

#8
Alıntı yapılan: hasankara - 10 Ekim 2014, 20:37:20
estağfurullah hocam ne haddime. kabaca bahsedecek olursam, tüm fonksiyonların ihtiyaç duyduğu static değişkenler sadece main içerisinde tanımlanacak. ihtiyaç duyulan değişkenlerin adresleri alt fonksiyonlara giriş parametresi olarak girecek. tek bir fonksiyon aynı zaman aralığında birbirinden alakasız amaçlar için kullanılabilecek. bahsi geçen static değişkenler fonksiyonlar yazılırken tanımlanacak ama ara derleyici sayesinde hiyerarşik yapı typedef ler kullanılarak sağlanacak.

yazdiginiz seyler aslinda birden fazla design prensibi ile catisiyor ve dikkatsiz olunursa hatali islemlere sebep olabilir(statik degisken kullanimi, mainde degisken tanimlari vb gibi islevler yapmak, tek bir fonksiyonla degisik zamanlarda degisik isler yapmak(bunu tam olarak anlamadigim icin detaylari farzetmek zorunda kaldim))

konumuz sizin yontemleriniz tartismak yada elestirmek olmadigi icin bu konuda baska birsey yazmayacagim.(gereksiz tartismalar yaratmayalim:-) )

Benim sizin bu kisa aciklamanizdan anladigim siz C++daki templateler (yada generic programming) benzer fonksiyonlari kullanmak istiyorsunuz. Fakat bunu basit macrolar yada typedeflerle yapmaniz mumkun olmaz cunki type
enformasyonunu kod uretirken bilmeniz lazim. Yani bir frontend preprocessor ile boyle seyler yapmak mumkun değil.

Bence yok yere enerjinizi bir cikmaz sokak icin harcamayiniz. C++ derleyicisini kuvvetli bir C derleyicisi olarak kullanmak mumkun (classlar ve inheritance vs kullanmadan) bence bu yolu deneyin.

Aslinda pratik bilgisi benden cok daha kuvvetli olan sayin @gerbayda bu konuda fikrini soylese benim bu onerimin ne kadar dogru/sacma oldugu daha kolayca belirlenir.

Ama  ben boyle bir seyi yinede denemek istiyorum derseniz benim onerim clang yada ANTLR kullanarak kendi sisteminizi onlarla beraber kullanmak.

buda benim 2c dusuncem, begenmezseniz cope atilabilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

hasankara

bu fonksiyonun içerisinde herhangi bir değişken tanımlaması bulunmuyor.  kullandığı tüm değişkenlerinin struct adresini bir üst fonksiyondan alıyor.

unsigned char ButonIzle(ButonZengin *tip, unsigned short talt, unsigned short tust) {
    switch (tip->mlt) {
        case 0:
            tip->mlt = 10;
            bitset(*tip->tris, tip->pin); // pin giris yapildi

        case 10:
            if (bittest(*tip->port, tip->pin) != tip->kenar) { // buton bosta ise
                tip->mlt = 20;
                tip->rtn = 5; // mesgul
            } else if (tust > 0) { // zaman ust sinir 0 degil ise
                if (ZamanIzle(&tip->gecikme, tust) == 0) {// zaman asimi olur ise
                    tip->rtn = 3; // belirlenen zaman araligi yinelemeli asildi
                } else tip->rtn = 5; // mesgul
            } else tip->rtn = 5; // mesgul
            break;

        case 20:
            if (bittest(*tip->port, tip->pin) == tip->kenar) { // butona basilir ise
                tip->mlt = 30;
                tip->gecikme.timerykl = timer_ms;
            }
            tip->rtn = 5; // mesgul
            break;

        case 30:
            if (bittest(*tip->port, tip->pin) != tip->kenar) { // buton birakilir ise
                if (ZamanIzle(&tip->gecikme, talt) == 0) { // basili tutma süresi alt sinir dan buyuk ise
                    tip->mlt = 0;
                    tip->rtn = 0; // butondan komut alindi
                } else { // basili tutma debounceden buyuk degil ise
                    tip->mlt = 0;
                    tip->rtn = 1; // butondan gelen komut kalitesiz
                }
            } else if (tust > 0) { // zaman ust sinir 0 degil ise
                if (ZamanIzle(&tip->gecikme, tust) == 0) {// zaman asimi olur ise
                    tip->rtn = 2; // belirlenen zaman araligi yinelemeli asildi
                    tip->mlt = 0;
                } else tip->rtn = 5; // mesgul
            } else tip->rtn = 5;
            break;
    }
    return tip->rtn;
}



header içerisinde fonksiyonun değişkenleri bulunuyor;
typedef struct {
    unsigned char kenar;
    unsigned char mlt,rtn;
    volatile unsigned int *tris;
    volatile unsigned int *port;
    unsigned char pin;
    Zaman_ms gecikme;
} ButonZengin;

typedefi bulunuyor.

main de ise önce bir tanımlama ve ardından fonksiyonun kendisi kullanılıyor;
static ButonZengin btn = {.tris = &TRISG, .port = &PORTG, .pin = 6, .kenar = 1}; // tanimlama ve atamalar

        if (ButonIzle(&btn, 5, 250) == 0){
            PORTDbits.RD0 = ~PORTDbits.RD0;
        }


typedef içerisindeki tüm değişkenleri yazım şekli olarak fonksiyon içerisinde tanımlasam bile ara derleyici bunları kendisi otomatik bir typedef içerisinde toparlasın istiyorum.

bunların yanı sıra fonksiyonun parçalanıp state machine yapısını da otomatikleştirme gibi düşüncelerim de var.

mufitsozen

#10
tam olarakne yaptiginiz anlamadim, aslina bakarsaniz anlamaya calismak gibi bir istek ve zamanimda maalesef yok.

Fakat bu sekilde yazilan programlar multithreaded ve/veya embedded ortamlarda problem cikartabilir ve tasariminizin dagitik olmasindan dolayi bu hatalari bulmakda zor ve zaman alici olur.

Siz kendi sisteminize asina oldugunuz icin belki size dogal geliyordur ama 3-5 (yada daha fazla) kisili bir gruba bu yontemi ogretmek ve dogru kullanimini saglamak yerine daha sistematik bir cozum secilmeli bence.

onceki gibi buda benim 2krsluk dusuncem begenmezseniz cope atin. :)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

hasankara

evet bir hayli karmaşık görünüyor ve elbette ki çözümlemenizi beklemem doğru olmaz. siz örnek istediğiniz için yazdım. fonksiyonel olarak uzun zamandır bu yapı üzerinde çalışıyor olmama rağmen, derleyicilerin nadiren de olsa bazı optimizasyon problemleri(statik tanımlamalar) dışında herhangi bir problem duymaksızın kullandım. multithread yada childthread gibi yapılar yerine daha sistematik bir yaklaşım sunuyor aslında bu yapı. ancak bende yazım zorluğundan ve hata bulma konusunda uğraştırıcı olmasından dolayı kendi kendime ciddi şikayetler içerisinde oluşumdan dolayı bunu otomatikleştirme yollarını aramaya başladım.

bu arada her türlü eleştiriye açığım. ister yöntem olsun ister bu anlamdaki hedeflerim olsun sebepler çerçevesinde yapılan eleştiriler ufkumu açacaktır elbette. tıpkı clang, antlr, flex ve bison deyimlerini az önce fark ediyor olmam gibi. bu konuda çekinmeden yazmanızı rica ederim.

mufitsozen

#12
Alıntı yapılan: hasankara - 10 Ekim 2014, 21:51:51

bu arada her türlü eleştiriye açığım. ister yöntem olsun ister bu anlamdaki hedeflerim olsun sebepler çerçevesinde yapılan eleştiriler ufkumu açacaktır elbette. tıpkı clang, antlr, flex ve bison deyimlerini az önce fark ediyor olmam gibi. bu konuda çekinmeden yazmanızı rica ederim.

sayin @OG dovecek diye korkmasam ben daha neler yazarim ama :-X, simdi yukardan kartal gibi forumdaki mesajlari gozluyordur, "Beni sana cevap verdirtme, pisman olursun!" diye kukreyecek ondan yani :P
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

hasankara

hocam en fazla ne olabilir ki. küfür hakaret olmadığı sürece isterseniz cahil felan deyin git şu kitapları oku sonra gel deyin hiç fark etmez gerekli gördüğüm kadarıyla değerlendireceğimden şüpheniz olmasın :). oda forum kurallarına aykırı diye söylüyorum :D.

mufitsozen

#14
Alıntı yapılan: hasankara - 10 Ekim 2014, 22:05:35
hocam en fazla ne olabilir ki. küfür hakaret olmadığı sürece isterseniz cahil felan deyin git şu kitapları oku sonra gel deyin hiç fark etmez gerekli gördüğüm kadarıyla değerlendireceğimden şüpheniz olmasın :). oda forum kurallarına aykırı diye söylüyorum :D.
Hocam bizde oyle kufur, hakaret yok. Kucukken annem agzima o kadar aci biber surdu ki istesemde kufredemiyorum. :P

Bu vesile ile sayin @OGyede saygilarimi sunar, yuklendigi zor ve zahmetli gorevinde bugune kadar gosterdigi basarili icraatin devamini niyaz eder, kendisine de hurmetler eder. "Moderatorum cok yasa, Allah seni basimizdan eksik etmesin!" derim. (hoop yine konu dine yaklasmaya basladi ben susayim daha iyi bi gun sopayi yiyecem valla! :-X)

mesaj birleştirme:: 10 Ekim 2014, 22:43:05

hem karsisindakine cevap vermek icin illada agzini bozmak gerekmez.

okumus dokumus insanlar yani doktorlar, muhendisler, kaptanlar, yazarlar vs agzini bozmadan, seviyesini dusurmedende karsilik verebilir.

Gencler kitap okumadigi, tarihle ilgilenmedigi icin bunlari bilmiyorlar. Birbirlerine pazarci (pazarcilari tenzih ederim, betimsel bir anlatim icin bu meslegi ornek verdim, kayikcida diyebilirdim yada ...) agzi ile karsilik veriyorlar.

Halbuki asagidaki ornekdeki gibi daha zarif ve igneleyici bir sekildede karsilik verilebilir. Bu tip hitaplarda genellikle Tevriye denilen bir edebi usul kullanilir. (Genc arkadaslar evet yine kitap okumaniz gerekecek, yada en azindan google! :) )

Cok bilinen bir ornek 17. yuzyilda yasamis sair Nef-i'dir(Herkes Muhtesem Yuzyili bilirde Nef-i yi bilen kac kisidir?)

Iste efendim bu sairimize Tahir diye birisi "kopek" demis, bunu duyan Nef-i'de asagidaki dortlugu yazmis:

Tahir Efendi bana kelp demiş, ... (Tahir bey bana kopek demis)
İltifatı bu sözde zâhirdir, ........... (Iltifati(ovgusu) bu sozde saklidir)
Malikî mezhebim benim zira, ...... (Cunku benim mezhebim Malikidir)
İtikadımca kelp tahirdir. ............. (Maliki Inanisina gore kopek temizdir! -- Tahir'in bir anlamida temiz demektir)

Goruldugu gibi sair burada tevriye kullanarak hem "Tahir Kopekdir" diyor ayni andada "Kopek Temizdir" diyor.

filan falan derken konuyu sulandirdim, sayin @OG cidden mudahele etmeden ben kacayim.







mesaj birleştirme:: 10 Ekim 2014, 22:54:34

Bir ornekde meshur Churchill'den,

Bildiginiz gibi Churchill cok muhafazakar fikirlere sahiptir. Ayni zamanda misogynistdir(turkcesi homongolos--- hadii genclere daha fazla okunacak materyal! :))

Bir gun bir davette kendi fikirlerini anlatirken grupta bulunan lady Astor o kadar sinirlenmis ki, 'Mr. Churchill, eger ben sizin kariniz olsaydim sabah kahvaltisinda size cay yerine zehir verirdim' demis.

Churchill sakin bir sekilde cevap vermis. 'Leydim, ben sizin kocaniz olsaydim o zehiri icerdim! :)

yaa iste boyle nereden nereye geldik cfront filan derken :P
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.