ile ilerledikçe, sadece bu günlerde görülen endüstri için değil, aynı zamanda hackerlar için değil, aynı zamanda endüstriler için değil, aynı zamanda anlayışlı bir geliştirme platformunda . Seni birkaç parça ucuz donanım elde etmek için bile kandırdım. Bu sefer, bu donanımda kurulan ve “Hello World” zorunlu “Hello World” ve LED Blinky’yi yöneteceğiz. Ama sonra, mikrodenetleyicilerde çok temiz olan özelliklerden birine dalacağız: kolay çoklu görev.
Çalışmak!
Donanım
Mecrisp-Stellaris, çok sayıda kol mikrodenetleyicisi üzerinde çalışıyor, ancak burada, genellikle A “STM32F103 Minimum sistem kartı olarak adlandırılan akçaağaç mini’nin genel bir kopyası şeklinde olağanüstü derecede çok az para için mevcut olan STM32F103 cipslerine odaklanacağım. “Veya” Mavi Hap “, form faktörü nedeniyle ve satılık kırmızı olanlar olduğu gerçeği. Gemideki mikrodenetleyici, 72 MHz’de çalışabilir, 20 KB RAM ve 64 veya 128 KB flaş var. Çok sayıda pin vardır, dijital olanlar 5 V toleranslıdır ve tüm normal mikrodenetleyici çevre birimlerine sahiptir. En güç verimli değil ve kayan nokta bir birim veya bir DAC yoktur, ancak olması gerekenden çok daha az para için uygun olan sağlam bir eski tasarım.
Programcı bağlı, USB üzerinden güç
Benzer kitlesel üretim harikalarının, başlangıçta çipi yanıp sönmesi gereken programcı için çalışır. St-Link V2’nin klonlarından herhangi biri iyi çalışacaktır. (İronik olarak yeterince, programcının içindeki donanım hedefle neredeyse aynıdır.) Son olarak, etkileşimli kabuğundaki gibi çalıştığını düşünün, STM32 panosuna seri bağlantıya ihtiyacınız olacak. Bu muhtemelen bir USB / Seri adaptörünü gösterir.
Bütün bu kurulum, bir fast food yemekten çok daha fazla maliyetli olmayacak ve programcı ve USB / Seri Adaptör, zaten yapmazsanız, kitinizde sahip olmak istediğiniz şeylerdir.
Tahtayı doğrudan, kartın etrafına dağılmış çeşitli 3.3 ve GND pinsleriyle veya hedef karttaki mikro USB portundan veya 5V pimlerinden geçirebilirsiniz. İkinci iki seçenek 3.3 pin ile katılmadan önce 3.3 V regülatöründen geçer. Tüm pimler birbirine bağlanır, bu nedenle bir seferde sadece bir güç kaynağı kullanırsanız en iyisidir.
Firmware: Dördüncü Sistem
Git Gitub’dan Süper Özel HackaDay-Edition Mecrisp Forth Paketi’ni alın. “ROM’lar” dizinine dahil edilmiştir, burada demolar için çalışacak bir dördüncü sistemdir. [JCW] ‘ın istisnai emelin arasından saygın bir tabana da yükledim, kolay GPIO yapılandırması, gecikme fonksiyonları vb. Gibi şeyler sağlıyor. Çok daha fazla kütüphane var, ve onlara ihtiyacımız olduğunda bir dahaki sefere onlara bakacağız.
Bir ileri sistemi kullanan en havalı şey, herhangi bir şekilde çok az destek yazılımının gerekli olmasıdır – Dördüncü tercüman kendi kodunu derler ve seri terminali ile etkileşime girersiniz. Her şey mikrodenetleyicinin içinde olur. Bir engel, o zaman çipin üzerine çıkıyor. Eski günlerde, bu, baytlarda manuel olarak değiştirilerek yapılır ve ileride bu şekilde tam anlamıyla önyüklenmesi mümkündür. Ama sen zaten o yonga programcısını aldın mı?
[Texane] ‘nin ST yardımcı programları çipinize çıkmanın en kolay yoludur. Onları GitHub’dan indirin ve kendiniz oluşturun ya da Distro’nun paket yöneticinizle şansınızı deneyin. (Windows millet, ya da dışarıda bırakılmadın. Her ne kadar ikili bir süredir güncellemeyi görmese de, yapacak.)
Programlama tellerini belirgin şekilde bağlayın ve Sihirli Komutlar ST-Flash Sil ve ST-Flash Mecrisp-Stellaris-HackaDay-Edition.bin 0x8000000 yazın. Beş saniyede, gürlemeye hazır olacaksınız.
GND – GND
SWCLK – CLK
SWSIO – DIO
Bir programcı almak zorunda kalmak, eğer bir tane yoksa bir güçlükdür, ancak hayatınızın geri kalanını kolaylaştıracak ve bir tane almak “Ödeme” ve bekletilecek kadar temeldir. Kendi [Al Williams] (ilişki yok), C ya da Arduino kodunu GDB ile hata ayıklama için aynı yazılımı kullanma konusunda yeni bir postaya sahip, bu yüzden bunu ayarlamak için zamana değer.
Yazılım
Seri bağlantı, dizüstü bilgisayar tarafından desteklenmektedir
Programcıyı şimdilik uzağa koyun ve STM32’ye Seri Üzerinden Bağlayın; Varsayılan baud hızı 115.200 olmalıdır. Henüz fişi olmayan bir güç yoksa, STM32 kartındaki RESET düğmesine basmanız gerekebilir. Her şey yolunda giderse, tanıdık bir kafatası ve çapraz anahtarlar tarafından karşılanırsınız. Mecrisp, çizgilerin sonunda bir linefeed bekliyor, bu yüzden LF + CR gönderiyorsanız, başarıyla iki kez dönüşe vurursunuz.
A9 TX – Seri RX
A10 RX – Seri TX
GND – GND
[JCW] ‘in folie, bu uygulama için güzel, çok platform bir seri terminal emülatörüdür. Normal terminal programınızın ne yaptığı şey, bir komut satırını yukarı okuyla tekrar girmenize izin verir, bu da uzun bir komuta yeniden yazmaktan çok daha kolay, bu, hataları çok daha kolaydır. AyrıcaBu makalenin ikili olarak inşa edilmesinde önemli bir şekilde kullandığım diğer dosyaları otomatik olarak içerir. Folie’yi çalıştırmana gerek yok ama bahse girerim bundan hoşlanacaksın.
Selam Dünya
Şimdi bu “Merhaba dünya” zamanı. Eğer ileridiyseniz, burada çok seçici bir giriş geliyor. Tip 2 2 + ve enter tuşuna basın. Tamam diyor .. güven verici, değil mi? Şimdi yazın. (“DOT” okuyun) ve şaşırtıcı olmayan sonucu yazdıracak. DOT, içselleştirmek isteyeceğiniz birkaç küresel ilerideki stenodan ilkidir. Bir noktaya sahip birçok komut, sonuçlarını hemen yazdırır. .S (DOT-ESS), örneğin yığın içeriğini yazdırır. Bir değişken almak ya da bir girdi okumak için çok fazla göreceğimiz iki deyim daha fazla deyim ve! Bir değişken veya çıktı ayarlamak için. Kodu tararken kafanızdaki “get” ve “SET” olarak Bunları okuyun.
Sonra, nasıl bir fonksiyon yazacağınızı görelim. : bir fonksiyon tanımı başlatır ve; biter. Böylece: Dört 2 2 +; Birlikte iki ve iki ekleyen bir işlevi tanımlar. (Ve gerçek zamanlı olarak derler!) Daha sonra geri çevirip bu işlevi hemen arayabilirsiniz. Dört. İşlevimizin yığın üzerinde iki ve iki miktarını terk ettiğini gösterecektir. Bu anlamda, ilerideki fonksiyonlar gerçekten işlev görmez. Açık argümanlar almazlar veya açık değerler geri dönmezler. Sadece yığın üzerindeki veriler ne olursa olsun çalışırlar ve sonuçları da orada bırakırlar. Bu yüzden fonksiyonlar “Kelimeler” olarak adlandırılır. Bundan sonra bu Sözleşmeye yapışacağım.
Burada, nihayet, “Merhaba dünya” dır :: hw. “Merhaba, dünya!” CR; “Dizeler, özellikle dilin ayrıştırılmasından dolayı, derleyiciler, derleyici bir boşluğa kadar okuyor ve daha sonra ne bulduğunu çalıştırdığını, bu yüzden baskı-A-string arasında bir boşluk olması gerekir. (. “) ve yazdırmak istediğiniz ilk karakter. Yine de, baskı komutu bir kapama bulana kadar öne çıktı “, böylece orada fazladan bir alana ihtiyacınız yok. CR bir satır başı gönderir. HW yazın. HOW, World!
Yanıp sönen LED’ler
Seri metin girişi ve çıktı bu kadar kolay olmasına rağmen, bir LED’i yanıp sönerek mikrodenetleyicilerin “Merhaba dünyası” standartlarıdır, bu nedenle bazı GPIO için zamanıdır. Sistem zaten bu özel mikrodenetleyici kartı için yapılandırıldığından, bir LED’i açmak için LED.ON yazmak kadar kolaydır. Kapatmak ister misin? led.off. Manuel yanıp sönme oldukça çabuk yaşlanacak, yani bir göz kırpma kelime yazalım. : LED.ON 100 ms led.off 200 ms; hile yapacağım. Yanıp sönme yanıp sönmeyi deneyin. Detaylandırma için Blink Demo kodumu görün. (Birkaç bin milisaniyede MS’de daha fazlası.)
GPIO başlatma işleminin detayları, Core / HackaDay / LED.FS’de ve Bahçenizin STM32F1 / IO.F’lerde sırasıyla gizlenir. Kazma, standart başlatma prosedürünü göreceksiniz: Belirli bir pim, STM32’nin çevresel kontrol kayıtlarındaki bazı bitleri çevirerek çıktı olarak ayarlanır. [JCW] Bunlardan bir demet tanımlamış, bir pimi çıktı olarak ayarlayarak, PC13 Omode-PP IO modu kadar kolay! (“!” Düğmesini hatırlayın. Değeri değişken veya kayıt olun.)
PIN PA7’yi ADC girişi için yapılandırmak için: PA7 IMODE-ADC IO-MODE! Test düğmeleri, dahili çekme veya açılır dirençleri kullanarak: PA3 IMODE-POPL IO modu! ve ardından çıktıyı gerçek PA3 iO’yu kullanarak yukarı veya aşağı çekmek için ayarlayın! veya PA3 iOS! Daha sonra daha sonra PA3 IO @ (“IO Get”) ile düğme durumunu okuyabilirsiniz.
STM32 yongalarındaki GPIO çok esnektir ve veri sayfasındaki konfigürasyon seçeneklerine derinleştirmek istiyorsanız, tüm bunları [JCW] ‘ın IO.FS kodunu kullanarak oldukça kolay bir şekilde ayarlayabilirsiniz. Örneğin, IO.Tüm tüm GPIO kayıtlarını ve değerlerini yazdırır, bu da etkileşimli hata ayıklama için büyük bir yardımdır. Bununla birlikte, birine katkıda bulunmak istiyorsanız, çok daha kullanıcı dostu bir donanım-soyutlama katmanı için burada bir oda var.
Hızlı çoklu görev
Şimdi yanıp sönen bir LED ve seri liman baskısımız “Hello World”. Kötü bir başlangıç değil ve bunların her ikisi de ilerideki etkileşimini iyi kullanır: LED, yanıp sönmeyi yazdığınızda yanar. Forta başımdan biri, benim için, bunun gibi kelimelerin etkileşimli testleri arasında geçiş kolaylığı ve ardından işlevselliği bir çalışma sisteminde dağıtma kolaylığıdır. Bir sebep, neredeyse her türlü temel kooperatif çoklu görevi desteklemesidir. İşte ne demek istediğim.
İlk olarak, göz kırpma işlevimizi döndürelim, böylece çok yazmak zorunda kalmayacağımız için. : BB tekrar yanıp sönmeye başlayın; Sonsuza dek çalıştıracak olan “Bad Blink” için BB işlevini oluşturur. “Sonsuza kadar koş” ile ilgili sorun, RESET düğmesine fiziksel olarak basılmadan tercümanın komut satırına asla geri dönmemenizdir ve daha sonra RAM’de çalıştığınız her şey kaybolur.
Bunun yerine, bir çıkış yolu ile bir döngü içinde yanıp sönelim. : GB BLINK Tuşuna mı başladı? değin ; Klavyedeki bazı girişler olana kadar yanıp sönme komutumuzu çalıştıracak bir işlev oluşturur – geri dönüş çok önemlidir. Bu özel ilmekleme yapısı, sistemi asılı olmadan sürekli çalıştırmak istediğiniz işlevleri test etmek için çok faydalıdır. onu tutn aklın.
Blink işlevimizi twaked yaptıktan sonra, istediğimiz gibi koşmak için, bir arka plan görevi yaratalım, böylece katılımsız yanıp sönebilir.
Görev: BlinkTask
: goz kirpmak&
BlinkTask etkinleştirmek
tekrar yanıp sönmeye başla
;
çoklu görev
goz kirpmak&
Kısaca, görev: kelime, BlinkTask’yı aradığımız yanıp sönen arka plan görevimiz için bazı hafıza alanı oluşturur. İşlev yanıp sönüyor ve arka plandaki işi yapar. BlinkTask görev bağlamını kullanacağını ve çalışmaya başlaması gerektiğini bildirerek yanıp söner ve başlar. Sonra asla ayrılmadığı sınırsız bir yanıp sönme döngüsüne gider. Multitask çoklu görevi açar ve yanıp söner ve görevimizi yürütür. Çalıştırın ve hala konsolla etkileşime girebilirken LED yanıp sönüyor. Tatlı. Görevleri yazın ve iki aktif olduğunu görürsünüz: Biri yankıcımızdır, diğeri etkileşimli tercümandır.
Ancak, yanıp sönme görevi diğer eşzamanlı süreçlere ne zaman vereceğinizi nasıl biliyor? Diğerine, kelime duraklatın geçerli bağlamdan verim yapar ve bir sonraki, yuvarlak robin çoklu göreve geçer. MS işlevi, diğerleri arasında bir duraklama komutundan oluşur, bu nedenle tek görevli bir kurulumdaki engelleme gecikmesi gibi görünen, diğer görevlerinizle fevkalade iyi oynamayı önler.
Kooperatif çoklu görevle ilgili en büyük şey, tam olarak bir bağlam anahtarı olacağını kontrol etmenizdir; bu, önleyici sistemlerde bulacağınız aksaklıkları ortadan kaldırmanıza yardımcı olabilir. Dezavantajı, işlevlerinizi şimdi duraklatmayı hatırlamaktan ve sonra zamanlamayı doğrulamak zorunda olduğunuzdur. Tabii ki, bu bir mikrodenetleyicidir ve kolunun da oynaması için çok zengin bir iç kesme denetleyicisi var.
Multanımdaki çoklu görevin gerçek noktası, küçük Daemonları yazmak, test etmek ve dağıtmak için büyük bir iş akışı yapmasıdır: “her zaman açık” olmak isteyen işlevler. İlk önce, eylemi bir kez yapan işlevi yazın. İkincisi, bir kaçış kapağı ile bir döngüde test edin. Üçüncüsü, çalıştığında, kaçmayı kaldırın ve bunun için bir arka plan görevi yapın. Diğer görevler içinden bile boşta ve uyanıklığı kullanarak açıp kapatabilirsiniz. Bkz. Mecrisp’in Multitask.txt, kaynağı, daha fazla ayrıntı için.
Sıradaki ne?
Şimdiye kadar, Mecrisp-Stellaris’i, Jeelabs ‘Emello Framework’ten ek kütüphanelerle kurduk ve bazı hızlı demolar çalıştırdık. Bu sizin ilginizi çekmişse, sizi bir dahaki sefere gerçek bir yazılım oluşturmanın bir yürüyüşüne götürürüm. Mecrisp’in, RAM, giriş ve çıkışların ve etkileşimli geliştirme uygulamasının nüanslarını işlediği gibi söyleyecek çok daha fazla şey var. Forthing’in gerçekleştirilmesinin gerçekten garip yönlerinden bazıları komik şeklindeki kafalarını yükseltecek ve yine de onları sevmeyi öğreneceğiz.
Bu arada, ucuz STM32F103 panolarınızın ikili olduğumuz ile parlamasını sağlayın ve çip üzerindeki ileri çevrede oynatmak için birazcık bir miktar alıştırın. Bazı LED’leri yanıp söner. Mecrisp-Stellaris Sözlüğüne ve Bahçeli API belgelerinin etrafına bakın. Ya da sadece emrinizde tüm komutu görmek için liste yazın ve kaydırmaya başlayın.