Hobist dostu bir mikro denetleyicide RAM'den talimatlar yürütün


12

Projelerimden biri, mikro denetleyicide depolanmayan (ancak bunun yerine bir SD kartta saklanan) bir programı çalıştırabilmekten büyük fayda sağlayacaktır.

Bu yüzden, kodu SD karttan RAM'e yüklememe ve ardından kodu RAM'den yürütmeme izin verecek bir cihaz arıyorum. Şu anda, sadece PicKit2 ile gelen programcı var, bu yüzden PIC'lerle kalmayı tercih ederim.

Herkes PIC'lerin bunu yapabileceğini biliyor mu? Hiçbir PIC bunu yapamazsa, bunun için işe yarayacak bazı farklı mikro kontrolörler nelerdir? Tercihen bir breadboard uyumlu pakette bulunanlar.


2
ha? ... Koç'tan tam olarak ne yapmak istiyorsun? ve 'statik' ile ne demek istiyorsun? aslında kendini değiştiren kod yazmaya çalışmıyorsunuz değil mi? Dinamik bellek ayırma eksikliğinden mi bahsediyorsunuz? aka malloc yok mu?
Mark

2
@ Mark SD kartı gibi harici bir aygıttan bir program yükleyip yürütmek istiyorum. Yazımda daha iyi açıklamaya çalışacağım.
Ekim'de Ponkadoodle

2
gotcha, bunun izin vereceğini bildiğim tek PIC bir PIC32. SD karttan flaşa kopyalamak gibi çılgın bir şey yapmazsanız, anahtarlama programlarınız sık sık flaş döngülerini oldukça hızlı bir şekilde yiyecektir. Çoğu küçük 8 / 16bit uC, veri (ram) ve program (flash) alanı arasında yoğun bir şekilde bölünür ve program sayacının ram'ı (Harvard mimarisi, bellek koruması yok, vb.) Ele almasına izin vermez.
Mark

Yanıtlar:


5

Harici program belleği eklemenize izin veren birkaç PIC vardır. Bunu hiç yapmadım ama AN869 ve AN778 Uygulama Notları harici belleğin nasıl uygulanacağı hakkında daha fazla bilgiye sahiptir.


11

Dikkate alınması gereken diğer bir seçenek, SD kartta depolanan programlarınız için yorumlanmış bir dil kullanmaktır. Bu şekilde, işlemci karttan okunan makine kodunu yürütmez, sadece veri olarak kabul eder.

Bu yaklaşım size hız pahasına esneklik sağlar.

Aralarından seçim yapabileceğiniz birçok seçenek var: Mikrodenetleyiciler için Üst Düzey Dil Tercümanları / Derleyiciler Anketi


1
Kendi DSL'inizi alın. Bu seçenek bana önerilen çözümlerin çoğuna hitap ediyor.
Amos

6

Daha önce de söylendiği gibi, PIC'ler (PIC32 dışında) bunu yapamazlar. Çoğu mikro denetleyicinin çok sınırlı RAM kaynağı olduğundan, muhtemelen herhangi bir ailedeki daha büyük işlemcilere veya harici bellek veriyoluna sahip bir işlemciye gitmeniz gerekecektir.

MSP430 işlemciler RAM alanlarından kod çalıştırabilirler, ancak 16k RAM alanlı F5438 gibi bir şeye ihtiyacınız olacak - 128 baytta kod çalıştırmak gerçekten bir seçenek değil!

İşlemcinin harici veri yolu varsa, RAM'i kod alanına koyabilirsiniz. İşlemci mimarisi verilerin yürütme belleğine yazılmasına izin vermiyorsa, RAM'i iki bellek bölgesine eşlemek için fazladan bir mantık eklemeniz gerekebilir.

8051 tabanlı bir sistemde RAM kodu çalıştırmak var ama bu RAM programlama için EXTERN bellek alanına ve daha sonra tekrar yürütme için KOD alanına eşlenmiş olması gerektiği anlamına geliyordu. Yükleyici / monitör programı, bellek bankası anahtarlama ve yüklemesini idare etti. Lütfen kodu sormayın - Bunu yaklaşık 30 yıl önce yaptım ve kaybolduğundan beri uzun (ve PL / M-51 ile yazılmış)


5

Düşük ve orta aralıklı PIC'lerin hiçbiri bellek mimarileri nedeniyle RAM'den çalışamaz.

Herhangi bir ARM tabanlı CPU RAM'den yürütülmelidir. Smd paketlerinde olma eğiliminde olmalarına rağmen, mikrodenetleyicinin zaten yüklü olduğu birkaç 'DIP' boyut modülü vardır. Örneğin , mbed veya LPCXpresso'ya bir göz atın . Her ikisi de bir önyükleyici veya LPCXpresso durumunda, ücretsiz derleyicilerle birlikte bir hata ayıklama arabirimi ile birlikte gelir.

Basit 8 bitlik mikrolarla kalmayı tercih ederseniz, belki de serbest ölçek HCS08 Ailesinden bir şey düşünün. Bunlar RAM'den çalıştırılabilir ve kod savaşçısı IDE ve C derleyicisinin kod sınırlı bir sürümü ücretsiz olarak mevcuttur.

MPS430'un da bunu yapabilmesi gerektiğinden oldukça eminim, ancak hiç yapmadım.


Mbed, dahili flash sürücüye kopyalanmasını ve ardından sıfırlanmasını sağlayarak ikili dosyaları alır. Bilgisayarın USB bağlantı noktasına bağlandığında bir flash sürücü olarak görünür. SD kart yerine flash sürücüyü kullanmak için bir yöntem çalıştırabilir veya SD karttan bir ikili otomatik olarak flash sürücüye kopyalanacak ve sıfırlama gerçekleştirilecek şekilde ayarlayabilirsiniz. Şansınız olabilir. Mbed bir donanım programcısı gerektirmez.
Amos


3

AVR'ler için çipin bir SD karttan bir .hex dosyasıyla (muhtemelen) yeniden yanıp söneceği bir bootloader hakkında okuduğumu hatırlıyorum. Orijinal kaynağı bulamıyorum, ancak bu Google araması birkaç ilginç sonuç çıkarıyor. Evet, bunun PIC değil AVR olduğunu biliyorum, ancak PIC olayı işe yaramazsa yararlı olabilir.



3

Diğer posterlerin de belirttiği gibi, bir Harvard mimarisi (ayrı kod ve veri alanları) kullandıkları için RAM'den 8 veya 16 bit PIC üzerinde çalıştıramazsınız. Bir programı bir SD karttan yüklemenin ve kod belleğine flash etmenin pratik olup olmadığı, bunu ne sıklıkta yapacağınıza bağlıdır.

Programları sürekli olarak kaplayan bir işletim sistemi gibi dinamik bir ortam oluşturmaya çalışıyorsanız, o zaman hayır. Ama benim durumumda, sürücüleri 2 GB SD karttan gerektiği gibi yükleyen bir programım var. PIC24FJ256GB110, minimum 10.000 silme / yazma döngüsüne sahiptir. Bu günde beş kez yapılsa bile, flaş en az 5 1/2 yıl sürecektir.

(Not: 10.000 rakam minimumdur. Tipik silme / yazma döngüleri dayanıklılığı beş kat daha fazla olabilir - bu nedenle geliştirme yapıyorsanız, muhtemelen bir işlemciyi günde 140 kez tekrarlayabilirsiniz - her 3 1/2 dakikada bir sekiz saat boyunca - ve yine de bir yıl sürebilir.)


2

Okulumda, programları yüklemek ve yürütmek için harici RAM'li HC11 veya HC12 işlemcileri kullandık ... ancak kartların / kitin adını unuttum :( Her durumda, Freescale HC (S) hattı MCU'ları RAM ve ROM'a aynı şekilde hitap ediyor , böylece kodu RAM'e yükleyebilir ve yürütebilirsiniz.

Kuyruk alarak blaloren iyi çözüm, panonuza PIC'yi bir önyükleyici ile taktığınız bir SD kartta depolanan verilerden geri çekebilecek bir düğme eklemek olabilir. Ne tür kod daha büyük PICs uygun olmaz hayal edemiyorum; statik verileriniz (grafik, metin, ses) varsa, bunu harici depolama alanında saklayın.


1

Muhtemelen RAM'den ayıramazsınız, ancak uygulamanız için flaşta SD kart verilerini flaşın geri kalanına okuyabilen küçük bir yükleyiciniz olabilir. Ürün yazılımının kablosuz bağlantıdan yüklenmesini ve ardından tamamen alındıktan sonra yüklenmesini sağlamak için SPI kontrollü bir flaş çip ile bu yaklaşımı kullandım; SD uyumlu bir önyükleyici biraz yer kaplayabilse de, bir SD kartla çalışmamasının belirli bir nedeni olduğunu düşünemiyorum.


Birkaç farklı yazılım ve amacı olan bir cihaz için benzer bir şey yaptım: Tüm dosyaları harici SPI flaşına (çoğu mikrodenetleyiciden çok daha büyük boyutlarda mevcuttur) yazın ve denetleyiciyi görüntülerden biriyle yeniden ateşleyin sıfırlama sırasında bir düğme basılı tutulursa bootloader ile.
Kevin Vermeer

0

Birkaç mikrodenetleyici bunu yapmanıza izin verecek, pic değil gibi geliyor. Yapmak istediğiniz şey, sd karttan okumak için spi'yi kullanan, muhtemelen kök dizinde bilinen veya sabit kodlu bir dosya adı olmak isteyen programı kopyalamak için bir bootloader'a sahip olmaktır; koçtaki program. ARM tabanlı kontrolörler kesinlikle böyle bir şey yapmanıza izin verecektir.

Bir alternatif, önyükleyicinin sd kartını spi üzerinden okuması ve koça kopyalamak ve yanmanın flaşın bir kısmına dallanmasını sağlamaktır. Açma veya sıfırlama düğmesine basılırsa sd karttan yeni bir program yüklerse, muhtemelen flaşın bu yüklenebilir kısmında ve önyükleme dalında flaşın o kısmına imza veya sağlama toplamı iyi görünüyorsa, bir düğmeye sahip olmak istersiniz. Veya belki de sd kart varsa, aksi takdirde daldan flaş yüklenebilir bölümüne yükleyin. Bu yöntemi kol tabanlı ve avr tabanlı, hatta pic tabanlı bile kullanabilir, ancak pic deneyimim tarihli. msp430 Ben de kabul ediyorum. Temel olarak yürüttüğünüz flaşın bazı kısımlarını mikrodenetleyici işlemcisinden yeniden programlayabiliyorsanız,


Hmmm, aslında avr bir avr programlamamış, üzgünüm bu bir ana bilgisayardan seri üzerinden oldu. Çok sayıda ucuz hobi tahtası gördüğünüz üçüncü bir çözüm getiriyor ... iki mikrodenetleyici kullanın. Bu durumda biri diğerini sıfırlamada tutar, sd kartı okur, diğer mikroyu seri veya başka bir programla programlar, ardından diğer mikroda sıfırlamayı serbest bırakır. Hobi / eval panoları genellikle usb arayüzü için bir mikroya sahiptir ve genellikle diğerine jtags yapar.
old_timer
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.