Jak określasz, ile pamięci flash / RAM potrzebujesz na mikrokontroler?

24

Załóżmy, że zaczynasz projekt osadzony ze znaną funkcjonalnością. Kiedy wybierasz mikrokontroler, jak wybierasz, ile pamięci RAM potrzebujesz?

Czy najpierw używasz płyty programisty i kodujesz swój projekt, a następnie sprawdzasz, ile pamięci użyłeś, a następnie wybierasz odpowiedni mikrokontroler, który pasuje do tej pamięci?

Czy po prostu wybierasz mocny mikrokontroler do prototypu, a następnie zmniejszasz go, gdy masz działający produkt?

Czy po prostu wybierasz coś, co na pewno będzie wystarczające, a jeśli zabraknie ci miejsca, po prostu zaktualizuj do większej gęstości pamięci, w przeciwnym razie po prostu zachowaj istniejący mikrokontroler?

Co uważa się za dobrą praktykę?

efox29
źródło
Wydaje mi się, że z teoretycznego punktu widzenia powinno być możliwe oszacowanie zapotrzebowania na pamięć RAM w zakresie wielkości (styl wnioskowania wymiarowego) na podstawie specyfikacji zadania. Hmmm ...
Lyndon White,
Jeśli korzystasz z bibliotek, możesz zbadać ich pamięć. Z własnym kodem musisz iść z doświadczeniem. Porównaj nowy projekt ze starymi i określ, czy spodziewasz się, że będzie większy czy mniejszy.
jwsc

Odpowiedzi:

20

Osobiście w projektach hobbystycznych używam najmocniejszego mikrokontrolera w rodzinie o odpowiednim rozmiarze. Następnie opracowuję płytkę drukowaną, piszę kod i tworzę prototyp.

Ma to tę zaletę, że znam dość małą liczbę mikrokontrolerów, więc mogę szybko prototypować bez konieczności czytania całego arkusza danych. Mam też dla nich tablice Breakout i szablony kodów.

Jeśli to działa i robię więcej niż garstkę, kupuję najtańszy mikrokontroler, który ma odpowiednie urządzenia peryferyjne i wystarczającą ilość pamięci do wszystkiego, co wcześniej kodowałem. Może to być denerwujące, jeśli zmienią się rejestry wewnętrzne (dzieje się to na PIC) lub jeśli jeden z mikrokontrolerów ma dodatkowe urządzenia peryferyjne, które należy wyłączyć, aby kod działał.

Jednak do celów produkcyjnych pozwoliłoby to na zmniejszenie ilości każdej jednostki.

David
źródło
W moich osobistych projektach stosuję podobne podejście. Ta sama metoda wkrada się do mnie również w biurze. To nie jest złe, działa, ale czy są lepsze sposoby itp. Doceń wejście!
efox29,
Na pewno będą lepsze sposoby w „prawdziwym” środowisku, poczekajmy na inne odpowiedzi!
David
Absurdalnie Rozwijaj w dużej piaskownicy, a później wycinaj. Czas, który zaoszczędzisz, pokryje więcej niż 4 USD wydane na mikrokontroler, na którym będziesz się rozwijać. Działa to nie tylko na poziomie hobby, ale w rzeczywistości jest jeszcze ważniejsze. Zdjęcie 12 osób czekających na zmianę na większy kontroler zamiast jednego !!
Scott Seidman
13

Oczywiście w przypadku pojedynczego domowego prototypu dobrym pomysłem może być rozpoczęcie od najpotężniejszego ze wszystkich kompatybilnych mikrofonów, a następnie zmniejszenie skali.

Jeśli jednak chcesz wygrać wycenę, musisz powiedzieć klientowi cenę, zanim będziesz mieć pieniądze na cokolwiek.

Dlatego dobrą praktyką jest zapisanie jakiejś specyfikacji przed rozpoczęciem programowania. Wiesz, co chcesz zrobić i powinieneś zapisać, jak zamierzasz to zrobić.

To „jak” obejmuje również myślenie o projekcie oprogramowania, odpowiadanie na pytania takie jak:

  • Potrzebujesz systemu operacyjnego? Który? Jakich zasobów potrzebuje?
  • Chcesz mieć architekturę warstwową? Wymaga to interfejsów, które mogą zużywać pamięć RAM
  • Jakie biblioteki są już dostępne i przydatne / niezbędne do Twojego celu i ile potrzebują pamięci (dobra dokumentacja biblioteki odpowiada na to w oparciu o co najmniej jedną kompilację referencyjną)?
  • Jakie struktury i zmienne musisz wdrożyć dla własnych sterowników i aplikacji?

Podsumowanie wszystkich tych wartości daje przybliżone oszacowanie. To, na ile możesz zaufać, zależy od tego, jak szczegółowa jest twoja analiza, i zależy od twojego doświadczenia :-)
Dodanie marginesu co najmniej 30..50% szacunków jest z pewnością dobrym pomysłem.

Gdy twój produkt zostanie ukończony i będziesz mieć około 80..90% pamięci RAM w użyciu, możesz być całkiem pewien, że twój wybór był właściwy - przynajmniej jeśli chodzi o pamięć RAM.

mikrofon
źródło
2
Odp: „80..90% używanej pamięci RAM”. Standardową praktyką jest zapewnienie maksymalnego wykorzystania tylko 50% zarówno procesora, jak i pamięci, aby móc pomieścić przyszłe aktualizacje i poprawki błędów.
Dunk
1
@Dunk: Zależy od firmy. W Automotive 80% wszystkich zasobów (CPU, RAM, Flash) w SOP jest powszechnie akceptowane. Na przykład w taniej elektronice użytkowej może być nawet więcej: na ile prawdopodobne jest uaktualnienie w systemie o żywotności zaledwie 2-3 lat?
mic
@Dunk: Mogę się mylić, ale wygląda na to, że przyzwyczaiłeś się do oprogramowania komputerowego z dynamiczną pamięcią i wszystkimi związanymi z tym niepewnościami. Zdecydowana większość wbudowanych aplikacji przydziela wszystko statycznie. Gwarantuje brak wycieków pamięci. Następnie możesz użyć dokładnie 100% i być w porządku na zawsze, dopóki go nie zmodyfikujesz. Oczywiście działa to tylko wtedy, gdy masz osobny stos z działającej pamięci RAM lub jeśli wiesz dokładnie, jak zachowa się cały stos. Warto zostawić na to trochę miejsca, ale 10-20% wystarczy na to, co zrobiłem.
AaronD
Największym problemem we wbudowanym oprogramowaniu są nieuczciwe wskaźniki, przepełnienie bufora, dzielenie przez zero i tym podobne. Niektóre MCU mogą zgłaszać wyjątki w sprzęcie, podobne do przerwań, ale wszystko, czego użyłem, będzie radośnie kontynuowane, jakby nic się nigdy nie wydarzyło. Będzie jakiś wynik, ale prawdopodobnie nie jest to oczekiwane, więc musisz to sprawdzić. Niektóre rzeczy, takie jak przepełnienie / niedopełnienie arytmetyki, można łatwo sprawdzić i natychmiast naprawić; inne rzeczy, takie jak nieuczciwe wskaźniki, mogą pozostać całkowicie niezauważone, dopóki funkcja, która działała przez lata, nie zdecyduje się wysadzić w powietrze.
AaronD
3
To, czy chcesz celować w 80%, czy w 50%, zależy od Twojego klienta. Przy stałej specyfikacji i wymaganych tylko poprawkach błędów 80% jest w porządku. Niewiarygodna specyfikacja, oczekiwane pełzanie funkcji i wystarczająco duży margines, aby pozwolić ci zapłacić dodatkową za więcej miejsca. Kiedyś kupiliśmy 2x tyle mikrokontrolerów, ile potrzebowaliśmy, i wybraliśmy te, które wystarczą do przetaktowania, aby zapewnić nam wymaganą wydajność, która była znacznie tańsza niż przeprojektowanie płytki drukowanej w celu uzyskania mocniejszego układu.
Mark Booth
3

Gdyby tylko możliwe było najpierw zakodowanie systemu wbudowanego, a następnie zbudowanie sprzętu. To ułatwiłoby wszystkim życie. Niestety oznacza to również, że terminy są poza oknem. Zazwyczaj sprzęt musi być zaprojektowany na długo przed wykonaniem oprogramowania, ponieważ części sprzętu często mają długi czas realizacji.

W związku z tym programiści oprogramowania wbudowanego SW będą zwykle musieli oszacować pamięć swojego programu i zapotrzebowanie na procesor. Pierwszym krokiem powinno być przekonanie osób zajmujących się sprzętem, aby dały ci najmocniejszy mikrokontroler / procesor z największą ilością pamięci RAM. To rzadko działa, ponieważ mają własne cele dotyczące wymagań, ale od czasu do czasu masz szczęście.

Jeśli to nie zadziała, następną rzeczą do zrobienia jest projektowanie oprogramowania na wysokim poziomie i rozbicie modułów na funkcje. Następnie oszacujesz wiersze kodu dla każdej funkcji dla każdego modułu w systemie. Następnie możesz użyć formuły, aby przekonwertować wiersze kodu na szacunkową pamięć kodu. Zbadasz również wszelkie nietypowe wymagania dotyczące pamięci (takie jak duże tablice) i dodasz szacunki, aby to uwzględnić. Następnie dodaj procent do tej sumy, aby pokryć wszystko, co przegapiłeś. Następnie podwoj to, aby spełnić typowe 50% wymaganie wykorzystania.

Tak, to wymaga czasu. Tak, konieczne jest przeskakiwanie przez wszystkie obręcze, ponieważ zmiana sprzętu jest naprawdę trudna po zbudowaniu.

Maczać
źródło
Gdzie możemy znaleźć wzór na konwersję wierszy kodu do pamięci kodu?
EasyOhm
To zależy od używanego języka i kompilatora. Jeśli użyjesz Asemblera, jedna linia w przybliżeniu równa się jednemu słowu pamięci (niezależnie od wielkości słowa twojego układu). Jeśli użyjesz C, może to być około 3-5 słów w wierszu, a jeśli użyjesz C ++ lub czegoś jeszcze bardziej złożonego, może być o wiele więcej. Najlepiej jest skompilować kilka programów napisanych w tym języku i porównać linie kodu z pamięcią kodu, aby uzyskać średnią.
Dakkaron
2

Ogólnie rzecz biorąc, dostawcy mikrokontrolerów umieszczają w swoich urządzeniach szereg pamięci odpowiednich do typowych zastosowań. Jeśli więc potrzebujesz tylko kilku pinów I / O i jednego SPI w małym urządzeniu, prawdopodobnie nie znajdziesz niczego, co jest dostarczane z 500 kB bajtów Flash i 64 kB bajtów RAM. W przypadku większych urządzeń, które są bliższe pakietom SoC, nawet najmniejsze jest prawie na pewno wystarczająco duże, chyba że planujesz poważne pauzowanie liczb, takie jak przetwarzanie obrazu.

W środowisku profesjonalnym kluczem do wyboru odpowiedniego mikrokontrolera jest wykorzystanie danych historycznych. Będziesz miał zapis innych opracowanych projektów i będziesz wiedział, jaka pamięć i inne zasoby krzemu są wymagane do wdrożenia każdej funkcji. Będziesz wiedział, co powinien zrobić produkt, a zatem będziesz mieć dobrą listę funkcji, a także będziesz mógł szybko i dokładnie obliczyć zasoby, które musi zapewnić mikrokontroler. Próba odgadnięcia wymagań dotyczących zasobów na podstawie wstępnej specyfikacji projektu (opracowanej na początku projektu, gdy dostępnych jest najmniej informacji o systemie) jest niewiarygodna w najlepszym momencie i tylko bardzo doświadczeni inżynierowie, którzy opracowali kompleksowe baza danych historycznych we własnych głowach odniesie jakikolwiek sukces w stosowaniu tej metody.

Wiele firm przyjęło podejście „zwinne” zarówno do oprogramowania, jak i do projektowania elektronicznego, które obejmuje zbudowanie „biblioteki” małych, funkcjonalnych kart (np. Kart RS-485, kart ADC itp.) Wraz z ogólnymi kartami platform obsługującymi mikrokontrolery , w podobny sposób jak korzystanie z zestawu deweloperskiego i wtyczek. Produkt można następnie szybko prototypować (w ciągu kilku godzin), wybierając i łącząc zestaw płyt wymaganych dla funkcji. Oprogramowanie jest podobnie złożone z modułów bibliotecznych i można je szybko przenosić i testować. Po określeniu rozmiaru części kodu specyficznej dla sprzętu zwykle wystarczy wybrać najmniejszą część, która będzie go zawierała. Wyjątkiem jest wspomniany powyżej, w którym funkcjonalność urządzenia obejmuje duże zbiory danych lub bardzo złożone algorytmy. Ta metoda zapewnia dokładne,

(Inną zaletą podejścia zwinnego jest to, że umożliwia równoległe tworzenie oprogramowania i elektroniki, przy czym projektowanie elektroniki stanowi ćwiczenie polegające na zintegrowaniu zestawu kart rozszerzeń i wykonaniu odpowiednich EMC i innych trudnych czynności w tym samym czasie, co opracowywane jest oprogramowanie aplikacji na zestawach protoype. Niektóre operacje przenoszenia i integracji są nadal konieczne, ale dzieje się tak, gdy dostępne jest zarówno działające oprogramowanie, jak i elektronika.)

Evil Dog Pie
źródło