Blue Forth

 



Bana rastlamasa da bazı stm32f103 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 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. Sonuç bu şekilde oluyor :


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. 768'i ben yazmadım. Kart resetlendiğinde stack'de bir sayı oluyor. 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ı

Menü çıkmasın, direk Forth karşıma çıksın isterseniz, buradaki dosyayı indirebilirsiniz. Terminalde "Words" veya "Words4" yazınca Forth size hafızadaki bütün komutları listeler. Ayrıca kendiniz de bir word 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ı..

: 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 "word" yazarsanız, terminalde "not found" yani "böyle bir komut bulunamadı !" cevabı gelecektir.

Burada anlattığım komutları, bir karta ve yazılıma gereksinim olmadan bu web sayfasında test edebilirsiniz. Aynı sayfa, Forth’a giriş niteliğinde bilgiler içeriyor.




Bluepill diagnostics programını indirdiğimiz sitede ve internette, Forth ile ilgili birçok bilgi bulabilirsiniz. Örneğin burada da dilin kullanıldığı projelerden bahsedilmiş. 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, kütüphane dosyası, derleyicisi vs. ihtiyacı yoktur. 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