STM32F4 ve HAL


23

Bu yüzden STM32F407 (ARM için yeniyim) ile bir süredir deneyimliyim ve ST'nin Standart Çevre Birimleri Kütüphanelerini durdurduğunu düşündüğü için HAL kütüphanelerini kullanarak basit bir uygulama yazmaya karar verdim. Öyleyse sorum şu, HAL'deki nokta nedir? StdPeriph işini yapmıyor muydu? Neden onu HAL için durdurdular? Bana göre HAL tam bir karmaşa gibi görünüyor.

Belgeler AWFUL, en azından StdPeriph için istediğinizi kolayca bulabilecek kadar iyi organize edilmiş eksiksiz bir referans var ( http://stm32.kosyak.info/doc/ ). HAL için görünüşte rastgele bir yapıya sahip olan berbat bir PDF ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ) vardır. Herhangi bir bölümü okumak, örneğin bir çevre birimi ile ilgili olarak, onu yapılandırmak ve doğru şekilde özelleştirmek için gereksinimleri anlayamıyorum. Bir referanstan çok, bir şeyi unutmak istemeyen birinin kişisel notlarına benziyor.

CubeMX'i GPIO'yu başlatmak ve çevre birimlerini yapılandırmak için kullanabileceğimi biliyorum, ancak amacım bunu kendim yapmak, böylece işlemlerini daha iyi anlayabiliyorum, benim için hepsini yapacak bir yazılımın olmaması. Yanlış bir şey mi yapıyorum? İçimdeki ARM acemi beni şaşırtıyor mu? Yoksa mevcut belgeler kötü mü?


ChibiOS gibi bir şey size daha uygun olabilir mi? Bir RTOS'ları var, ancak RTOS'suz kullanabileceğiniz çok iyi bir HAL'leri var.
IgorEE

ST, Standart Çevre Birimleri Kütüphanelerini tam olarak durdurmadı, ancak yeni aileler için yeni sürümleri yayınlamayacaklar. (Forumlarında bir yerde ama bulamıyorum), serbest bırakıldıkları aileler için SPL'yi desteklemeye devam edeceklerini (STM32F4 dahil) belirttiler. ARM'te yeni olduğunuz için, muhtemelen HAL ile gitmek en iyisidir. SPL kullanarak zaten yazılmış birçok modül var, bu yüzden geçiş bir acı olacak ve ben onu kapatıyorum. Bu kötü, çünkü yeni bir aile kullanmaya karar verdiğimde
Tut

Bu e-kitap: leanpub.com/mastering-stm32 , yeni başlayanlar için STM32 dünyasına (ancak profesyonellere yönelik) iyi bir giriş.
Lorenzo Melato

Yanıtlar:


13

Kendi kütüphanelerinizi oluşturmak oldukça basittir. Kayıt defteri spesifik dokümantasyonu oldukça iyi, çoğu çevre biriminin kurulumu kolay değilse. Kütüphanelerini kullanmayı çok daha acı verici buluyorum. ama belki de bu sadece benim. Bu st, nxp, ti, atmel için bir kaç isim için geçerlidir (intel ve microchip için çok fazla değil).

Neden kütüphaneleri değiştiriyorlar, herhangi bir sayıda sebep olabilir, bazı yeni patronlar devraldı, bazı bölümler bir başkasını devraldı. Pazarlama, ürün için yeni bir imaj istedi. ElectronS'in dediği gibi, metalden istekli ya da yapamayan kullanıcıları çekmek için donanımdan daha fazla soyutlama girişimi olabilir. Daha ileri gidip muhtemelen Arduino fenomeniyle rekabet etmeye çalıştıklarını söylerdim. Hangi mbed ve herkes her zaman yapmaya çalıştı ve başarısız oldu (Arduino'dan önce bile).

Her durumda, donanımdan uzaklaştıkça daha fazla şişer ve yavaşlar, böylece rom, ram ve mhz için birim başına daha fazla harcamanız gerekir. Sadece aynı miktarda zamanlamayı harcamak için mi? Sadece farklı mı yapıyorum?

PIC dünyasından geldiğinizi söylüyorsunuz, şimdi araçlarla iyi bir iş çıkardılar, çip dokümanları en kötüsü olsa bile korkunçtu. kütüphanelerle ve kum havuzlarıyla telafi ettiler.

Günün sonunda, çeşitli seçenekleri deneyin, araçlarının nasıl karşılaştırıldığını görmek için rakip ürünleri deneyin. Bunların birçoğu sadece mantıklı olup olmadığını görmek için ücretsiz olarak yapabilir ve bir şeyler derleyebilirsiniz. Belki bir komut seti simülatörü bile kullanabilirsiniz. Sizin için uygun olanı bulun.

Unutmayın, korunmamış kütüphaneler seçeneği daima HER ZAMAN kullanımınıza sunulur. Hangi araç zincirini kullanabileceğinizi, hangi ana bilgisayar işletim sistemini, ne kimliğini, editörünü vb. Kullanarak sınırlı değilsiniz. Eğer seçenekleri bu bağlamda son derece sınırlıysa, parçaların programlanmasında size bağlı kalabilirler veya eğer yapabilirseniz satıcı.

Bunun gibi bir çip ürününü satmak için, hepsinin ya da birbirine yapıştırdıkları ücretsiz eşyaların olup olmadığı konusunda bir geliştirme ortamı sağlamalıdır. Ve bir çeşit kütüphaneyi bir araya getirme eğilimindedirler. Sadece yeterince iyi görünmek zorunda ve yanıp sönen örnek, ya yönetiminizin ya da donanım ekibinizin ürünlerinde tasarım yapabilmeleri için yeterince iyi çalışıyor, o zaman tahta ürününüz duvardan yazılıma atıldığında, ağrı ne zaman? varır ya da gelmez. Neredeyse işe yararsa, ancak yonga satıcısı için büyük bir kazançtır, çünkü şimdi bu son küçük parça için teknik destek ödeyeceksiniz. Bu yüzden neredeyse orada olmak en iyisidir ama tam olarak değil.

Çip satıcılarının yalnızca tasarımın kazanması için yeterince iyi görünmesi gerekiyor. Yeni ve eski müşterileri çekmek için ürünü geliştirmeye (? Değiştirerek) devam etmeleri gerekir. Bu yüzden, ne kadar uzakta ve kaç tane önceki kütüphanenin desteklemeye devam ettiğini belirten fazlalıkları olacaklar. Bu yüzden hemen alıştığınız herhangi bir kütüphane sonunda ortadan kalkar. Bu yüzden uyum sağlamayı öğrenin (veya eşyalarını kullanmayın ve süresiz olarak destekleyebileceğiniz kendi malınızı kullanın). İdeal olarak, uygulamayı her ürün için yalnızca bir kez geliştirmeniz, ürün yazılımınızı mükemmel hale getirmeniz (üçüncü taraf kitaplıkları kullanıyorsanız iyi şanslar) yapmanız ve geri dönüp bir araç bulursanız araç zincirini yükleyecek bir bilgisayar bulmanız gerekmez. bir kopyasını alın ve bu eski kütüphaneyi nasıl kullanacağınızı unutmayın. Unutmayın, yalnızca kaynak kodunuzu kaydetmeniz değil, aynı zamanda tüm araçlarını ve belgelerini de kaydetmeniz gerekir.

Kütüphaneleri yalnızca bir araç zincirinde, bir belki iki IDE altında ve bazen sadece Windows'ta ve belirli sürümlerde desteklenir. Yine, eğer kendi işinizi yaparsanız, kesinlikle ARM için değil, bu sınırlamaların hiçbirine sahip değilsiniz. Bir şeyleri nasıl yaptıklarını görmek için kütüphanelerinin herhangi birini / tümünü her zaman okuyabilirsiniz. Ancak bu genellikle çok korkutucu, A takımı geliştiricilerini kütüphaneler için kullanmıyorlar, görüşme adaylarına bu kodun neyin yanlış olduğunu sormak için birkaç kod satırı çıkardım.

Hem silikon hem de yazılım tarafında zamandan ve emekten tasarruf etmek için aynı ipi çok sık geri dönüştürürler, bu yüzden çevre birimin çiplerinden birinde nasıl çalıştığını gördükten sonra genellikle çiplerinin diğerlerinde de aynı şekilde çalışır. Evet, saat sistemleri kütüphaneleri ile veya kütüphaneleri olmadan zor olabilir. Çipleri tuğlalama şansı yüksek, bu benim çip / tahta tuğlalarımın çoğunun gerçekleştiği yer. Talaşlarının nasıl çalıştığını anlamada yardımcı olur, örneğin AVR'ler, hepsi sıfır olmasa da çoğu da olmasa da yeniden programlanabilir, böylece yeniden programlamak için gereken pinleri karıştıran ya da yeniden programlamak için gereken mantığı askıya alan herhangi bir kötü kod ne olursa olsun, bu çipleri yeniden programlayabilirsiniz. Bu satıcılardan bazıları (st bir tane) kayış kullanarak seçebileceğiniz bir dahili önyükleyiciye sahiptir (örneğin, st dünyasında BOOT0),

Tek beden herkese uyar, kimseye uymaz. Yazılım için özellikle doğrudur. Yani, donanımı soyutlama girişimi, onu yavaşlatır ve şişirir. Belki daha büyük bir çip alıp üzerine linux çalıştırın, eğer gerçekten peşindeyseniz. Bunların çoğu geliştiricilerin bir sonucu olarak, ellerini kirletmek istemiyor, bu yüzden temelde bunu sorduk ve sağlamaya çalışıyorlar.

Yine, kendinizi st veya herhangi bir satıcıya kilitlemeyin (çok geç olmadığı sürece ve yönetim ve donanım ekibi size yapışmamışsa, stm32 ürünlerinin hoş ve kullanımı kolaydır). Dükkânları dolaşmak. TI, korteks-m4 sepetine çok miktarda yumurta koyuyor. Mbed işini bir dizi kol ürününün yanı sıra satıcı tarafından desteklenen çözümler üzerinde de yapabilirsiniz.

Her zaman güvenebileceğiniz bir şey, zaman zaman kütüphaneleri değiştirecekleri ve sonunda alıştığınızı desteklemekten vazgeçecekleridir.


Kendi kütüphanelerinizi geliştirme konusundaki büyük tartışma, neredeyse ikna oldu ve denemek istiyorum, stm32fxx referans kılavuzundan başka neye ihtiyacım olacağını düşünüyorsunuz? ayrıca kol çekirdek kılavuzunu da okumalı mıyım? CMSIS kullanacak mıyım? Kayıtlara ve hafızaya nasıl erişeceğim? daha fazla detaylandırabilir veya nasıl başlayacağınıza dair bir örnek verebilir misiniz
ElectronS

düşünecek daha çok şey var. Her kod satırı risk ekler. Patronunuza, kullandığınız her bir bölümü incelemeden, onlarca yüzlerce binlerce satırdan oluşan bir kod kodu kullanmayı planladığınızı açıklayın. özellikle soyutlarken kod katmanları, ikili dosyaların daha büyük olmasına ve performansın düşmesine neden olur. Bu yüzden yine patronunuza 10 milyon birimlik bir ürünün ekstra 35 kuruşa ya da 3,5 milyon dolara mal olacağını, çünkü bir kütüphane kullanmayı seçtiyseniz tembel olmanıza neden olduğunu açıklıyoruz.
old_timer

Patronunuz, sizi bu tür bir parayla değiştirmek için bir halk ordusunu işe alabilir, her kod satırını gözden geçirebilir, böylece 10.000 birim alamazlar ve riskli yazılım kullanarak ortaya çıkan bir yazılım hatası yüzünden hepsini çöpe atmaları gerekir. ve daha az güç kullanan ve bir pil şarjında ​​daha uzun süre çalışan, daha düşük bir saat hızında daha düşük maliyetli olan daha küçük bir parça kullanın. bazen çabaya değer. ve tabii ki bazen değil.
old_timer

belirttiğiniz daha fazla puan için teşekkürler, ancak başlamak için en iyi şekilde soruma cevap verebilir misiniz? kayıt isimleri ve hafıza yerleri için CMSIS ve HAL.
ElectronS

"En iyisi" yoktur, bu kelimeyi kullanmak onu kişisel düşünceye dönüştürür, gerçeği değil. Sadece birini seçin ve başlayın ya da benim yaptığım gibi yapın, bir yol bloğuna çarpana kadar birini deneyin, sonra diğerini ve diğerini deneyin ve her yol bloğunu bir ya da tümü kırılıncaya kadar bir sonraki yol bloğuna geri itin.
old_timer

14

HAL kütüphaneleri ile olan hayal kırıklığınızı çoğumuzun paylaştığını söyleyeyim, gerçekten kötü ve belirsiz bir şekilde belgelendiler ve hala yeni birçok hata içeriyorlar.

Öyleyse sorunuzu yanıtlamak için ST neden HAL’de karar kıldı?

  1. Düz İngilizce dilinde yazılım geliştirme ve kodun mikro denetleyiciden bağımsız olmasını istedikleri anlamına gelen bir donanım soyutlama katmanı oluşturmak istiyorlar, bu nedenle bugün stm32f4 için bir kod yazarsanız ve birkaç yıl sonra stm32f7'ye geçmeniz gerekir kolay olacak ve kod oldukça modüler olacak.

  2. Bu aynı zamanda, yazılım programcısı gibi daha fazla geliştiricinin, donanımın bir görevin nasıl başarıldığına dair derinlemesine ayrıntılara girmeden veya mikro denetleyiciyle çalışmasına olanak tanır. ST ve TI gibi şirketler (şimdiden bu yola başlayarak), FAST kodunu geliştirmek için yüksek seviyeli sürücüler kullandığınız PC kodu geliştirmeye benzer yerleşik bir geliştirme yapmaya çalışıyorlar. Sürücüleri ve kütüphanelerinde sakarlıklar ve optimizasyon eksikliği, ARM cihazlarının yüksek performansı ile telafi edilir.

  3. HAL kütüphanelerini kullanıyorsanız, STM32cubeMX'in harika bir araç olduğunu düşünüyorum, çünkü en çok zaman alan iş çevre birimlerini başlatmaktır ve şimdi kullanıcı kodunu etkilemeden kolayca değiştirilebilen görsel bir arayüzle kısa sürede yapabilirsiniz Kodunuzu uygun yere yazarsanız) Stm32cubeMx yazılımını kullanabilir ve daha sonra kodu gözden geçirebilir ve her bir işlevi nasıl ve neden kullandıklarını anlamaya çalışabilirsiniz; bu şekilde, bir egzersizi çözmeye çalışıyorsunuz ve yandaki büyük IMO.

  4. ARM çekirdeği sessiz karmaşık olduğundan, doğrudan yazmaçları (montaj biçiminde C yazma) gibi 8 bitlik mikro denetleyicide kullandığımız eski yöntemler mümkün değildir, zaman alıcıdır ve karmaşık mimariden dolayı kodun korunmasını zorlaştırır (kontrol edin. örneğin saat ayarı)


6
Bunların hepsi çok anlaşılabilir bir durum ancak tüm bunlar StdPeriph için de geçerli değil mi? Yani, zaten bir donanım soyutlama kütüphanesi IS, yani eskisini geliştirmek yerine yeni bir tane yaratmanın amacı nedir? Gerçekten merak ediyorum, ARM için çok yeniyim, uzun yıllardır PIC kullanıyorum.
John

Hatta daha çok CMSIS uyumlu kütüphaneler için
Scott Seidman

1
@john, bildiğim kadarıyla HAL, standart kütüphanelerden daha soyutlanmış ve daha az donanım kullanıyor.
ElectronS

12

Bunun uzun ve fikirli olacağını biliyorum, ancak HAL'ı kullanarak yeni ürünümüzü (başarılı bir şekilde) piyasaya sürdüğümüz için, düşünülmeye değer olduğunu düşünüyorum. Ayrıca ST için çalışmıyorum, HAL'in her parçasından nefret ediyorum, neredeyse StdPeriph ile projeyi yeniden başlattım, acıyı hissettim - ama şimdi nedenini anlıyorum.

İlk olarak biraz arka plan. Ultra düşük güçlü telemetri sistemleri geliştiriyoruz ve ürünümüz bir STM32L1 tarafından destekleniyor. Donanım yazılımı üzerinde çalışmaya başladığımızda, (çıplak metal) ST cihazları için genel seçimler yaptık: her şeyi el ile yapın, StdPeriph kütüphanelerini kullanın ya da HAL ile devam edin. ST adamları bizi HAL ile gitmeye ikna etti - biz de öyle yaptık. Acı vericiydi, yazılımdaki hatalar etrafında çalışmak zorunda kaldık (I2C bölümü bir süredir bizi çıldırttı) ve hala genel mimariden hoşlanmıyorum. Ama işe yarıyor.

Masaüstünden gömülü hale getirdiğimde, bir yıldan biraz daha uzun bir süre önce, adlandıramadığım, hatta kavrayabileceğim garip bir şey yüzünden şaşkına uğradım. Zamanla, neler olduğunu - daha doğrusu - neler olduğunu anlayabildim : gömülü dünya geçiş halinde. Silikon her gün daha ucuza geliyor ve MCU'lar daha güçlü ve çok yönlü. Boyutları ne olursa olsun, güç gereksinimlerinden bağımsız olarak, daha fazla sayıda cihaz genel MCU'lara dayanmaktadır. Oyuna giderek daha fazla şirket katılıyor ve çeşitli geçmişlere sahip yeni geliştiricilerden oluşan bir gruba katılıyor. "Ortalama" kültür, geleneksel "programlama sihirbazı becerileri olan EE adam" dan "belirsiz donanım bilgisine sahip SW adam" dan uzaklaşıyor.

Bunun iyi ya da kötü olması önemli değil. Öyle olur bazen. Aslında, aynı zamanda, yazılım dünyasında bir defadan fazla oldu. 2000'deki web patlaması PHP / MySQL yenilerini çekti - onlara CPU'da kayıtlar olduğunu söyleyin, "Linux kullanıyorum, bu yüzden işletim sistemimde Kayıt Yok" diye cevaplayacaklar. Daha önce, korumalı modda çalışan çok kullanıcılı işletim sistemleri, tembel geliştiricilerin tüm kariyerlerinde hiçbir zaman bir ISR kurmalarını ve iyi olmalarını sağladı . Daha önceleri klavyeler ve ekranlar, kart delicileri ve yazıcı üreticilerini delirtti.

Ve evet, şu anki trendler beni kişisel olarak üzüyor, zira onları en yeni teknolojilerle heveslendiren cahil geliştiriciler görürken, onları tarihe bağlayamıyordum. 2015'te WebGL ile Javascript'te bir oyun kodladığımı daha genç gördüğümde, "Yeni bir şey yok! 1995'te geri Cfc ve 3Dfx SDK ile aynı şeyi yaptım!" Diye bağırmak istiyorum. Hikayenin söylemediği şey, oyununun cep telefonumda çalıştığı, oysa benim için bir oyun bilgisayarına (ve bir yükleyiciye ihtiyacım vardı ve ben de güncellemeleri web üzerinden zorlayamadım). Gerçek şu ki, geliştirebildiği bir ayda oyun, altıda veya on ikide aynı şeyi yaptım.

Açıkçası, ne ST, TI, ne Intel ne de cips üreten kimse sırayı kaçırmak istemiyor. Ve haklılar. HAL, ST'nin tepkisidir ve aslında sadece iş veya pazarlama tarafında değil, mühendislik tarafında da oldukça sağlamdır. Sesin nedeni, adında yatıyor:

Donanım Soyutlama Katmanı

Başka bir şey varsa, hatırlamanız gereken şey budur. HAL, donanımdan uzaklaşma çabasıdır. Bu iyi bir mühendisliktir çünkü işlevselliği detaylardan ayırmamızı sağlar. Katmanlama, karmaşık programların geliştirilmesine izin veren şeydir - biri üst üste, donanımdan aşağıya doğru bir soyutlama. Soyutlama, aslında karmaşıklığı yönetmemiz gereken en güçlü araçtır . Bu gezegendeki herkesin belirli bir CPU için bir web tarayıcısını bir araya getirerek programlayabileceğinden çok şüpheliyim.

Kültürel değişimin hazmetmesi gerçekten zor, ama bir tane daha düşünmeliyim ki , web uygulamaları geliştirmek için Knuth'un Bilgisayar Programlama Sanatını okumam gerekmiyor , EE dünyası gömülü kod geliştirebilecek (ve yapacak!) Yeni kişiler olduğunu kabul etmeli. Lanet olası Kutsal Referans El Kitabını okumadan .

İyi haber şu ki, yeni oyuncular eski oyuncular için daha az iş anlamına gelmiyor - tam tersi IMHO. İşler "işe yaramadığında" kimi arayacaklar? RTFM'niz varsa (bunlardan farklı olarak) ve bu belirsiz yapılandırma kaydının her bir bitinin ne yaptığını biliyorsanız, bir avantaja sahip olursunuz.

Okumalarınız ve deneyleriniz arasında sadece HAL ile gidin. Yeni MCU? Sorun değil. Yeni MCU hattı? Hiç sorun değil (CubeMX ile bir günde bir STM32F4 Nucleo üzerinde bir test kodladım ve daha sonra sadece cihazımıza taşıdım ... sadece doğru hissettim ). Birim testleri için alay mı ediyorsun? Sorun değil. Liste uzayıp durur, çünkü soyutlama iyidir.

Tabii ki, HAL kendisi% 100 tamam değil. Belgeleri berbat (ancak RT F HRM'niz var, değil mi?), Böcekler var, ST bize bir beta sürümü bıraktı (bugünlerde oldukça standart görünüyor) ve kamu desteği şaka yapıyor. Ancak HAL'i serbest bırakmak daha da kötü olurdu.


Nereden geldiğini anladım. Anladığım kadarıyla, şeyler (ne yazık ki) Arduino'ya gidiyor, programcıdan daha yüksek seviyedeki yazılım insanlarını donanım programlamaya çekecek kadar gerçekte olanı gizlemeye çalışıyorlar ve bu HAL gibi kütüphanelerin arkasındaki sebep. Ne kadar kötü belgelendiğini ve tam bir karmaşa olduğunu görünce, yakın zamanda bunu başaracaklarını sanmıyorum.
John,

@John: HAL herhangi bir "gerçeği" gizlemez. Tweak için her şey var. Tüm parçalar isteğe bağlıdır - örneğin kayıtlara erişmek için yalnızca makroları veya yalnızca belirli bir sürücüyü (örn. I2C) veya ISR'ler ve saat yapılandırması dahil her şeyi kullanmak isteyebilirsiniz. Senin seçimin. Ancak, belgelerin çok fazla berbat olduğunu kabul ediyorum. (ST'ye söyledim ve BTW üzerinde çalıştıklarına söz verdiler)

Aynı şeyi yeni araçlarla da yapıyoruz. Çünkü yeni araçlar işi daha kolay ve daha hızlı yapmayı vaat ediyor, böylece maliyet etkin. Fakat biz hala aynı şeyi yapıyoruz, çünkü insanlar 2095 veya 1995'ten bağımsız olarak hala aynılar. Seçim bize bıraktığımız yeni araçlara uymamız ya da zaten tanıdık araçlarımızla kalmamız.
Jony
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.