“Temel” Mikrodenetleyicilerden ARM Cortex'e Geçiş Nasıl Yapılır?


22

8051, PIC ve AVR gibi çeşitli üreticilerin 8 bit çekirdeği ile uzun yıllara dayanan deneyime sahibim ve şimdi çözmem gereken bir Cortex M0 var. Özellikle bu , ama umarım bundan daha genel olabiliriz.

Sistemin farklı bölümlerini farklı ayrıntı düzeylerinde tanımlayan ve hiçbirini bir araya getirmediğim hiçbir belgeyle, pazarlık ettiğimden biraz daha fazla olduğu ortaya çıkıyor. Bu, her şeyi açıklayan bir veri sayfasına sahip olmakla karşılaştırılmıştır. Öncelikle belgelenecek daha çok şey olduğunu anlıyorum, ancak biçimdeki değişiklik beni bir döngü için atıyor.

Yukarıdaki web sitesinde, her bir alt sisteme ve çevre birimlerine yalıtımı iyi bir şekilde gösteren bir belge ve her bir kaydı ayrıntılı olarak tanımlayan bir tane daha var ve SDK için başlık dosyaları ve bazı karmaşık örnekler de dahil olmak üzere tüm kaynak kodlarına sahibim, ancak hala görüyorum. Herşeyin birbirine nasıl bağlandığını açıklayan hiçbir şey yok.

Cortex mimarisinin, küçük denetleyicilerin sahip olmadığı şeylerin (CPU'dan çevre birimlerine, her birinin kendi bekçi saati sayacına sahip çoklu veri yolu katmanları gibi) işlevlerini açıklayan kısa bir özeti var mı ve hepsi birbirine nasıl bağlanıyor?


Üreticiden işlemciye ait gerçek veri sayfasını / kullanım kılavuzunu öğrendiyseniz, ne tarif ettiğinizi anlayamıyorum. Bu size iyi bir genel resim ve detay vermeli. Bağladığınız sitedeki resimlerden birinden NXP işlemci gibi görünüyor. Üreticinin parça numarasına bakın ve işlemcinin kendi sitesindeki belgelerini arayın. Ayrıca ARM'ın sitesi arm.com/products/processors/cortex-m/cortex-m0.php .
DigitalNinja

Buna geri dönmedeki gecikme için üzgünüm; Diğer projelerle meşguldüm. Deneyimin sesi için @Adam'a teşekkür ederiz.
AaronD

Ve bu konuda nasıl düşünüleceğine ve pin konfigürasyonunu yazdırmayla ilgili notuna genel bakış için @Richard'a teşekkür ederiz. İkinizi de yendim.
AaronD

Aşırı fiyat gereksinimleri bulmanız dışında asla geri dönemezsiniz . Ve o zaman bile cezbedeceksiniz, çünkü oldukça az miktarda ucuz Cortex-M var.
Ronan Paixão

Yanıtlar:


40

AVR'ler ve ARM Cortex-M3 / M4 / R4 tabanlı MCU'lar üzerinde çalıştım. Genel bir tavsiyede bulunabilirim. Bu, derleme değil C de programladığınızı varsayar.

CPU aslında kolay bir parça. Temel C veri tipleri farklı boyutlarda olacaktır, ancak yine de uint8 / 16 / 32_t kullanıyorsunuz, değil mi? :-) Ve şimdi tüm tamsayı türleri oldukça hızlı olmalı, 32 bit (int) en hızlı olacak şekilde. Muhtemelen bir FPU'nuz yoktur, bu yüzden dalgalanma ve ikiye katlanmaya devam edin.

İlk olarak, sistem düzeyinde mimariyi anlama konusunda çalış. Bu, IO'lar, saatleme, hafıza, sıfırlar ve kesmeler anlamına gelir. Ayrıca, bellek haritalı çevre birimleri fikrine alışmanız gerekir. AVR'de bunu düşünmekten kaçınabilirsiniz, çünkü kayıt defterleri kendileri için tanımlanmış benzersiz global değişkenlerle benzersiz adlara sahiptir. Daha karmaşık sistemlerde, kayıtları temel bir adres ve bir kayma ile belirtmek yaygındır. Her şey işaretçi aritmetiğine kadar kaynar. İşaretçilerle rahat hissetmiyorsanız, şimdi öğrenmeye başlayın.

GÇ'ler için, periferik muxingin nasıl kullanıldığını anlayın. Hangi pinlerin çevresel sinyaller ve hangilerinin GPIO'lar olduğunu seçmek için merkezi bir mux kontrolü var mı? Yoksa periferik kayıtları kullanarak pinleri periferik moda mı ayarladınız? Ve tabii ki GPIO'ları giriş ve çıkış olarak nasıl yapılandıracağınızı ve açık tahliye modunu ve açılır / aşağıları etkinleştirmeyi bilmeniz gerekir. Dış kesintiler genellikle bu kategoriye girer. GPIO'lar oldukça geneldir, bu nedenle deneyiminiz burada size iyi hizmet etmelidir.

Saatler birkaç şeye indirgiyor. Bir saat kaynağıyla başlarsınız, tipik olarak bir kristal veya dahili RC osilatörü. Bu, bir veya daha fazla sistem düzeyinde saat alanı oluşturmak için kullanılır. Yüksek hızlı yongalar, frekans çarpanı olarak düşünebileceğiniz bir PLL kullanır. Çeşitli noktalarda saat bölücüler de olacak. Dikkate alınması gereken önemli hususlar, CPU saat frekansınızın ne olması gerektiği ve iletişim çevre birimleriniz için hangi bit oranlarına ihtiyacınız olduğudır. Genellikle bu oldukça esnektir. Daha ileri düzeyde olduğunuzda, genellikle saat kapısına dayanan düşük güç modları gibi şeyler hakkında bilgi edinebilirsiniz.

Hafıza flaş ve RAM demektir. Yeterli RAM'iniz varsa, erken geliştirme sırasında programınızı orada tutmak genellikle daha hızlı olur, böylece flaşı tekrar tekrar programlamanız gerekmez. Buradaki en büyük sorun hafıza yönetimi. Satıcınız örnek bağlayıcı komut dosyaları sağlamalıdır, ancak programınızın doğasına bağlı olarak kod, sabitler, genel değişkenler veya yığın için daha fazla bellek ayırmanız gerekebilir. Daha ileri konular arasında kod güvenliği ve çalışma zamanı flaş programlama bulunur.

Sıfırlamalar oldukça basit. Genellikle, yalnızca varsayılan olarak etkin olan bekçi saati sayacına bakmanız gerekir. Aynı kodu tekrar tekrar çalıştırdığınızda, sıfırlamalar sırasında sıfırlamalar daha önemlidir. Sorunları bu şekilde sıralamaktan dolayı bir hatayı özlemek kolaydır.

Kesintiler hakkında bilmeniz gereken iki şey var - bunları nasıl etkinleştirip devre dışı bıraktığınızı ve kesme vektörlerini nasıl yapılandırdığınızı. AVR-GCC, ISR () makrolarıyla sizin için ikincisini yapar, ancak diğer mimarilerde el ile bir kayıt defterine bir işlev adresi yazmanız gerekebilir.

Mikrodenetleyici çevre birimleri genellikle birbirlerinden bağımsızdır, böylece bir seferde bir tane öğrenebilirsiniz. Bir çevre birimi seçip, sistem düzeyindeki öğelerin bir bölümünü öğrenmek için kullanabilir. İletişim çevre birimleri ve PWM'ler saat ve G / Ç'ler için iyidir ve zamanlayıcılar kesintiler için iyidir.

Karmaşıklık seviyesinden korkmayın. Bu "temel" mikrodenetleyiciler, bilmeniz gerekenleri size çoktan öğretti. Lütfen bir şeyi açıklığa kavuşturmak için bana ihtiyacın olursa bana bildirin.


4
İyi cevap. Dikkat edilmesi gereken bir diğer şey, deneyimimde karmaşık ve az belgelenmiş arayüzlere sahip olma eğiliminde olan DMA çevre birimleridir.
Doug McClean

3
"Ve şimdi tüm tamsayı türleri eşit derecede hızlı olmalıdır." Aslında, C'deki tamsayı promosyon kuralları nedeniyle, 8/16-bit tiplerinin kullanılması çok sayıda işaret / sıfır uzantısı ile sonuçlanabilir ve Flash belleği az olduğunda bir sorun olabilir. Bu nedenle, yedeklenecek RAM varsa, daha fazla 32 bit türü veya yığın değişkenleri için en azından tercih int/ int_leastN_Ttür kullanmanın yararı olabilir .
user694733

Yorumumda bir hata yaptım. Demek istedim ki; int_fastN_ttipleri değil int_leastN_ttürleri kullanın .
user694733

@ user694733: C Standardın, kodun bellekte belirli bir boyutta yer alan ve belirli bir aralıktaki değerler üzerinde çalışabilecek, ancak bu aralığın ötesine giderken gevşek tanımlanmış semantiklerle çalışan bir tam sayı isteyebilmesine izin vermesini diliyorum. ARM gibi bir şeyde int16_t, genellikle int32_tbellekte depolanan değerler kadar hızlı olur , ancak Standart int, 17 bit veya daha büyük olan platformlarda, kod olsa bile, çoğu zaman işaret genişletme talimatları gerektiren -32767'ye int16_t x=32767; x+=2;ayarlanmalıdır x. sarma davranışını asla kullanmayın.
supercat

@supercat C standardı yalnızca imzasız türler için sarma davranışı gerektirir. İmzalı tipler için, farklı muhtemel gösterimlerden dolayı herhangi bir ambalaj UB'dir. Bu nedenle x+=2, 16 bitlik türler için komut kullanmak yasal olacaktır, çünkü derleyici bu değerin sarılmayacağını varsayar ve bu nedenle bunu kullanmak gözlemlenebilir davranışları değiştirmez. Fakat ARM'in bunu mümkün kılacak 16-bit ADD talimatı olmadığını düşünüyorum . (Yanılıyor olabilirim, ARM komut seti hakkındaki bilgim o kadar iyi değil.)
user694733

8

ARM'in mikroişlemcinin fikri mülkiyetine sahip olduğunu hatırlamakta fayda var ama aslında parça yapmıyor. Bunun yerine, üreticiler çeşitli ARM işlemci sürümlerini lisanslar ve ayrı ayrı özellik ve çevre birimleri karışımları ile kendi benzersiz parçalarını üretirler.

Bununla birlikte, eğer mimaride yeniyseniz, muhtemelen tüm bu tür mikroişlemciler için temel belgeler olan ARM'ın dokümantasyonuyla başlamak mantıklı olacaktır.

Örneğin, Cortex-M0, ARM'in web sitesinde açıklanmıştır .

Ayrıca, çok çeşitli ihtiyaç ve ilgi alanlarına hitap eden ARM ile ilgili kitapların bir listesi de bulunmaktadır .

Son olarak, belirli üreticinin veri sayfaları vardır. M0 için, Cypress, NXP ve STMicroelectronics, Cortex-M0'a dayalı birçok gerçek parça üreticisinin sadece üçü.

(Ve hayır, ben ARM için çalışmıyorum ve asla sahip değilim.)


1
Bu, OP'nin kendi başına bulabileceğinden emin olduğum bazı Cortex-M0 belgelerine bağlantı vermekten çok daha fazlasını yapmayan oldukça genel bir cevaptır.
Jay Carlson

1
Genel belgeleri bulmak için yardım isteyen soruyu doğrudan ele almaktadır. Bu cevap doğrudan ihtiyacı olan cevapları verir ve işlerin neden oldukları gibi olduğunu açıklar .
Edward

8

Büyük bir fark, satıcı tarafından sağlanan kütüphanelerin kullanılmasıdır. PIC'ler, Atmels, vb. İçin temel kütüphaneler (gpio, zamanlayıcılar, adc vb.) Çoğu geliştirici tarafından kullanılmamıştır. Deneyimlerime göre, insanlar (en fazla) kendi kodlarını yazarken onları kılavuz olarak kullanırlardı.

Ancak, ARM ile kütüphaneler neredeyse her zaman kullanılır. Üreticilerin takip etmeleri önerilen standart bir "CMSIS" vardır. Çoğu. Kod taşınabilirliğine (farklı ARM'ler arasında ve üreticiler arasında) yardımcı olur ve kodunuzu yapılandırmak için "standart" bir yöntem sunar. İnsanlar kütüphane işlevlerini görmeye ve anlamaya alışırlar.

Elbette, kayıtlara doğrudan erişen bazı geliştiriciler var, ancak bunlar outlier :)

Sorunuzu cevaplamak için, Kütüphane dokümantasyonunu okumayı çok yararlı buldum. ST, Doxygen tarafından oluşturulan büyük bir yardım dosyasıyla birlikte gelişmiş kodlara sahiptir. Her donanım modülü için tüm seçeneklerin ne olduğunu görebilirsiniz.

GPIO'yu örnek olarak kullanmak için, başlatma işlevi aşağıdakileri yerine getirir:

  • Yön (Giriş veya Çıkış)
  • pullups / Pulldowns
  • açık kolektör / itme-çekme
  • dönüş oranı
  • vb.

Seçeneklere bakarak neyin mümkün olduğunu görebilirsiniz. Ve elbette, bu seçenekleri Init fonksiyonuna nasıl geçireceğinizi de öğreneceksiniz!

Tamam, şimdi söyledim ki, ARM'inizin CMSIS uyumlu kitaplıklara sahip olmadığını görüyorum. Bunun yerine, kendi tescilli SDK'larını indirebilirler. SDK belgelerine rağmen bakmaya başlardım.

Bu ürünle evli değilseniz, daha uyumlu kütüphaneleri olan farklı bir satıcı bulmanızı tavsiye ederim. Yine de bir öğrenme eğrisine tırmanacaksınız, bu yüzden yatırımınızı daha taşınabilir hale getirebilirsiniz ...

ARM'ler eğlencelidir! Geriye bakmadım.


"PIC'ler, Atmels, vb. İçin kütüphaneler çoğu geliştirici tarafından kullanılmadı." Bunun nereden geldiğinden emin değilim. AVR'yi değil sadece PIC'leri kullandım, ancak örneğin USB ana bilgisayar arayüzü veya TCP yığını veya SD kart dosya sistemi için kendi kitaplığımı yazmak istemem. Microchip'in bütün bunlar için kütüphaneleri oldukça yeterli görünüyor.
tcrosley

Ah, @tcrosley, kesinlikle haklısın. Ben sadece temel çevre birimleri kapsamındaki işleve bakın çalışıyordu: vb GPIO, zamanlayıcılar, adc,
bitsmack

Kabul ediyorum, genellikle GPIO'ya, zamanlayıcılara, saatlere ve UART R / W'ye doğrudan erişirim. Ben bazen her zaman değil I2C, SPI, ADC ve UART kurulum ama onların kütüphane çağrıları kullanın. PIC (ve özellikle PIC32) veya ARM'den bahsettiğiniz kayıtların çoğu.
tcrosley

OP'nin denetleyicisi için geçerli olmasa da, bu sorunun bu soru için listelenen en pratik cevap olduğunu düşünüyorum. AHB'yi veya NVIC'yi anlamadan oldukça iyi bir gömülü mühendislik yapabileceğinizi düşünüyorum.
Jay Carlson

@JayCarlson Teşekkürler! Bu cevaba yaptığınız düzenleme reddedildi, başkalarının gönderilerini bu kadar önemli bir şekilde değiştirmememiz gerekiyordu. Ama bu gerçekten iyi bir bilgi oldu! Bunu kendi cevabınız olarak göndermenizi öneririm, bu yüzden insanlara yardım edecek ve ayrıca oylanacak :)
bitsmack

5

Hareket etmek için iyi zaman; 8 bit hızlı bir şekilde ölüyor; Oldukça yetenekli bir 32-bit ARM mikrodenetleyici (hatta USB!) bir STM32F103 ile (örneğin) 5 dolarlık bir anakart alabiliyorsanız, hiç şüphe yok.

Şimdiden bazı mükemmel cevaplar aldınız, ancak öncelikle "montajı unut" ve neredeyse "cpu'nun nasıl düşük seviyede çalıştığını umursamayı unuttum" derdim - bir gün içinde kazmanız gereken bir köşe davası olacak (belirli bir optimizasyon veya hata ayıklama için) ancak ARM çekirdeği C kodunu son derece iyi çalıştırır (tasarım gereği) ve nadiren bağırsakların içine girmeniz gerekir.

Bu, kafanızı derleyicilerle (ve özellikle linkler ve makefiles) sorunlara karşı, belli belirsiz hatalarınızı engellemek için harcayacağınız bir zaman harcayacağınız anlamına gelir;

ARM'lerin nasıl çalıştığını (yani ARM cpu kitaplarının) gerçekte yoğunlaştırırsınız ve gerçekten optimize etmeniz gereken güne kadar çok ilginç değildir (ve 32 bitlik kayıtların ve PLL'iniz olduğunda ne kadar seyrek olduğuna şaşıracaksınız. d CPU saati 100 mhz).

"Eski skool" ARM komut seti, daha yeni olan "Thumb2" den çok daha kolay bir sökme işlemi yapmaktan çok daha kolaydır - bu da çoğu modern mikrodenetleyici seviye ARM'lerinde (Cortex) bulacağınız şeydir - fakat yine de meclis dili talimatlarının içindekiler çoğunlukla arka planda kaybolur; doğru araç setine sahipseniz (özellikle kesme noktaları / tek adımlı vb. ile iyi bir kaynak düzeyinde hata ayıklayıcı vb.) sadece ARM olarak hiç umursamıyorsunuz.

32 bitlik kayıtların ve 32 bitlik veri yolu genişliklerinin dünyasına girdikten ve çipte kullanmak istediğin her şey bir daha 8 bitlik işlemcilere geri dönmek istemeyecek; Temel olarak, "kolay almak" ve kod yazmanın verimli olmaktan daha fazla okunaklı olması için genellikle bir ceza yoktur.

Ancak ... çevre birimleri ... evet ve ovmak.

Modern MCU'larda oynayacağınız tonlarca şey alıyorsunuz ve bunların çoğu oldukça hoş şeyler; sıklıkla AVR, PIC ve 8051 çip üzerinde çevre birimlerinin çok ötesinde bir karmaşıklık dünyası bulursunuz.

Bir programlanabilir zamanlayıcı? Hayır, sekiz tane al! DMA? Programlanabilir öncelik ve patlama modu ve zincirleme modu ve otomatik yeniden yükleme ve .. ve .. ve ... ile 12 kanal hakkında nasıl ...

I2C? I2S? Düzinelerce iğne muxleme seçeneği? Çip üzerinde flaşı yeniden programlamanın on beş farklı yolu var mı? Emin!

Sıklıkla kıtlıktan çevre birimlerine ziyafet yapmaya gittiğinizi hissedersiniz ve hayranlıkla kullanacağınız ancak zor kullanacağınız bir çipin tüm parçalarının bulunması yaygındır (bu nedenle saat kaplaması).

Çip üstü donanımın miktarı (ve bunun sadece bir satıcının çip satırındaki varyasyonları) günümüzde oldukça şaşırtıcı. Bir yonga satıcısı elbette IP bloklarını yeniden kullanma eğiliminde olacaktır, bu yüzden belirli bir markaya aşina olduğunuzda daha kolaylaşır, ancak "bugünlerde boklar olur".

Çevre birimleri ve bunların etkileşimleri (ve DMA ve kesmeler ve otobüs tahsisi ve ve ve ...) herhangi bir şey (vesileyle, değil ve SO kompleks ise tam mühendisler sıkça ARM MCUs favori aralığa sahip olması veri sayfalarında açıklandığı gibi) ve Çevre birimlerine ve geliştirme araçlarına aşina oldukları için basitçe buna bağlı kalmak isteme eğilimindedir.

İyi kütüphaneler ve geliştirme araçları (örn. Hızlı bir şekilde derleme + uygun bir hata ayıklayıcıyla hata ayıklama döngüsü) ve çok sayıda çalışma örneği kod projesi, bugünlerde ARM MCU seçiminiz için kesinlikle çok önemlidir. Görünüşe göre çoğu üreticinin son derece ucuz değerlendirme panoları var (

Fark ettiğiniz gibi eminim, bir kez ARM'lerle ve SOC seviyesine (örneğin Raspberry Pi / etc stil SOC'ler) mikrodenetleyici seviyesinin üzerine çıktıktan sonra kurallar tamamen değişiyor ve tüm bunlar hangi Linux türünden geçeceğinizle ilgili. kaçmak, ufak tefek istisnalar dışında, başka bir şeyi denemek için havlıyordun.

Temelde; Bu konser için sizin için önceden seçilmiş olan CPU'ya bakılmaksızın, birkaç farklı satıcıdan (TI, STM, Freescale ve daha fazlası aklınıza gelir) bir kaç süper ucuz Cortex tabanlı değerlendirme kurulu satın alın ve sağlanan örnek kod ile bir kesmek.

Son öneri; Sayfayı-ya-üç pin-muxing seçenekleri açıklanmaktadır veri sayfasında bulduktan sonra kesin birlikte çalıştığınız parça numarası çipi, bunu çıktısını ve duvara sopa isteyebilirsiniz. Bir projenin geç bir kısmında, çevre birimlerinin belirli bir kombinasyonunun pin muxing nedeniyle imkansız olduğunu bulmak bazen eğlenceli değildir ve bazen bu bilgi öylesine gömülür ki, gizlemeye çalıştıklarına yemin ederdiniz :-)


hızlı bir ek - eğer projeniz en basit denetleyiciden çok daha fazlaysa, bir RTOS kullanmayı düşünün - seçtiğinizde bir öğrenme eğrisi var, ama en küçük ARM'ler bile bugünlerde çok iş parçacıklı bir işletim sistemi çalıştırmak için bol miktarda yetkiye sahipler. Şahsen ben ChibiOS'un henüz zayıf yetenekli (özellikle güzel bir çevre kütüphanesiyle geldiği yerde STM32'de çalışıyor) mükemmel bir karışımı olduğunu buldum, ancak bir çok seçenek var.
Richard Aplin

4

Ayrıca AVR'dan geliyorum ve şimdi genellikle STM32 (Cortex-M) ile bağlı kalıyorum. İşte yeni başlayanlar için önerdiğim şey ve başladığımda kendi zorluklarımı yansıtıyor:

  1. Hata ayıklayıcılı veya en az bir JTAG konektörü olan bir tahta alın (ve ardından bir JTAG hata ayıklayıcı alın). Etrafında çok ucuz olanlar var ve onu kullanarak çok zaman kazandıracak.

  2. Her şey dahil iyi bir IDE alın. CooCox CoIDE'yi uzun zaman önce tavsiye ederdim . O zamandan beri durdu ve gelişimi yeniden başlattı, bu yüzden şimdi nasıl olduğundan emin değilim. "İyi bir IDE", temel Hello World LED'ini kısa sürede yanıp sönmenize olanak tanır.

  3. "İyi bir IDE" üreticinin CMSIS başlıklarını kurmalıdır. Bu temelde C / C ++ programlarının daha kolay yazılmasını sağlayan, düz sayılar ve işaretçiler yerine değişken adlarıyla kayıt defteri haritalarıdır.

  4. Mutlak en iyi performansa ihtiyacınız yoksa, üreticinin çevre kitaplıklarını kullanmayı deneyin. Öğrendiğin için aslında şimdilik değilsin. Daha sonra daha fazla sıkmanız gerektiğini fark ederseniz, ne yaptığını görmek için kütüphane koduna bakın. Kütüphanelerle ilgili iyi bir şey, aynı üreticiden aynı kodla birçok farklı yonga kullanmanıza genellikle izin vermeleridir.

  5. AVR'den farklı olarak, ARM yongaları çevre birimleri devre dışı bırakılmış olarak başlar. Önce onları etkinleştirmeniz gerekir. İyi bir çevre birimi kütüphanesinde, çevre birimlerinin nasıl kullanılacağına ilişkin örnekler olacaktır ve cihazın veri sayfasından daha fazla bilgi edinebilirsiniz. Bu yüzden, kullanmadan önce saatleri ve çevre birimlerini etkinleştirmeyi unutmayın. Evet, G / Ç bağlantı noktaları bile çevre birimleri olarak kabul edilir.

  6. Öğrenirken kodlayın. Her şeyi bir kerede çiğnemeye çalışmayın, çünkü bu gerçekten oldukça karmaşık. Saat ağacını (APB, AHB, vb. Otobüsler) ve saatlerin ve saat bölücülerinin nasıl etkileşime girdiğini öğrenerek başlardım. Ardından IDE'nin cihazınız için linkleyici komut dosyalarını ve başlangıç ​​kodunu nerede sakladığına bakarım . Linker betiği hafızayı nasıl düzenlediğinizle ilgilidir (RAM, flash, ISR vektör tablosu vb.). Başlangıç ​​betiği programınızı ayarlar (global değişken başlatıcıları flaştan RAM'e kopyalamak gibi şeyler). Bazı IDE'lerde ASM'de başlangıç ​​komut dosyaları, bazılarında C ise var. Bazen Google’ı bir diğeri için tercih ettiğiniz dilde kullanabilirsiniz.

  7. En kısa zamanda hata ayıklayıcısını alın. Başlangıçta bir hata yapmanız oldukça yaygındır, bazı şeyleri (genellikle donanımın başlatılmasını) yapmanız gerekenden farklı bir sırada yapmak. Bu bazen while(1);, programınızı durduran sonsuz döngüye (bu ISR için varsayılan uygulama) götüren bir ISR istisnasını tetikler ve hata ayıklayıcıyla bile izlenmesi zordur. Bir hata ayıklayıcı olmadan düşünün.

  8. Bir hata ayıklayıcı hakkında konuşmak, UART'ı da çalıştırmaya çalışın, ardından okumak için seri USB adaptör kullanın. printf()hata ayıklama her zaman yararlıdır :-)


3

8051, AVR veya PIC'de fazla çalışmadım. Ancak son zamanlarda ARM Cortex MX işlemcilere bakmaya başladım. Bu nedenle size 8051, AVR veya PIC'den geçiş hakkında çok fazla şey söyleyemem, ama çoğunlukla başlangıç ​​seviyesinden bakıyorum.

ARM®Cortex ™ -M4 işlemci Harvard mimarisine dayanır, bu nedenle ayrı veri ve talimat otobüsleri vardır. Aşağıda üst düzey bir görüntü var.

görüntü tanımını buraya girin

Bu hafta NXP temsilcilerimiz tesisimizi ziyaret edecek. NXP ARM-Cortex Mx kaynakları için onlarla kontrol edeceğim ve buraya göndereceğim. Freescale, ARM® Cortex®-M Çekirdeklerini temel alan Kinetis Low Power 32-bit Mikrodenetleyiciye (MCU) sahiptir , ayrıca ARM işlemcileri öğrenmede benzer kılavuzları olduğunu anlıyorum. Ne yazık ki onları araştırmıyorum.


Referanslar:

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.