Як визначити, скільки флеш / оперативної пам’яті потрібно для мікроконтролера?


24

Скажімо, ви починаєте вбудований проект з деякою відомою функціональністю. Коли ви вибираєте мікроконтролер, як вибираєте, скільки оперативної пам’яті вам потрібно?

Ви спочатку використовуєте дошку розробника та кодуєте свій проект, а потім подивіться, скільки пам'яті ви використали, а потім виберіть відповідний мікроконтролер, який відповідає цій пам'яті?

Ви просто вибираєте приємний мікроконтролер для прототипу, а потім зменшуєте масштаб після того, як у вас є робочий продукт?

Ви просто вибираєте те, чого ви впевнені, що вам буде достатньо, і якщо у вас не вистачає місця, просто перейдіть на більш високу щільність пам’яті, інакше ви просто збережете існуючий мікроконтролер?

Що вважається хорошою практикою?


Мені здається, що з інформаційно-теоретичної точки зору слід оцінити вимогу оперативної пам'яті в межах величини (розмірного стилю міркування), виходячи із специфікації завдання. Хммм ...
Ліндон Уайт

Якщо ви використовуєте бібліотеки, ви можете дослідити їх слід пам’яті. З власним кодом ви повинні піти з досвідом. Порівняйте новий проект зі старим та визначте, чи очікуєте ви, що він буде більшим чи меншим.
jwsc

Відповіді:


20

Особисто для хобі-проектів я, як правило, використовую найпотужніший мікроконтролер у сім'ї з правильним слідом. Потім я розробляю друковану плату, записую якийсь код і виробляю прототип.

Це має перевагу в тому, що я знаю невелику кількість мікроконтролерів досить добре, тому я можу швидко прототипувати без того, щоб прочитати цілий аркуш даних. У мене також є розбивні дошки та шаблони коду для них.

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

Однак для виробничих цілей це дозволить збрити неабияку суму з кожної одиниці.


Для моїх особистих проектів я схильний використовувати подібний підхід. Цей самий метод забирається в офіс і зі мною. Це не неправильно, воно працює, але чи є кращі способи тощо. Оцініть вклад!
efox29

Однозначно знайдуться кращі способи в "реальному" середовищі, давайте почекати інших відповідей!
Девід

Абсативно. Розвивайте у великій пісочниці, а пізніше вирубайте. Час, який ви заощадите, перевищить додаткові 4 долари, які ви витратите на мікроконтролер, щоб розвиватися. Це працює більше ніж на заходах на рівні хобі - а насправді навіть важливіше. Фото 12 людей, які очікують на зміну на більший контролер, а не на одного !!
Скотт Сейдман

13

Звичайно, для єдиного домашнього прототипу може бути корисною рекомендацією починати з найпотужнішого з усіх сумісних мікросхем і зменшувати масштаб згодом.

Однак якщо ви хочете виграти ціну, вам доведеться повідомити клієнту ціну, перш ніж у вас є гроші на те, щоб щось реалізувати.

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

Це "як" включає також роздуми про розробку програмного забезпечення, відповіді на такі питання:

  • Вам потрібна операційна система? Який? Які ресурси для цього потрібні?
  • Ви хочете мати шарувату архітектуру? Для цього потрібні інтерфейси, які можуть споживати ОЗУ
  • Які бібліотеки вже доступні та корисні / потрібні для вашої мети, і скільки пам’яті їм потрібно (хороша документація про бібліотеку відповідає цьому на основі принаймні однієї збірки посилань)?
  • Які структури та змінні вам доведеться реалізувати для власних драйверів та вашої програми?

Підсумовування всіх цих значень дає вам приблизну оцінку. Наскільки ви можете довіряти, що залежить від того, наскільки детальний ваш аналіз, і це залежить від вашого досвіду :-)
Додавання запасу принаймні 30..50% від вашої оцінки, безумовно, хороша ідея.

Як тільки ваш продукт буде готовий, і ви будете використовувати близько 80..90% оперативної пам’яті, ви можете бути впевнені, що ваш вибір був правильним - принаймні, щодо оперативної пам’яті.


2
Re: "80..90% оперативної пам'яті у використанні". Стандартна практика полягає в тому, щоб ви використовували лише максимум 50% використання як процесора, так і пам'яті, щоб мати змогу розмістити майбутні оновлення та виправлення помилок.
Данк

1
@Dunk: Залежить від бізнесу. У автомобільній галузі 80% усіх ресурсів (процесор, оперативна пам’ять, флеш) в SOP є загальноприйнятим. Наприклад, дешевої побутової електроніки може бути навіть більше: наскільки ймовірним є оновлення в системі, тривалість життя якої становить лише 2-3 роки?
мікрофон

@Dunk: Я можу помилитися, але це здається, що ви звикли до програмного забезпечення в стилі настільних ПК з динамічною пам’яттю та всіма невизначеностями, які пов'язані з цим. Переважна більшість вбудованих додатків розподіляє все статично. Гарантоване відсутність витоку пам'яті. Тоді ви можете використовувати рівно 100% і будете добре назавжди до тих пір, поки не зміните його. Звичайно, це працює лише в тому випадку, якщо у вас є окремий стек від робочої оперативної пам’яті або якщо ви точно знаєте, як стек буде вести себе в усі часи. Хороша ідея залишити для цього трохи місця, але 10-20% досить просто для того, що я зробив.
AaronD

Більшою проблемою вбудованого програмного забезпечення є негідні покажчики, перевиконання буфера, поділ на нуль тощо. Деякі MCU можуть кидати винятки в апаратному забезпеченні, подібні до перебоїв, але все, що я використав, буде радісно продовжувати, як ніби нічого не сталося. Буде якийсь результат, але це, мабуть, не те, що ви очікували, і тому вам доведеться перевірити це. Деякі речі, як-от арифметичне перевищення / перелив, легко перевірити та виправити негайно; інші речі, як негідні покажчики, можуть залишитися непоміченими, поки функція, яка працювала роками, не вирішить підірватись.
AaronD

3
Бажаєте націлити на 80% цілі на 50%, залежить від вашого клієнта. Якщо потрібні виправлені специфікації та лише виправлення помилок, 80% - це добре. Ненадійні технічні характеристики, очікувана повзання функції та достатньо великий запас, щоб це могло призвести до того, щоб ви заплатили доплату за більший простір. Колись ми придбали в 2 рази стільки мікроконтролерів, скільки нам потрібно, і вибрали ті, які розігнали б достатньо, щоб дати нам потрібну нам продуктивність, що було набагато дешевше, ніж перероблення друкованої плати для більш потужного чіпа.
Марк Бут

3

Якби тільки можна було спочатку кодувати вбудовану систему, а потім створити апаратне забезпечення. Це полегшило б життя кожному. На жаль, це також означає, що ваші терміни є у вікні. Зазвичай апаратне забезпечення повинно бути розроблене задовго до того, як програмне забезпечення буде виконано, оскільки частини апаратних засобів часто мають тривалий час.

Таким чином, вбудованим розробникам SW зазвичай потрібно буде оцінити пам'ять програми та потреби процесора. Вашим першим кроком має бути спробувати переконати хлопців з обладнання, щоб вони дали вам найпотужніший мікроконтролер / процесор з максимально можливою оперативною пам’яттю. Це рідко працює, оскільки вони мають власні вимоги, але раз у раз вам пощастить.

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

Так, на це потрібен час. Так, потрібно перестрибувати всі обручі, оскільки змінити обладнання дуже важко після його вбудування.


Де можна знайти формулу для перетворення рядків коду в пам'ять коду?
EasyOhm

Це залежить від того, якою мовою та компілятором ви користуєтесь. Якщо ви використовуєте Assembler, один рядок приблизно дорівнює одному слову пам'яті (незалежно від розміру слова вашого чіпа). Якщо ви використовуєте C, це може бути приблизно 3-5 слів рядком, а якщо ви використовуєте C ++ або щось ще складніше, це може бути набагато більше. Найкраще зробити, це скласти кілька програм, написаних цією мовою, і порівняти рядки коду з пам'яттю коду, щоб отримати середнє значення.
Даккарон

2

Як правило, виробники мікроконтролерів вкладають у свої пристрої діапазон пам'яті, який підходить для типових програм. Отже, якщо вам знадобиться лише кілька штифтів вводу / виводу та один SPI у невеликому пристрої, слід навряд чи ви знайдете що-небудь, що постачається з 500 кбайт флеш-пам'яті та 64 кбайт оперативної пам’яті. Що стосується великих пристроїв, які ближче до пакетів SoC, навіть найменший майже напевно є досить великим, якщо ви не плануєте робити якісь серйозні скорочення, такі як обробка зображень.

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

Багато компаній застосували "Agile" підхід як до програмного забезпечення, так і до електронного дизайну, який передбачає створення "бібліотеки" невеликих функціональних плат (наприклад, дошки RS-485, плати АЦП тощо), а також загальних платформних плат, на яких розміщуються мікроконтролери. , аналогічно використанню комплекту розробників та плагінів. Потім виріб може бути прототипно швидко (протягом декількох годин) шляхом вибору та підключення набору дощок, необхідних для функцій. Програмне забезпечення аналогічно зібране з бібліотечних модулів і може швидко переноситися та тестуватися. Як тільки розмір частин коду, відомий для обладнання, відомий, зазвичай достатньо вибрати найменшу частину, яка буде містити його. Винятком є ​​той, що згаданий вище, коли функціональність пристрою включає великі дані або дуже складні алгоритми. Цей спосіб забезпечує точний,

(Ще однією перевагою підходу Agile є те, що він дозволяє розробляти програмне забезпечення та електронну розробку паралельно, при цьому дизайн elctronics є вправою інтегрувати набір плат функцій та виконувати відповідні ЕМС та інші складні речі одночасно з на складах прототипу розробляється прикладне програмне забезпечення. Деякі перенос і інтеграція все ще потрібні, але це робиться, коли функціонують програмне забезпечення та електроніка.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.