Blue Forth

 



Bana rastlamasa da bazı stm32f103 (Bluepill) kartlara Bluebishi plc firmware'i yüklenemiyor. Kartın plc olabilmesi için toplamda 128K flash hafızaya sahip olması gerekiyor. Flash hafıza miktarı ve çip'in sahte olup olmadığı bir program yüklenerek anlaşılabiliyor. Buradan indirebileceğiniz firmware dosyasını, Bluebishi yazısında gösterdiğim şekilde karta yazabilirsiniz. Bu program yüklendikten sonra klavyeden m tuşuna basılıyor ve karşımıza bir menü çıkıyor. Bu işlemi bir seri terminal programı içinde yapmalısınız. Bendeki kart, plc olduğunda sorunsuz çalışıyor. Buna göre benim aldığım çıktılar şu şekildedir :

=========================================== 
Bluepill Diagnostics V1.640 - GPL3 Licensed
=========================================== 
h - test second Half of the 128KB flash declared for this chip:  PASSED 
f - how much Flash is declared in the Flash Size Register ? 
d - Print DBGMCU_IDCODE 
a - STM32F103C8T6 Authenticity test, don't use with SWD/JTAG. 
j - Jdec manufacturer id 
e - Extra menu 
q - Quit menu, enter the Forth command line 
m - Main menu 

Yukarıda görüldüğü gibi h tuşu ile yapılan testin sonucu PASSED yani geçer not aldı. f tuşu testi, bendeki çıktısı ise :
131072 flash is declared in the Flash size register at 0x1FFFF7E0 
 (Burada sonuç sizde 65536 da çıkabilir, bu bir sorun değil)

a tuşu testi, bendeki çıktısı :

STM32F103C8 authentication FAILED one or more tests: 
---------------------------------------------------- 
FAIL - Declared flash not 65536 
PASS - DBGMCU_IDCODE is NOT readable without SWD/Jtag connected 
PASS - Second 64KB flash block verified 
PASS - JDEC manufacturer id IS STMicroelectronics 
(Buradaki sonuç sizde hepsi PASS olabilir.)

j tuşu testi, bendeki çıktısı :

Jdec Continuation Code: 0x00
Jdec Identity Code: 0x20
JDEC manufacturer id: STMicroelectronics 

Kartınız, h tuşu testinde ve a tuşu testinde 3. maddede FAIL olduysa, plc firmware'ini elinizdeki kart ile kullanamazsınız demektir. 


Forth programlama dili

Testte bulunan q tuşu, Forth dili ile tanışmamı sağladı. Bu test programı Forth ile yazılmış. Bugüne kadar öğrendiğiniz dilleri unutun yani benzetmeye çalışmayın. Tamamen farklı bir konsept. Yazdığınız bir sayının ardından enter tuşuna basmanız, bu sayıların yığına (stack) kaydedilmesini sağlıyor. Yığına son giren sayı, yığından ilk çıkan sayı olacaktır. Buna programcılıkta LIFO da deniyor. Yığının son halini ".s" komutu ile görebilirsiniz. Nokta ile yığına son giren sayıyı yığından çıkarabilir ve ekrana yazdırabiliriz.

2 10 14 3 
. . .

Satır sonlarında klavyeden enter tuşuna basıyoruz. Alternatif olarak rakamların her birinin ardın da enter tuşuna basabilirsiniz. Sonuç değişmeyecektir. Çünkü bu sırada Forth'un yorumlayıcısı (interpreter) iş başındadır. Her yazdığınız rakam yığına sırayla kaydedilmektedir. Sonuç bu şekilde oluyor :


3 sayısı yığının en üstünde bulunduğundan ilk olarak yığından o çıkacaktır. 2. satırda 3. noktadan sonraki bilgileri, 3. satırda .s den sonraki bilgileri Forth bana yazdı. [1] yığında bir sayı kaldığını söylüyor. Son kalan sayı 2'dir. Stack'de birşey yokken sırasıyla nokta, enter yaparsanız "stack underflow" uyarı yazısı çıkıyor.

Birkaç satırdan oluşan programları karta yollayarak program yazılabiliyor. Bunun için 2. satırı yollamadan biraz beklemek gerekiyor. Daha doğrusu satır sonlarında gecikme koymak gerekiyor. Terminal olarak, Linux ortamında e4thcom adında program kullanılıyor. E4thcom programında satır sonu gecikmesine gerek kalmıyor. Çünkü her satırda Forth'un yolladığı "ok" kelimesine bakıyor. Ben şuan Windows ortamında takıldığım için mecburen Hyperterminal programını kullanıyorum. Hyper'da satır sonuna gecikme koyulabiliyor.


Hyperterminal satır sonu gecikme ayarı


Forth çalışmak için, Bluepill'in usb soketini bilgisayara bağlamak yeterli oluyor

Windows veya Linux ortamında satır sonu gecikmesinden kurtulmanın bir yolu daha var. Bunun için üstteki resimde "Akış denetimi" seçeneğini "Donanım" yapabiliriz. Ama bunun için özel bir firmware dosyasına ve CTS girişi olan bir usb-seri çeviriciye ihtiyaç var. Bu firmware, USART2 portundan çalışıyor.

Menü çıkmasın, kartın usb soketini bilgisayara bağladığımda, direk Forth karşıma çıksın isterseniz, buradaki dosyayı indirebilirsiniz. Sıkıştırılmış dosyayı, bluepill'e yüklemeden önce açmanız gerekir.  

Forth'un felsefesi

Türkçeye, "kelime" olarak çevirilen "word" aslında bir çeşit alt programdır. Ama diğer dillerde bulunan alt program, prosedür veya fonksiyon yapılarından farklıdır. Kelimeler arasındaki bilgi akışı, yığın (stack) üzerinden yapılır. Bir kelime, yığından veri alabilir ve/veya yığına bilgi bırakabilir. Yani Forth'da, diğer dillerde olduğu gibi, "bir alt programdan diğer alt programa nasıl bilgi yollayabilirim ?" gibi bir uğraşı olmaz. OOP dillerde veriyi korumak için kullanılan "encapsulation" yani kapsülleme işini, Fort, yığını kullanarak basit bir şekilde çözmüştür. Forth içinde bir kelime tanımlanırken sadece kelimenin yapacağı işe odaklanılır. Diğer dillerde olduğu gibi alt programı çağırmak için bir komut yoktur. Onu çağırmak için kelimenin sadece adını yazmak yeterlidir. 

Forth'un, Arduino, Esp32, Pic18-24 kart modellerinde ve bilgisayarda çalışan Gforth gibi versiyonları da vardır. Bilgisayarda çalışan, C# diliyle yazılmış büyük bir programı, Forth ile yazmak mümkün olmayabilir. Bluepill (stm32f103) gibi düşük kaynaklara sahip elektronik bir kartın içinde çalışacak bir program için ise Forth, biçilmiş bir kaftandır. Forth dili, saf makine dilinden sonra en hızlı olan programlama dilidir.

Kelime oluşturma

Terminalde "Words" veya "Words4" yazınca Forth size hafızadaki bütün komutları veya kelimeleri listeler. Kelimelerle ilgili bilgilere buradan bakabilirsiniz. Ayrıca kendiniz de bir kelime oluşturabilirsiniz :
: loop-test  10 0 do i . loop ;
loop-test
Ekrana 0 dan 9 a kadar sayılar basılacaktır. Burada loop-test isimli "word" oluşturuldu. 2. satırda loop-test yazılarak program çalıştırıldı.. Noktalı virgülden sonra bluepill içindeki Forth, siz farketmeden kelimeyi derledi (compile) ve ram hafızada bir yere yerleştirdi.

: is-negative? 0 < if ." yes" else ." no" then ;
-2 is-negative?
Burada -2 negatif olduğundan ekrana yes yazılacaktır..Hafızada olmayan bir komut veya bir kelime yazarsanız, terminalde "not found" yani "böyle bir kelime bulunamadı !" cevabı gelecektir.

Oluşturulan kelimeler veya programlar, istenirse flash, yani kalıcı hafızaya yazılabiliyor. Böylece yazılan program önce ram hafızada test edilir. Çalıştığından emin olununca flash (kalıcı) hafızaya yazılabilir.

Forth'u deneyimle

Burada anlattığım kelimeleri, online olarak bu web sayfasında test edebilirsiniz. Aynı sayfa, Forth’a giriş niteliğinde bilgiler içeriyor.


Toplama işlemi ile yığında olan sondaki iki sayı toplanmış, yığına kaydedilmiştir


Bluepill diagnostics programını indirdiğimiz sitede ve bu sayfada, Forth ile ilgili birçok bilgi bulabilirsiniz. Forth ile bu kartın tüm donanımları kullanılabiliyor. Forth, güçlü ve hızlı olmasına karşılık öğrenmesi zaman alabilecek bir dil. Bu nedenle yok ben almayayım Arduino IDE veya StmCubeIDE ile devam edeyim diyebilirsiniz. Forth ile program yazarken, bilgisayarda bulunması gereken kütüphane dosyası, derleyicisi vs. ihtiyacı yoktur. Çünkü bunlar bluepill'in içinde bulunur. Bluepill'in içinde koşan Forth hem işletim sistemi hem derleyici hem de yorumlayıcı barındırır. Sadece bir terminal programıyla ona bağlanmanız yeterlidir. Bu nedenle Forth kullanımı bana pratik ve eğlenceli geldi.

Yorumlar

Bu blogdaki popüler yayınlar

VBA - Mscomm (seri port) ile veri loglama

Bluebishi PLC tanıtım

Windows 11'de GX Developer kurulumu