Soru:
Gömülü Geliştirme - Bir Sonraki Adımı Atmak
NickHalden
2011-06-30 23:52:20 UTC
view on stackexchange narkive permalink

Size bildiklerimi söyleyerek başlayacağım. O zaman size, gömülü sistem geliştirme hakkında her şeyi bilmenin bu büyülü diyarına gitmek istediğimi söyleyeceğim. O zaman oraya varmak için sonraki adımlarımın ne olması gerektiğini soracağım. Bu yanıt oldukça bilgilendirici, ancak biraz daha ayrıntılı olmaya çalışıyorum:

Bildiklerimi

Hadi bakın, C ve C ++ konusunda adilim. Açıkçası, bu dillerle daha iyi olmak istiyorum ama bu noktada geliştirmenin en iyi yolunun onları kullanmaya devam etmek ve ben yazarken kodumu sürekli olarak geliştirmeye çalışmak olduğunu düşünüyorum. Artık herhangi bir öğrenme alıştırmasını sadece C öğrenmeye ayırmanın çok yararlı olacağını sanmıyorum.

Basit devreler tasarlama konusunda oldukça rahatım. Açık toplayıcı çıkışı olan bir çip görüyorum ve yukarı çekmeye ihtiyacım olduğunu biliyorum vb. Bir IC ve veri sayfası verildiğinde, onunla nasıl arayüz oluşturacağımı ya da en azından doğru soruları sorabileceğime oldukça eminim. nasıl arayüz oluşturacağınızı öğrenin.

Matematik ve mantıksal düşünme konusunda çok iyiyim. Beni bir döngüye sokan birkaç algoritma / tasarım konsepti var. Bu kesinlikle benim en güçlü alanım.

Yaptıklarım

Şimdiye kadar tüm deneyimim 8 bitlik mikro denetleyicilerle oldu . Üniversite kursumda Motorola HC08, Intel 8051 ve Zilog EZ8 kullanıldı. Profesörüm üçü için de 7 segmentli ekran ve diğer bazı şeyler için küçük bir geliştirme panosu oluşturmuştu. Bunları montajda programladık, bu yüzden montaj konusuna biraz aşinayım ve temel bir bilgisayar mimarisi dersi aldım, bu yüzden donanım hakkında iyi bir fikrim var. Ancak, bir Windows ortamında çalıştık ve 3 MCU'nun da kendi IDE ve araç zinciri zaten kurulmuştu, bu yüzden kodumun montajdan MCU'da çalışmaya nasıl geçtiğini gerçekten hiç öğrenmedim.

Bir sonraki adımım kendi başıma öğrenmekti. Hem önceden yazılmış kitaplıkları olan hem de olmayan bazılarının olduğu sensörler / anılar / ekranlar ile arayüz oluşturarak Arduino ortamına çok aşina oldum. Daha sonra üzerinde bir ICSP bulunan kendi Arduino kartımı kurdum ve başka bir MCU ile bağlantı kurdum, böylece bootloader'ı çıplak ATmega328'lere aktarabilirim. Yine de, IDE ve araç zinciri zaten kurulmuştu ve C / Arduino'dan MCU'da gerçekten çalışan koda nasıl geçtiğimi asla anlayamadım.

Bilmek İstediklerim

Bu nedenle, daha önce bağlantılı olan cevaptan, bence benim için en ilginç / faydalı şey, araçları (derleyici ve bağlayıcı) öğrenmek ve farklı yazılım mimarisi stillerini öğrenmek ( kesintiye dayalı kontrol döngülerinden programlayıcılara ve RTOS'lara geçiş). Neyin en yararlı olacağına dair fikrim bu ... ama henüz bunun doğru olup olmadığını söylemek zor olduğundan, daha iyi olacağını düşünüyorsanız, bu yanıttan başka madde işaretleri önermekten çekinmeyin ve lütfen neden böyle düşündüğünüze dair bir açıklama yapın.


Başlangıç ​​noktası olarak şu anki bilgilerimi ve hedef olarak bilmek istediklerimin yukarıdaki açıklamasını alarak arıyorum daha sonra nereye gideceğiniz konusunda çok özel öneriler. Kesin proje önerileri, okunacak web siteleri / blog girişleri, kitap bölümleri vb. Arıyorum.

Ayrıca, devam etmeden önce bilgi tabanımda doldurmam gerektiğini düşündüğünüz başka boşluklar var mı? yukarıda belirtilen konular?

Teşekkürler

Bu çok açık uçlu ve öznel bir sorudur, ancak iyi düşünülmüş ve harika cevaplarla sonuçlanmıştır. Bu tür sorular CW olmalıdır.
@Kevin Vermeer Ah tamam, ileride başvurmak için bunu nasıl yapabilirim?
@JGord, moderatörün dikkatini çekmek için işaretlemeniz gerekir. Yalnızca moderatörler CW yapabilir.
Dokuz yanıtlar:
Toby Jaffey
2011-07-01 00:05:51 UTC
view on stackexchange narkive permalink

Bu nedenle, daha önce bağlantılı olan cevaptan, bence benim için en ilginç / faydalı şeyler, araçları (derleyici ve bağlayıcı) öğrenmek ve farklı yazılım mimarisi stillerini öğrenmek (kesintiye dayalı kontrol planlayıcılara ve RTOS'lara döngüler)

Küçük bir işletim sistemini yeni bir cihaza taşımak, planlayıcıları ve RTOS'leri anlamanıza yardımcı olabilir. FreeRTOS popülerdir ve iyi belgelenmiştir. eCos başka bir şeydir.

Bir önyükleyici yazmak, belleği bölmek ve flaşı bölgelere ayırmak isteyeceğiniz için bir bağlayıcıyla başa çıkmanın iyi bir yoludur.

Diğer bir ipucu, tamamen yeni bir mimari veya yonga seçmek ve kendinize bir geliştirme kartı oluşturmaktır. Kendinizi en baştan başlamaya ve veri sayfasında her şeyi aramaya zorlamak, öğrenmenin iyi bir yoludur.

Protothreads 'ı keşfedin. Aynı programları hem iş parçacıklı hem de durum makinesi tarzında yazmayı deneyin. Protothreads ile işiniz bittiğinde gerçek bir iş parçacığı zamanlayıcı yazın.

Hey Joby, cevabın için teşekkürler, ama bu aslında kaçınmaya çalıştığım türden bir cevap. "RTOS nasıl öğrenilir" gibi şeyler için google'da arama yapıyorum ve yararlı hiçbir bağlantı yok. Bahsettiğiniz konular için iyi rehberleriniz veya öğrenme kaynaklarınız var mı?
Gerçekten bu şeyleri öğrenmeye çalışıyorsa, bir RTOS sadece başlangıçta bazı şeyleri gizleyecektir. 100'den fazla mikro denetleyici projesi yaptım ve henüz RTOS'un iyi bir cevap olabileceği bir proje bulamadım. Birkaç kez basit bir round-robin işbirliği görev planlayıcısı kullandım, ancak bu çoğu insanın RTOS olarak düşündüğünden çok daha az. PIC 18 ve dsPIC aileleri için görev planlayıcılarım web sitemde ücretsiz olarak mevcuttur.
@Olin bu konuyu biraz daha açabilir misiniz? Bir RTOS'a geçmeden önce iş parçacığı ve zamanlamayı öğrenmeye başlamam gerektiğini mi söylüyorsun?
@Olin Küçük sistemler için, oyuklu görevlerle birlikte işbirliğine dayalı çoklu görevi tercih ediyorum. Belirleyici ve hafiftir, kısıtlı sistemler için idealdir. İş parçacıklarıyla önceden çoklu görev, çok güçlü olsa da, yarış koşulları ve tekrarlanamayan hatalarla hata ayıklama kabuslarına neden olabilir. Bana her gün bir durum makinesi verin.
@JGord İyileştirmenin en iyi yolu yapmaktır. Becerilerinizi geliştirmek için bazı etkinlikler öneriyorum, bir çalışma rehberi değil. İlk uygulamadan sonra çoğu zaman ilginç soruları açığa çıkarıyorum.
@JGord: Hayır, tam bir RTOS'un mikrodenetleyiciler için uygun olmadığını söylüyorum, en çok ihtiyaç duyduğunuz şey işbirliğine dayalı bir görev değiştirici olmaktır. RTOS, mikrodenetleyicilerin olmadığı "büyük" gömülü sistemler içindir. RTOS'ların veya diğer işletim sistemlerinin mantıklı olduğu birçok gömülü PC ve benzerleri var, ancak henüz bir mikro denetleyici için mantıklı olan bir tane bulamadım.
@Joby: Tamam, cevabınızdan anlaşılmadı. Bu dava için bazı RTOS'ları savunuyormuşsunuz gibi geldi.
RTOS bilgisi için Jean Labrosse'un RTOS: MicroC OS II Real Time Kernel kitabına bakın. Genel olarak RTOS mekanizmalarından bahseden harika bir bölümü var. Onun kitabı ile RTOS'unu kullanma haklarını elde edersiniz.
old_timer
2011-07-01 08:59:09 UTC
view on stackexchange narkive permalink

MicroC OS II kitabı muhtemelen yatırım yapılacak bir şeydir. Ayrıca çeşitli i2c, spi, mdio, vb. arayüzleri öğrenmek için projeler oluşturmalısınız. Özellikle her birinin nasıl biteceğine dair. Zaman zaman donanım veri yolunu destekleyecektir (bunu satıcı bazında bir satıcıya göre öğrenmeniz gerekir), ancak genellikle çeşitli nedenlerden dolayı i2c / spi donanımını kullanamayacak ve biraz patlamanız gerekecektir.

Avr / arduino gayet iyi, ARM, thumb ve thumb2'yi ve msp430'u ve bazı eski (mips olmayan) resimleri öğrenmelisiniz. Arduino için önyükleyici koduna bakın ve nasıl bir yükleyici programı yapılacağını, üzerindeki flaşı nasıl sileceğinizi ve kartı / yongayı devralmayı öğrenin. Lpc tabanlı bir mikro kollu mikro elde edin, seri port programlama protokolüne de aynı şekilde bakın. Bir sam7 veya geleneksel bir jtag'e sahip bir arm7 ile bir olimex wiggler veya jtag-tiny (ikincisini tavsiye ederim) alın. Openocd ile rahat edin. ARM'ın swd'si normal jtag'den daha acı vericidir, ancak bu pazarda galip gelecektir (korteks-m tabanlı ürünler için). Kısaca, satıcıların devre içi programlama için sağladığı çeşitli yolları öğrenin. Zaman zaman tahtaları tuğla yapacaksınız ve bunları sökerken rahat olmak isteyeceksiniz. Bu satırlar boyunca, intel hex, srec ve elf dosyalarını ayrıştırmak için biraz kod yazın, bir gün bir yükleyici yazmanız ve bu popüler formatlardan birini veya birkaçını desteklemeniz gerekebilir.

Araçlardan bahsettiniz. Gcc ve binutils öğrenirken yanlış gidemezsiniz, çapraz derlemeyi nasıl öğrenirsiniz, en azından desteklenen platformlar için (genellikle --target = msp430 --prefix = / bir şey içerir). Ana hat gcc ve binutils için desteklenen platformlar hareketli bir hedeftir, bu nedenle avrgcc ve mspgcc ve benzerleri temelde sizin için yapılır. Bağlayıcı betikleri yazmayı, C kodunuzu nasıl yazacağınızı öğrenmeniz gerekir, böylece örneğin sabit tablolar ramda değil romda görünür. Ayrıca ikili dosyaları sökmek için bir fikir edin, tabloların doğru yerde olduğundan emin olmanız, kodun olduğunu düşündüğünüz yerde olduğundan, vektör tablolarının ve önyükleme / başlatma kodunun işlemcinin ihtiyaç duyduğu yerde olduğundan emin olmanız gerekir. çizme. Ayrıca derleyici optimizasyonlarının ne yaptığını ve derleyici / makine koduna derlendiğinde C kodunun nasıl göründüğünü bulmaktan da zarar gelmez. Mümkünse kendinizi gcc / gnu ile sınırlamayın. llvm güçlü bir oyuncudur, daha iyi bir araç olarak gcc'yi geçme potansiyeline sahiptir. Zaten sdcc kullanmış olabilirsiniz. kiel, iar, vb .'nin eval sürümlerini deneyin. C / C ++ standartlarında çok fazla gri alan olduğunu ve her derleyicinin bunları farklı şekilde yorumladığını ve aynı yükseklikte üretilen kodun kalitesindeki önemli farklılıkları hemen göreceksiniz. düzey kaynağı. Bu mesleğe sadık kalırsanız, çok iyi olmayan bir derleyici kullanmaya zorlandığınız ve siğilleri ve zayıf yönleri etrafında çalışmak zorunda kaldığınız zamanlar olacaktır. Masaüstü işinde, standartlara uygun olmayan araçları kullanmayı reddetmekle çoğu zaman kurtulabilirsiniz. Mikrodenetleyici dünyasında, bazen ne elde ederseniz onu alırsınız ve işte budur. Bazen, donanım özelliklerini karşılamak veya sözde hayatınızı kolaylaştırmak için C dilini değiştiren / geliştiren satıcılar elde edersiniz (tavşan yarı ve xmos akla gelir). (xmos birçok nedenden ötürü çok çekici bir platformdur, gelişmiş olduğunu düşünüyorum, ancak deneyimlerinize göre muhtemelen hazırsınız, araçlar ücretsiz indirilebilir, gerçekten iyi bir simülatördür ve .vcd / dalga biçimlerini incelemeyi öğrenmek için önemlidir. kod çalıştırma).

chibios, bakılması gereken başka bir şey.

Başarılı önyükleyiciler oluşturmak önemli bir beceridir. Önyükleyici ya da en azından başlangıç ​​kısmı kaya gibi sağlam olmak istiyor, kolayca tuğlaya yapışan bir ürün sunmak istemezsiniz. Önyükleyicinin giriş kısmından ödün vermeden flaşın uygulama bölümünü yeniden yüklemenin bir yolu olan basit bir önyükleme önemlidir.

Stellaris değerlendirme panoları, buna değer kitaplıklar sağlamalarına rağmen çevre birimlerle yüklenir. öğreniyor, özellikle de size nasıl çalıştığını ve gerçekte nasıl çalıştığını söyledikleri için ve öğrenmek için kodlarını ve diğer kaynakları incelemelisiniz.

Bir avr hayranı olarak, hala oradaysa, bir avr kelebeği. Biraz seri programlama öğrenin, bir konektörü lehimleyin ve yeniden programlayın. Programlamayı öğrenmek için orada birkaç çevre birimi var.

belki eskiden dallas semi, şimdi maxim sanırım tek kablolu cihaz. Sıcaklık sensörleri gibi. Çift yönlü veri yollarıyla i2c ve mdio'dan daha da acı verici olan bu tek kablolu şey, tek teldir (ve topraklamadır). Güç, ustadan bağımlıya ve tek bir kabloyla ustalaşmaya bağlı.

Bulunduğunuz yerdeyken, kızılötesi uzaktan kumanda protokollerinin kodunu çözmeyi eğlenceli buldum. Kızılötesi alıcı modüllerinin bulunması kolaydır, radyo kulübesinde aslında iyi bir modül vardı. Temelde bit vuruşunun tersi, durum değişiklikleri arasındaki zamanı ölçmek istersiniz, bu zamanlamayı kullanarak protokolü algılar ve / veya çözer. Evrensel bir alıcı gerekli değildir, her seferinde bir protokol yeterlidir. Aynı şekilde, özellikle de taşıyıcı frekansını biraz patlatırsanız, bir ir led'e bitbang komutları verebilmek.

Bir SD kartla spi aracılığıyla konuşmak da muhtemelen iyi bir fikirdir. Kesinlikle i2c ve / veya spi flash parçalarını nasıl sileceğinizi ve programlayacağınızı öğrenin, bunlarla sık sık seri numaraları ve mac adresleri ve benzerleri için karşılaşacaksınız.

Temel ethernet protokollerini de öğrenmenizi tavsiye ederim. Arp ve udp paketlerini (sıfırdan) (ve aynı zamanda icmp / ping) ayrıştırıp oluşturabilir. Biraz hile yaparsanız, gerçek arp kurallarına uymazsanız, birisi size bir şey gönderirse yanıtı gönderen mac / ip'e geri gönderirseniz bir udp yığını oluşturmak oldukça kolaydır. Ya da belki de diğer insanlar için arp paketlerini izleyecek ve etrafınızdaki mac / ip adreslerini takip edecek kadar ileri gidin. tcp çok daha fazla çalışma gerektirir, yapılabilir, ancak uygulamayı denemekten daha önce onu okumak daha iyidir.

İyi şanslar ve en önemlisi iyi eğlenceler.

Sormamın sakıncası yoksa, "şimdi olduğum yerdeyken" kaç yaşındaydın?
Mikrodenetleyicileri denemeye ilgi duyduğum, bir işim olduğu ve bunu karşılayabildiğim bir noktadayken 20'li yılların başı / ortası diyebilirim. O zamanlar resim biriydi ve her tür kurulumun en ucuzu için yaklaşık 150 dolardı ve bu sadece bir açık delik parçası için bir zif soket programcısıydı, bir radyo kulesi proto kartı kullanıyordu ve osilatör satın almak zorunda kaldı, vb. başlamak. 50 doların altındaki tahtaların hacmi ve internete sahip olmak oyunu tamamen değiştirdi. Bugün mevcut olan şey o zaman mevcut olsaydı 15 yaşında olacaktım.
Parçayı panonuzdan çıkarmanız, programlayıcıya koymanız, yeniden programlamanız ve ardından parçayı tekrar panonuza yerleştirmeniz gerekiyordu. Bunların hiçbiri devre meselesinde değil.
Evet, aslında çalıştığım dünya bu ama çok daha ucuza. Çoğu zaman arduino'yu bir programlama yolu olarak kullanıyorum, sonra onu çıkarıyorum ve istediğim hedefe koyuyorum. Başladığında 20 yaşın üzerinde olmana sevindim çünkü üniversiteye gidene ve masaüstünde Java dışında bir evren olduğunu fark edene kadar bu tür şeylere girmedim. Bu benim hatamdı, bugün erken başlamanın çok daha kolay olduğu konusunda haklısın.
Aynı zamanda, bir gençken vic20 ve IBM PC yepyeni ve bir servete mal oldu, ancak iyi yerleştirilmiş bir ilhamla, çocuklardan birinin ondan bir şeyler öğrenmesi ihtimaline karşı ailem satın aldı (biri, sonra ikisi de) ve O zamanlar bunun eşdeğerini yaptım, temel kılavuzları inceledim ve her komutu öğrenmek için programlar yazdım. Daha sonra assembler sonra C ile dos öğrendim ve sonunda gerçek bir işim ve biraz para ve diğer mühendisler bana bu mikrodenetleyicilerden bahsettikten sonra, SONRA bu yola girdim.
Benim için IMO, atmel avr kelebeği günün arduino'suydu, mikrodenetleyicili, sahada programlanabilir 20 dolarlık tam işlevli bir karttı (üç kablo ve 9 pinli dsub konektörü ekleyin). Ayrıca bir ekranı ve başka şeyler ve yedek I / O vardı. sonra dallas tini çıktı (javayı hurdaya çıkardım ve 8051 assembler'da bir udp yığını yazdım). ezusb, ayrıca 8051 usb dünyasını açtı. ve bu 50 doların altındaki anakartlar devam etti ... msp430 fırlatma rampası ve st değer hattı keşfinin ürünü oraya götürmek için zararına satıldığını varsayıyorum.
Günümüzde tamamen farklı bir dünya ve ne yazık ki çok sayıda programcı, derleyicilerde, işlemcide, veri yollarında ve protokollerde, vb. (Çok yüksek seviyeli diller nedeniyle) gerçekte olanlardan çok uzakta. Bilgi, donanım ve simülatörlere ulaşması bu kadar kolay olduğu için kullanılmıyor. İlgilenen birini gördüğüme sevindim, lütfen devam edin.
Olin Lathrop
2011-07-01 00:43:11 UTC
view on stackexchange narkive permalink

Bu büyük bir soru. Ne yazık ki, diğer her şeyi öğrenirken olduğu gibi, gömülü mikro denetleyici geliştirmeyi öğrenmenin de tek bir yolu yoktur. Burada sorduğun için, sadece belirli bir projeyi yaptırmak istemediğini, aynı zamanda neler olup bittiğini gerçekten anlamak istediğini varsayacağım, böylece herhangi bir projeyi daha sonra kendi başına yaptırabilirsin. Bu iyi bir başlangıç.

Bir şeyleri gerçekten anlamak için assembler'da birkaç proje yapmanın yerini hiçbir şey tutamaz. Yüksek seviyeli dillerin işinin bir kısmı karmaşıklığın bir kısmını gizlemektir, ancak bu aynı zamanda anlamak istediğiniz şeyleri de gizler. Arduino, bundan başka bir katman. İşlerin nasıl yürüdüğünü bilmek istemeyen biri için iyi olabilir, ancak amaç ayrıntıları öğrenmekse gerçekten kötüdür. Öyleyse arduino'yu bırakın, bir derleyiciniz olduğunu unutun, kolları sıvayın ve gerçekten dalmaya hazırlanın.

Herhangi bir mikro denetleyiciyle başlamak için ilk yer, veri sayfasıdır. Çeşitli mikro denetleyici hatlarının farklı ayrıntıları vardır, ancak kavramlar aynıdır. Birini seçin ve birkaç proje yapıp kendinizi rahat hissedene kadar ona bağlı kalın. TI MSP430, Atmel ve Microchip PIC'lerin tümü temel mikro denetleyici hatlarıdır. Ben bir PIC adamıyım, bu yüzden bunun hakkında konuşacağım. Diğerlerinden biriyle gitmek yanlış değil, ancak orada PIC'ler için daha erişilebilir topluluk desteği olduğunu düşünüyorum ve PIC hattı çok geniş, bu nedenle başladığınız yerden hem daha büyük hem de daha küçük mikrolara gitmek daha kolay olacak.

PIC hattıyla başlarsanız, 18F2520'yi öneririm. Oldukça yetenekli bir mikrodenetleyici, 28 pinli bir pakette vidalanması kolay bir paket içinde geliyor, yeterli miktarda program belleği ve RAM'i ve iyi bir ortak çevre birimleri seti var. Küçük bir avuç alın ve daha az bir şeyle yapılabilecek küçük projeler için bile başlamak için kullanın. Önemli olan onu iyi tanımaktır. Sonunda, PIC'in yapabileceğinden daha fazlasını gerektiren bir şey yapmak isteyeceksiniz. Umarım o zamana kadar temel konularda oldukça iyi olacaksın ve kolayca farklı bir modelin yerini alabilirsin. Aslında, tüm 18F PIC'ler, pim miktarı, program belleği, RAM ve çevre birimi karışımı dışında aynıdır. 18F2520 ile birkaç projeden sonra, herhangi bir PIC 18'e atlamakta sorun yaşamayacaksınız.

Bunu profesyonelce yapmaya son verirseniz, sonunda daha küçük veya daha ucuz bir şeyi dikte eden bir gereksinimle karşılaşırsınız . İşte o zaman 16F'ye veya hatta 12F veya 10F ailelerine bakarsınız. İşler büyük ölçüde tanıdık görünecek, ancak birkaç şey biraz daha zor olacak. Bir 18F'yi sağlam bir şekilde anlamaya başlıyorsanız, bunun üstesinden gelinmesi sorun olmamalıdır. Günümüzde, 16F ve daha düşük aileler gerçekten yalnızca toplu üretim için veya belki de fiziksel alan ve bazen güç çok önemli olduğunda. Bir hobisi için 18F'ye kıyasla çok az avantajı var.

Yukarı çıkarken 24, 30 ve 33 ailelere bakabilirsiniz. Bunlar, hangi voltajda çalıştıkları, en yüksek hız ve DSP matematik ALU'ya sahip olup olmadıkları gibi bazı küçük kırışıklıklar dışında temelde aynıdır. Assembler'da programlamak daha karmaşık ama aynı zamanda garip bir şekilde daha kolay. Akılda tutulması gereken daha fazla talimat vardır, ancak bu nedenle birçok şeyi yapmak da daha kolaydır. Bu aynı zamanda, gitmek istediğiniz yer orasıysa, C'ye geri dönmeye başlamak için iyi bir noktadır. Bu parçalar için C derleyicisi, PIC 18 ve altı için C derleyicilerinden farklı olarak aslında oldukça iyidir. Bu parçalarda aynı projede C ve montajı karıştırmak da daha kolaydır. Ancak bunlar için assembler'ı tamamen unutmayın. Bir önyükleyici yazmanız, yığın üzerinde doğal olmayan eylemler gerçekleştiren çoklu görevlerle başa çıkmanız, bir grup A / D'yi okumak için gerçekten sıkı kod yazmanız ve bir sonraki nabzınızın bir sonraki nabzı için PWM görev döngüsünü hesaplamanız gerektiğinde bilmek yine de yararlı olacaktır. 100KHz PFC güç kaynağı, vb.

Microchip serisinin güzel bir yönü, tek bir programlayıcı / hata ayıklayıcının tüm lotta çalışmasıdır. Bunu profesyonelce yapmak konusunda ciddiyseniz, Gerçek Buz'u alın. Biraz para biriktirmek için, sadece biraz aşağı doğru sıyrılmış bir Real Ice olan ICD3'ü alabilirsiniz. Olmadığı tek şey bir ICE (yine aptal pazarlama grevleri), ancak iyi bir devre içi hata ayıklayıcı. IDE hata ayıklayıcı ve simülatör MPLAB, tüm ürün yelpazesinde de çalışır.

Yine profesyoneller veya bu konuda profesyonel olmak isteyenler için yıllık Microchip Masters konferansına gidin. Evet, yazın Arizona'da, ama öğrenmek için oradasınız, bu yüzden gölgede 115 degF'yi unutun. (Aslında yazın Arizona'yı keşfetmeyi seviyorum, bu yüzden küçük çadırımla bir hafta erken çıkıyorum ve hinterlandlara çarpıyorum. Phoenix'e sadece kısa bir mesafedeki geniş ulusal ormanlarda bu kadar az insanın olması şaşırtıcı.) Masters da. geliştirme araçlarını almak için iyi bir yer. Genellikle bunları Masters'ta% 45 gibi bir fiyata satarlar. (Platin düzeyinde bir Mikroçip tasarım ortağıyım, bu yüzden onlara her zaman% 45 indirim alıyorum, bu yüzden tam olarak Master indiriminden yararlanamıyorum).

Mikrodenetleyicileri keşfetmeye başlarsanız PIC projeleri yaparken, PIC projelerini genellikle nasıl yapılandırdığımla ilgili daha fazla ayrıntıya ulaştığım ve bazı süslü şeyler yapmanız için size bir sürü ücretsiz araç verdiğim web siteme bakın. İyi yazılım tasarımını ve temizliğini anlarsanız, MPASM'de toplanacaksınız. Ne işe yarayıp yaramadığını anlamak için bir veya iki proje yapın, ardından iyi yazılım tasarım uygulamalarına bağlı kalarak çok daha fazlasını yapmanıza izin veren sarmalayıcılarıma ve diğer araçlara bakın. Assembler'ın sırf çoğu olduğu için dağınık olması gerekmez. Gerçekten ilgiliyseniz, bu yaz Masters'ta bu konu üzerine verdiğim derse uğrayabilirsiniz.

Hey Olin, öncelikle, bu cevaba bu kadar zaman ayırdığın için teşekkürler. İkincisi, onunla 4 veya 5 proje yaptığım için Atmel serisini tercih ettiğim silah olarak zaten seçtim ... üzgünüm = (. Daha ne kadar zaman geçireceğimden emin değilim Montaj alanı tercihinize göre. Web sitenizi kontrol edeceğim ve şu anda PIC hattından aşağı inmesem bile önerilerinizin yardımcı olacağını düşünüyorum.
Arduino sanal alanını terk etmek ve donanım için asm veya C veya bir derleyici bulabileceğiniz her şey için uygulamalar yazmak çok kolaydır. Diğer birçok iyi platform, msp430 launchpad, stm32 değer hattı keşfi, sam7s.
Jon L
2011-07-01 01:36:38 UTC
view on stackexchange narkive permalink

"Bilmek İstediklerim" sorunuzu doğrudan yanıtlamak için:

Derleyiciyi doğrudan komut satırı aracılığıyla aramanın, seçeneklerine aşina hale geldikten ve ardından kendi Makefile dosyalarınızı Yaptığınız tüm yapıların, inşa sürecini öğrenmemde bana çok faydası oldu - ki bu da öğrenmek istediğiniz bir şeye benziyor. Bu, temel olarak araç zincirini IDE'den ayırır ve araç zincirini IDE'den daha fazla öğrenmenize olanak tanır. Bu benim de geliştirmeye çalıştığım, devam eden bir şey.

Geçmişte arduino kullandığınızı fark ettim, bu harika çünkü şimdi avr-gcc'yi şu şekilde kullanmanızı önerebilirim: derleyiciniz bundan sonra. Bir deneyin, tüm platformlarda (Linux, WinAVR Windows, Mac) ve avr-gcc araç zinciri ve avrdude (programcı) üzerindeki belgeler harika ve orada sizin için birçok örnek Makefile olmalı den öğren. Bu bilgilerin makul bir miktarı diğer donanımlara da aktarılabilir, örneğin arm-gcc.

Mükemmel, aslında denediğim ilk şey bu olabilir. Ve daha da mükemmel çünkü ARM, AVR'lerde tamamen rahat olduğumda öğrendiğim 2. mimari olacak.
Jay Atkinson
2011-07-01 04:37:43 UTC
view on stackexchange narkive permalink

İşte başka bir fikir. Hem zamanlı görevler oluşturmanıza hem de yalnızca zamanlanmış görevler çalışmadığında çalışan görevler talep etmenize olanak tanıyan kendi arka plan görev sisteminizi uygulayın. Bu gerçek bir RTOS değil, ancak daha çok işbirlikçi bir programlayıcı gibi davranıyor. Önceki bir projeyi yeni görevlendirme sistemini kullanacak şekilde dönüştürün.

Bu tür bir sistem, 8051'de kullandığımız bir üründe gerçekten iyi çalıştı. Başlangıçta montajda yazılmıştı, ancak daha sonra onu C'yi diğer mimarilere taşımaya yardımcı olmak için. Bu sistemin kalp atışının 5 ms'lik bir tıklama üzerinde olduğu ve zamanlanmış görevlerin 5 ms'lik artışlarla çalıştığı yer gerçekten kaygandı. Tüm görevlerimizi (işlev işaretçileri) zaman değerleri ve talep üzerine olanlarla adlandırmak için kullandığımız bir dosyamız vardı. Bu dosya daha sonra onu nasıl uyguladığımıza ve kodda derlediğimize bağlı olarak assembly veya C'ye dönüştürüldü.

Oldukça iyi çalışırsanız, küçük bir şey için kendi basit RTOS'unuzu yazmanın üstesinden gelebilirsiniz. daha ağır.

Oldukça ilginç geliyor! Görev planlayıcılar vb. Hakkında öğrenme kaynakları için herhangi bir öneriniz var mı?
Bölüm 15, Jean Labrosse tarafından yazılan "The Firmware Handbook" daki Gerçek Zamanlı Çekirdekler, ed Jack Ganssle başlamak için iyi bir yerdir ve kitabın geri kalanı da önerilir.
Majenko
2011-07-01 00:12:51 UTC
view on stackexchange narkive permalink

Bahsetmediğiniz şeylerden biri iletişim.

Görünüşe göre tıkayabileceğiniz bir delik , çeşitli standart iletişimleri öğrenmek olabilir. endüstride kullanılan protokoller - örneğin:

vb.

Ah, evet iletişim +1 Bu bağlantıları kesinlikle okuyacağım, beni "öğrendiklerimi" sadece okuyarak uygulamaya zorlayacak herhangi bir proje öneriniz var mı?
Bu veri yolunun mevcut olduğu herhangi bir cihazla etkileşim kurmak genellikle iyi bir projedir. Belki bir tür şoför yazın. I2C, SPI, 1wire, vb. Gibi otobüsler için çok sayıda yonga var. Cevapta bahsedilenler daha çok aygıttan aygıta veriyollarıdır. MIDI ekleyebilirim ki bu ilginç olabilir.
user924
2011-07-01 18:38:24 UTC
view on stackexchange narkive permalink

Öyleyse soru şu: "Her araç zinciri bir kara kutu olduğunda nasıl öğrenilir?"

Kullanıma hazır çok eski deneyciler bulmanızı öneririm, herhangi bir ortak CPU ile hata ayıklama kartı. CPU, LED'ler, anahtarlar ve "Tek adım çalıştır" düğmesi ile 2 fit genişliğinde bir mekanizma gibi bir şey. Veri sayfasındaki makine kodu ikili talimatlarını kullanarak 5-10 komutlu uzun döngü programını manuel olarak oluşturun. Takılabilir büyük ROM yongasına koyun. ROM'u takın, gücü açın / sıfırlayın ve adım adım hatalarını ayıklayın.

Joe
2011-07-01 00:03:12 UTC
view on stackexchange narkive permalink

8 bitlik bir mikro üzerinde yazmaçları, işlemleri ve benzerlerini ne kadar iyi anlıyorsunuz? Küçük bir montaj yapmak iyi bir fikir olabilir. Bunun size tam olarak neler olup bittiğini öğretme faydası vardır. Bu, tuhaf hataların daha yüksek dillerde çözülmesine yardımcı olabilir.

AVR'lerin hoş, basit toplayıcıları ve kayıtları vardır. Beslemenizi ıslatmak için iyi bir platform. Dışarıda bu platform için bazı iyi eğitimler de var.

Bu size mikronun ne yaptığının alt satırını verecektir. Ardından, derleyici ve bağlayıcının C / Arduino'yu makine koduna nasıl götürdüğünün bir sonraki adımı anlaşılması daha kolay olacaktır.

Zaten 3 farklı montaj dili kullandım. Sanırım bu cephede iyiyim. Giriş için teşekkürler ve öğrenim derlemesinin daha iyi C yazmaya (veya en azından ne yazdığımı anlamaya) yardımcı olduğuna kesinlikle katılıyorum
Sandeep
2011-07-05 08:20:03 UTC
view on stackexchange narkive permalink

Gerçek Zamanlı Mantra, yerleşik yazılım geliştirme hakkında birkaç makale içerir.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...