Виконайте інструкції з оперативної пам’яті в мікроконтролері, сприятливому для любителів


12

Один із моїх проектів отримав би велику користь від можливості запуску програми, яка не зберігається в мікроконтролері (а натомість зберігається на SD-карті).

Отже, я шукаю пристрій, який дозволить мені завантажити код із SD-карти в оперативну пам'ять, а потім виконати код з оперативної пам'яті. Наразі у мене є лише програміст, який постачається разом із PicKit2, тому я вважаю за краще залишитися з PIC.

Хтось знає, які, якщо такі є, PIC можуть це зробити? Якщо жоден PIC не здатний на це, то які ще різні мікроконтролери, які працювали б для цього? Переважно ті, які доступні в сумісному пакеті.


2
так? ... Що саме потрібно виконати з барана? і що ви маєте на увазі під "статичним"? ви насправді не намагаєтеся написати самомодифікуючий код? Ви говорите про відсутність динамічного розподілу пам'яті? aka no malloc?
Марк

2
@Mark Я хочу мати змогу завантажити програму із зовнішнього пристрою, наприклад SD-карти, та виконати її. Спробую краще пояснити у своєму дописі.
Ponkadoodle

2
gotcha, єдиний PIC, про який я знаю, що дозволив би це PIC32. Якщо ви не зробите щось божевільне, як, наприклад, скопіюйте його з SD-карти на спалах, який буде швидко зникати, якщо ваш перемикання програм часто. Більшість малих 8/16-бітних ЦК сильно сегментовані між простором даних (ram) та програми (спалах) і не дозволяють лічильнику програми звертатися до оперативної пам'яті (Гарвардська архітектура, відсутність захисту пам'яті тощо).
Марк

Відповіді:


5

Є кілька ПІК, які дозволяють додавати зовнішню пам'ять програми. Я ніколи цього не робив, але Примітки щодо додатків AN869 та AN778 мають більше інформації про те, як реалізувати зовнішню пам'ять.


11

Ще один варіант, який слід врахувати, - це використання мови інтерпретації для ваших програм, що зберігаються на SD-карті. Таким чином, процесор не виконує машинний код, прочитаний з карти, він просто трактує його як дані.

Такий підхід дає вам гнучкість за рахунок швидкості.

Існує велика кількість варіантів: Огляд висококласних мовних перекладачів / укладачів для мікроконтролерів


1
Згорніть свій власний DSL. Цей варіант подобається мені найбільше з усіх запропонованих рішень.
Амос

6

Як уже було сказано, PIC (крім PIC32) не можуть цього зробити. Ймовірно, вам доведеться перейти до великих процесорів у будь-якій родині або до процесора із зовнішньою шиною пам'яті, оскільки більшість мікроконтролерів мають дуже обмежені ресурси ОЗУ.

Процесори MSP430 можуть запускати код зі свого простору оперативної пам’яті, але вам знадобиться щось на зразок F5438 з 16-кратним простором оперативної пам’яті - запущений код у 128 байтах насправді не є варіантом!

Якщо у процесора є зовнішня шина, ви можете помістити оперативну пам'ять у кодовий простір. Можливо, вам доведеться додати трохи додаткової логіки для відображення оперативної пам’яті на дві області пам’яті, якщо архітектура процесора не дозволяє записати дані в пам’ять виконання.

Я запустив код з оперативної пам’яті в системі на базі 8051, але це означало, що оперативну пам’ять потрібно було перенести в зовнішній простір пам’яті для програмування, а потім назад у простір КОД для виконання. Програма завантажувача / монітора здійснювала перемикання та завантаження банку пам'яті. Будь ласка, не запитуйте код - я робив це близько 30 років тому, і він давно втратив (і написано в PL / M-51)


5

Жоден PIC низького та середнього діапазону не може виконувати оперативну пам'ять через архітектуру пам'яті.

Будь-який процесор на базі ARM повинен виконуватись з оперативної пам'яті. Хоча вони, як правило, знаходяться в smd-пакетах, є досить багато модулів розміру 'DIP', у яких мікроконтролер вже завантажений. Подивіться, наприклад, mbed або LPCXpresso . Вони обидва постачаються з завантажувачем або, у випадку з LPCXpresso, інтерфейсом налагодження разом із безкоштовними компіляторами.

Якщо ви хочете залишитися з простими 8-бітовими мікросхемами, можливо, подумайте про щось із сімейства вільних масштабів HCS08. Вони можуть виконуватися з оперативної пам’яті, і існує безкоштовно обмежена кодом версія компілятора IDE та Codewarrior IDE та C.

Я впевнений, що MPS430 також повинен це зробити, але я цього ніколи не робив.


Mbed фактично отримує бінарні файли, копіюючи їх на вбудовану флешку та потім скидаючи її. Він відображається у вигляді флеш-накопичувача при підключенні до порту USB комп'ютера. Якщо ви можете розробити метод використання флешки замість SD-карти, або встановити її так, щоб двійковий файл із SD-картки автоматично копіювався на флешку та виконувався скидання, то, можливо, вам пощастить. Mbed не вимагає апаратного програміста.
Амос

5

Пропелер завантажує свою програму із зовнішнього сховища.


1
Зазвичай мікросхема Propeller завантажується з 32K EEPROM (24LC256), але ось спосіб завантаження із SD-карти замість цього: gadgetgangster.com/news/45-designer-news/…
tcrosley

3

Я пам’ятаю, як читав про завантажувач AVR-файлів, який би повторно прошив чіп файлом .hex (імовірно) із SD-карти. Я не можу знайти оригінальне джерело, але цей пошук у Google виявив кілька цікавих звернень. Так, я знаю, що це AVR, а не PIC, але вам може бути корисно, якщо річ PIC не вийде.



3

Як зазначали інші плакати, ви не можете виконати оперативну пам’ять на 8 або 16-бітному PIC, оскільки вони використовують архітектуру Гарварду (окремий простір коду та даних). Практично завантажувати програму з SD-карти чи відтворювати її в пам'ять коду, залежить від того, як часто ви це будете робити.

Якщо ви намагаєтеся створити динамічне середовище на зразок ОС, яка постійно накладає програми, то ні. Але в моєму випадку у мене є програма, яка завантажує драйвери за необхідності від 2 Гб SD-карти. PIC24FJ256GB110 має мінімум 10 000 циклів стирання / запису. Навіть якби це робилося п’ять разів на день, спалах тривав мінімум 5 1/2 років.

(Примітка: цифра 10 000 - це мінімум. Типова тривалість циклів стирання / запису може бути в п’ять разів більше - тому, якщо ви займаєтеся розробкою, ви, ймовірно, можете повторно спалахувати процесор 140 разів на день - кожні 3 1/2 хвилини протягом восьми годин - і це може тривати рік.)


2

У моїй школі ми використовували процесори HC11 або HC12 із зовнішньою оперативною пам’яттю для завантаження та виконання програм на…, але я забув назву плат / комплекту :( У будь-якому випадку, Freescale HC (S) -лінійні MCU адреси RAM та ROM однаково , тому ви можете завантажити код в оперативну пам’ять і виконати його.

Виходячи з черги blalor, найкращим рішенням може бути лише додавання кнопки на вашій дошці, яка може переформатувати PIC від даних, що зберігаються на SD-картці, яку ви вставляєте за допомогою завантажувача. Я не можу уявити, що б такий тип коду не вписувався на більші PIC; якщо у вас є деякі статичні дані (графіка, текст, звук), зберігайте їх на зовнішньому сховищі.


1

Ви, ймовірно, не можете виділити оперативну пам’ять, але для вашої програми ви можете мати невеликий завантажувач у спалах, який потім може прочитати дані SD-карти на залишок спалаху. Я використовував цей підхід із флеш-чіпом, керованим SPI, щоб дозволити завантаження мікропрограмного забезпечення з бездротового зв'язку та встановлення після його повного отримання; Я не можу придумати жодної конкретної причини, що це не працювало б із SD-карткою, хоча завантажувач, сумісний із SD, може зайняти деяке місце.


Я зробив щось подібне для пристрою, який мав декілька дещо різних прошивок і цілей: Запишіть усі файли на зовнішній спалах SPI (який доступний розмірами, набагато більшими, ніж у більшості мікроконтролерів), і перевстановіть контролер на одне із зображень з завантажувачем, якщо під час скидання утримується кнопка.
Кевін Вермер

0

Досить декілька мікроконтролерів дозволить вам це зробити, звучить як не малюнок. що ви хочете зробити, це мати завантажувач, який використовує spi для читання з sd карти, скопіюйте програму, яка, ймовірно, хоче бути відомим або жорстко кодованим ім'ям файлу, ймовірно, у кореневому каталозі, проаналізуйте цей файл у операційному режимі, а потім відгалужте на програма в таран. Контролери на основі ARM, безумовно, дозволять вам зробити щось подібне.

Альтернативою було б, щоб завантажувач прочитав SD-карту над spi і замість того, щоб копіювати в таран і розгалуження записати на частину спалаху. Ймовірно, хочете мати кнопку, якщо натиснути кнопку чи увімкнути або скинути її, потім завантажте нову програму з sd карти, інакше якщо підпис або контрольна сума виглядатимуть добре на тій завантаженій частині спалаху, а потім на завантажувальній гілці до тієї частини спалаху. Або, можливо, якщо SD-карта присутня, то завантажте її з іншої гілки на завантажувану частину спалаху. Можу використовувати цей метод на основі арм і заснованих на AVR, можливо навіть на основі малюнка, але мій досвід малюнка датується. msp430 Я б також припустив. В основному, якщо ви можете перепрограмувати частини спалаху, які ви виконуєте, з самого процесора мікроконтролера,


Гммм, насправді я не запрограмував avr з avr, вибачте, що було закінчено серійно від хоста. Підносить третє рішення, що ви бачите багато дешевих дощок для хобі ... використовуйте два мікроконтролери. У цьому випадку один утримуватиме інший у режимі скидання, читати sd-карту, програмувати другий мікросеріал через серійний чи інший, а потім випускати скидання на інший мікро. Дошки хобі / eval часто мають один мікрофон для інтерфейсу usb, і він зазвичай приєднується до іншого.
old_timer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.