FlashForth (FF) tanıtım
Forth, diğer geleneksel programlama dillerinden farklıdır. Forth, genişletilebilir, yüksek düzeyde etkileşimli, yığın (stack) tabanlı bir dildir. Forth’un bir tipi olan Flashforth PIC18, PIC24 ve Arduino tabanlı kartlara yüklenebilir. Daha önce “Blue Forth” isimli yazımda Forth’a bir giriş yapmıştık. Forth sistemi kullanılırken, seri port veya bir USB bağlantısı üzerinden, bir terminal emülatörü ile karta bağlantı sağlanır. Terminal emülatörü olarak, tüm işletim sistemleri için CoolTerm, Linux için Minicom gibi programlar kullanılabilir. Flashforth kısaca FF yüklenen bir Arduino UNO, 2KB ram ve 32KB flash bellek içeren minik bir bilgisayara dönüşür. Flash bellek, bilgisayardaki ssd disk gibidir, güç kesintisinde silinmez.
Ben daha kolay olduğu için yerli işletim sistemimiz Pardus linux ile UNO'ya FF yükleme ve terminal emülatör işini hallettim. FF yükleme işinden önce, neden böyle bir işletim ortamını kullanmak gerekebilir, ondan biraz bahsetmek isterim. Geleneksel programlama dillerinin (C, Python veya Java) karmaşık katmanları arasında kaybolduğunuzu hiç hissettiniz mi ? Yazdığınız kodun mikrodenetleyicinin içinde tam olarak ne zaman ve nasıl çalıştığını merak ediyor musunuz ? Eğer cevabınız "evet" ise, sizi programlamanın en saf, en doğrudan ve en etkileşimli haliyle tanıştıralım: FlashForth.
Zamanlamanın hassas olduğu işlerde veya küçük bir hafızayı verimli bir şekilde kullanmanız gerektiğinde Forth size çözüm olacaktır. Bu sayfanın ortalarından itibaren, FF ile neler yapılabildiğini görebilirsiniz. FF ile seri port, oled ekran için i2c veya SPI kontrolü, pwm, LoRa işleri, step motor sürme, analog değer okuma gibi işler, herhangi bir kütüphaneye gerek kalmadan yapılabilmektedir.
Arduino IDE ile FF’u karşılaştırmak gerekirse aşağıdaki tablo'ya bakabilirsiniz.. Elbette Arduino IDE'nin kullanılmasının daha iyi olacağı durumlar da olacaktır. Ama FF'u öğrenince, her işi onunla yapmak isteyebilirsiniz :)
FF sisteminde, compiler (derleyici), interpreter (yorumlayıcı) hepsi, Arduino UNO'nun içindedir. Burada ne kadar anlatsam da boş, FF'u denediğinizde farkını hemen hissedeceksiniz.
Flashforth'u Arduino'ya yükleme
Arduino UNO'ya FF'un .hex dosyasını atabilmek için sadece bir kereliğine bize bir de Pololu usb avr programlayıcı gerekiyor. FF, karta kurulduktan sonra onu bozmanız olanaksızdır. Aynı link'te dökümanı da mevcuttur. Bu aşamada ICSP soketinin yönüne dikkat edin. Dikkatli bir şekilde voltaj veya enerji yokken omaj ölçerek pinlerin doğru yerde olduğunu kontrol edin. Pardus linux için sürücü kurmaya gerek yoktur. Donanımı otomatik olarak tanıyacaktır. sudo dmesg komutuyla yeni donanımın algılanıp algılanmadığını kontrol edebilirsiniz. Sürekli sudo komutunu kullanmak yerine, Pardus kurulumundan sonra sudo passwd root komutu ile root şifresini belirledim. Ctrl-Alt-T ile bir terminal açıyoruz. su komutuyla root yetkisini almış oluyoruz.
apt-get install komutu ile aşağıdaki paketleri bilgisayara kurmak gerekiyor.
1. gcc-avr : AVR mimarisine taşınan GNU C derleyicisi
2. avr-libc : AVR'nin özel işlevlerine erişim sağlayan bir kütüphane
3. binutils-avr : nesne kodunu hex dosyalarına dönüştürmek için kullanılan araçlar
4. avrdude : programlayıcıyı çalıştırmak için kullanılan yazılım
Sourceforge sitesinden FF5.0.zip dosyasını indirip, açın. FF/avr/hex/ dizininde Ctrl-Alt-T ile bir terminal açın. Aşağıdaki komutu kopyalayıp, terminal penceresine Ctrl-Shift-V ile yapıştırın..
avrdude -p m328p -c avrispv2 -P /dev/ttyACM0 -e -u -U flash:w:328-16MHz-38400.hex:i -U efuse:w:0xff:m -U hfuse:w:0xdf:m -U lfuse:w:0xff:m
Böylece FF, Arduino'ya kurulmuş oluyor.
Minicom (terminal emülatör) ayarları
Minicom'u yine apt-get install minicom ile kurduktan sonra resimdeki parametrelerle, Arduino'ya bağlanabilirsiniz. CoolTerm programında da baud ayarını 38.400 olarak ayarlamak gerekiyor.
Burada Ctrl-A ardından Z tuşlarına basın. Sözcüklerin alt satıra kayabilmesi için W tuşuna basın. Arduino'ya aktarılmak üzere Terminale bir program yapıştırdığımızda satır aralarında 100ms kadar gecikme vermemiz gerekiyor. ( FF, kodlar terminale yapıştırılırken aynı anda onları derleyip, flash hafızaya yazıyor ) Bunun için tekrar Ctrl-A ardından Z tuşuna basın. Sırayla T ve D tuşlarına basın. Burada 100 yazıp enter tuşuna basın. Minicom'dan çıkmak için Ctrl-A ardından Q tuşuna basınız. Şuan için bu tuşa basmayın yani Minicom’dan çıkmayın. Çıkarsanız, aynı ayarları tekrar yapmanız gerekecektir. (CoolTerm de bu ayarı yapmak için Options > Transmit > Use transmit line delay menüsünü kullanabilirsiniz)
Terminalde
words yazıp enter tuşuna basınca kelime listesi ekrana basılacaktır..Terminalin, Düzenle - Özellikler menüsünden font büyüklüğünü 16, rengini de turuncu yaptım. ( font Monospace Regular )
Bir kelimenin kullanılışını araştırma
Bilgisayarda bulunan FF dizinindeki dosyaların içeriğinde bir kelimenin kullanımını görmek için bir arama yapabilirsiniz. Thunar dosya yöneticisi ile Sourceforge'tan indirip açtığınız dizine gelin. Burada sağ tık ile terminal açıp, grep -ri 'pad' * veya grep -ri --include "*.fs" 'pad' . komutunu girin. Ana dizin ve alt dizinlerin hepsinde arama yapılacak, içinde "pad" geçen dosyalar ekrana gelecektir. Windows'ta dosya içeriğinde arama yapabilmek için grepWin uygulaması kullanılabilir.
Arduino'ya program yollama
: .free
cr ." Flash:" flash unused u. ." bytes"
cr ." Eeprom:" eeprom unused u. ." bytes"
cr ." Ram:" ram unused u. ." bytes"
;
Üstteki 5 satırı, Pardus'ta bulunan "Mousepad" uygulamasına yapıştırın. Dosyayı farklı kaydet diyerek ".fs" uzantısı ile kaydedin. Görünüm - Renk Şeması menüsünden kodu renklendirebilirsiniz. Mousepad'te bulunan kodu Ctrl-C ile kopyalayıp, Arduino'ya bağlı terminale Ctrl-Shift-V ile yapıştırın. Tebrikler, ilk programınız flash hafızaya kaydedildi. .free kelimesinin veya programının hafızaya veya sözlüğe kaydedildiğini görmek için words yazıp enter tuşuna basın. .free kelimesi, kartta ne kadar boş hafıza kaldığını göstermektedir. Programın çalışması için terminale .free yazıp enter tuşuna basmanız yeterlidir.
Vereceğiniz kelime isimleri 15 karakteri geçmemelidir. İsim içinde Türkçe harf olmamalıdır. FF’da küçük / büyük harf duyarlılığı vardır. : Ve ; arasında bulunan satırlar, anında derlenerek hafızaya yazılmaktadır. Eğer vereceğiniz kodun başında : karakteri yoksa, yorumlayıcı devreye girer. Size hemen cevap verir. Yorumlayıcıya yazdığınız kelimeye cevap olarak "COMPILE ONLY" gelebilir. Bu uyarı, bu kelimeyi yorumlayıcı ile kullanamazsınız demektir. 1 2 3 yazıp enter tuşuna basınca bu sayılar yığına kaydedilir. ".s" komutuyla da yığın içeriğini görebilirsiniz. "dup" yazıp enter tuşuna basınca yığına son giren sayı çoğaltılır. Nokta tuşuna basıp enter yaparsanız, yığına son giren sayı ekrana yazılır ve yığından silinir. "over", "2drop", "and", "emit", "rot" gibi kelimeleri direk yorumlayıcı ile kullanabilirsiniz. Bir kelimenin kullanım şekline buradan bakabilirsin. Aynı sözlük listesi, FF ana dizininde wordsAll.txt dosyasında da bulunmaktadır. Ters slash, boşluk ve aç / kapa parantez, Forth'da yorum ifadeleridir. Örneğin "and" komutunun yanında :
( x1 x2 -- x3 )yazmaktadır. Yani "and" kelimesinin kullanılabilmesi için, en az 2 sayı yığında olmalıdır. 2 sayı "and" işlemine tabi tutulur, sonuç yığına yazılır. Tirelerin solu girişi, sağı çıkışı ifade eder. Normal sayının başına # yazarsak ondalık, $ yazarsak onaltılık, % yazarsak sayının ikili tabanda olduğunu gösterir.
Uzun bir programı, FF'a (terminale) yapıştırmadan önce resimdeki gibi terminali sıfırlayın. Programı yapıştırdıktan sonra ? karakterini Ctrl-Shift-F ile aratın. Eğer bu karaktere rastlarsanız bir yerde bir ; karakterini unutmuş olabilirsiniz. ? karakteri FF’un bu kelimeyi sözlükte bulamadığını yani anlamadığını gösterir. empty komutu ile tüm programı silip yeniden yüklemeyi deneyebilirsiniz. Bu komutu deneyin ve FF’un ilk yüklendiğindeki sözlüğünü listeleyin. Yukarıda oluşturulan 5 satırlık programın başına marker -sil komutunu yerleştirin. O şekilde yani 6 satır olarak terminale (FF’a) yapıştırın. Diyelim ki sözlüğe birden fazla kelimeler eklediniz. Ve her kelimenin başına bir “marker” koydunuz. Artık empty ile tüm kodu silmek yerine terminale -sil yazarak, sondan başlayarak “marker” a kadar oluşturduğunuz kodu silebilirsiniz.
Artık FF'un sayfasında bulunan öğretici dökümanlarda bulunan kodları deneyebilir, FF'u öğrenmeye başlayabilirsiniz. Bazen dökümanda bulunan kelime, döküman güncellenmediğinden FF'un güncel sürümünden çıkarılmış olabiliyor. Paragraf başında verdiğim link'te arduino-forth ve udamonic linkleri de var. Udamonic isminde bir firma, FF ile çalışan scamp3 diye bir kart üretmiş. Kelime listesinde komutların çoğu var. Öğrenmek amacıyla, tüm linkleri incelemenizi tavsiye ederim. Ayrıca Github sayfamda da ilgilenenler için örnek programlar yayınlayacağım.
Gemini versus Claude
Yapay zeka, yazılım veya programlama konusunda gerçekten çok gelişti. İlerde, yaptığı yazılımla geçimini sağlayan firmalar işsiz kalabilir. Çünkü gelecekte, yapay zeka sayesinde herkes kendi yazılımını kendisi yapacak gibi görünüyor.
Yapılan çalışmaya veya programlama diline göre yapay zekaların üstünlüğü değişebiliyor. Ayrıca yapay zekayı ücretsiz mi, ücret karşılığında mı kullanmanıza göre de olay değişebiliyor. Son testlerimde forth konusunda Gemini'ın daha iyi olduğunu söyleyebilirim. Özellikle istediğiniz programın algoritmasını doğru oluşturma konusunda iyi diyebilirim. Bazen flashforth’ta olmayan bir kelimeyi kullanabiliyor. Bu kelime sözlükte yok diye uyarınca kodu hemen yeniden düzenliyor. Tabii ben ücretsiz sürümleri deniyorum. Chatgpt baştan beri forth konusunda çok kötüydü zaten. Ondan hiç bahsetmedim o yüzden. Bu arada ücretli sürümü daha iyi olabilir. Bir şey diyemem.
Yapay zekaya sorduğunuz konu hakkında hiç bir bilginiz yoksa, size çok gerçekçi gibi gelen aslında saçma sapan uydurulmuş cevaplar verebiliyor. Claude, pazarlama konusunda, kendini güzel bir şekilde size sunma veya sizi ikna etme konusunda gerçekten çok iyi görünüyor. Hemen üye olup her ay para ödeyesi geliyor insanın :) Özetle, şu an için siz siz olun yapay zekanın her dediğine inanmayın.






Yorumlar
Yorum Gönder