Muszę zdecydować o wyborze rozmiaru Flash i pamięci RAM dla projektu. Mikrokontroler, którego wolę używać, to seria TI MSP430. Ze względu na niskie zużycie energii i koszt serii linii wartości. Jednak jestem kompletnym nowicjuszem w podejmowaniu decyzji dotyczących zbierania wymagań. Większość mojego doświadczenia w programowaniu dotyczy komputerów stacjonarnych, w których rozmiar programu, pamięć RAM i szybkość procesora nie stanowią problemu dla typowych zadań algorytmicznych.
Mam następujące pytania:
- Czy istnieją jakieś wytyczne lub standardowe praktyki dotyczące decydowania o wielkości pamięci RAM i Flash mikrokontrolera?
- Ile wierszy kodu (C) tłumaczy wielkość Flasha na MCU?
- Czy język asemblera jest jedynym wyjściem, jeśli rozmiar Flasha musi być ograniczony do minimum?
Jeśli chodzi o ogólny wybór mikrokontrolera do projektu, w jaki sposób specjaliści w tej dziedzinie decydują o wyborze najbardziej odpowiedniego mikrokontrolera do zadania? Jakie zasoby szukają? Jakie są ich wytyczne?
Jeśli chodzi o msp430, jest to dobra architektura, całkiem dobre narzędzia mspgcc i mspgcc4 i llvm do tego. binutils bez łatania. Możesz dostać starter za mniej niż 5 USD w tej cenie, kup kilka (w końcu coś stłuczesz lub zepsujesz i stopisz, otrzymasz zapas, szczególnie w tej cenie) ...
Pobierz narzędzia, wszystkie są bezpłatne, napisz kilka wierszy kodu, dowiedz się, jak go połączyć, zobacz, jak duży jest plik binarny, poznaj osadzone, wiersze kodu do rozmiaru romu itp.
Jak robią to profesjonaliści? Prawie każdy sposób, jaki możesz sobie wyobrazić:
Niektóre firmy mają wysoki poziom mandatu i nic nie można na to poradzić poza rezygnacją. I możesz nigdy nie wiedzieć, dlaczego wybrano tę platformę.
Czasami kontrahent / ulubiony klient dyktuje platformę, czasem możesz edukować / negocjować, a czasem nie.
Niektórzy ludzie po prostu lubią, strach przed nieznanym, cokolwiek. Ten sam powód, dla którego niektórzy ludzie kupują tylko jedną markę samochodu, ponieważ mój tata zrobił to, a jego tata zrobił to wcześniej, i to może być cały powód.
Niektórzy ludzie skupiają się na narzędziach. Znowu masz lojalnych ludzi, którzy ograniczają się do swojej ulubionej kompilatora i wszelkich obsługiwanych przez siebie celów lub ulubionego narzędzia open source i tego, co obsługuje. Ulubiony wbudowany system operacyjny i ograniczenie do obsługiwanych celów.
W niektórych przypadkach chodzi o narzędzia, ale w inny sposób, z czasem mogłeś zainwestować dużo pieniędzy w roczne umowy wsparcia ze sprzedawcą (na przykład arm, xilinx lub motorola) i być może spodobało Ci się ich wsparcie i nie chcesz się zmieniać, bo diabeł, którego znasz, jest lepszy niż diabeł, którego nie chcesz. A może dlatego, że z pozostałych 5 aktywnych projektów w firmie korzysta się z tej rzeczy, a my mamy już umowę wsparcia i będziemy płacić za rok po roku, musisz wybrać jedno z tych rozwiązań dostawców.
Czasami chodzi o uratowanie tysiącleci. Ta część jest o 1,5% tańsza niż ta część, spraw, aby działała z tą częścią, nie przejmuj się NRE, pomyśl o oszczędnościach produkcyjnych.
Czasami chodzi o negatywy. Jeden sprzedawca mógł spieprzyć twoją firmę w taki czy inny sposób. Niedotrzymanie reklamowanej dostawy części powodującej opóźnienia lub anulowanie Twoich produktów. Oszustwa związane z przynętą i zamianą (opłata 50 000 USD za oprogramowanie nie obejmowała opłaty 1200 USD za klucz sprzętowy wymagany do odblokowania licencji, co stanowi dodatkowy koszt. Och, i to było za użytkownika za licencję zmienną). Po podpisaniu umowy NDA w celu zapoznania się z podręcznikiem programisty lub przewodnikiem po projektowaniu referencji dowiadujesz się, jak straszna jest ich inżynieria, i możesz zdecydować o umieszczeniu na czarnej liście wszystkich swoich produktów na całe życie. Historia z okropnym wsparciem technicznym. Wiele powodów może spowodować, że nigdy nie dopuścisz sprzedawców do drzwi wejściowych lub powstrzymasz Cię od ponownego spojrzenia na ich stronę internetową.
Czasami ma to związek z wydajnością, interfejsami itp. Na przykład powiedzmy, że masz interfejs, który jest drutowy i wymaga podciągnięcia, mikrokontroler marki XYZ za 3 USD za część ma zestaw styków we / wy, których można użyć bez dodatkowego sprzętu zewnętrznego marka ABC ma część 3 USD, która będzie wymagała zewnętrznego tranzystora i rezystora, aby minimalnie działała. Twój przykład msp430, powiedzmy, że dotyczy zużycia energii, część A może wymagać od użytkownika użycia tylko jednej baterii AAA i działać przez miesiące, część B może wymagać dwóch baterii AAA i działać przez tygodnie.
Najrzadszym przypadkiem jest wykonanie inżynierii, badanie wszystkich dostawców, matematyka zużycia energii, cena za jednostkę matematyki produktu, to, ile potrzebujemy romu i na jakiej częstotliwości uruchomić układ, logika kleju, w kółko. Zwykle ktoś (szef / klient / starszy inżynier) bierze swoje wieloletnie doświadczenie i strzela z biodra (często używając jednego lub więcej z powyższych), aby wybrać ścieżkę (często dobra ścieżka oszczędzająca mnóstwo czasu w harmonogramie i dolarach) i inżynieria jest wykonywana raz, aby dostroić wybraną platformę.
Moje osobiste zalecenie jest elastyczne. Większość marek / rodzin mikrokontrolerów w jakiejś formie lub modzie może znajdować się na płycie eval za mniej niż 50 USD. Sparkfun, olimex lub bezpośrednio od dostawcy (ti dla msp430 lub stellaris itp.). Wypróbuj jedną lub więcej z nich, poczuj, co jest wspólne, a co inne, narzędzia, programy ładujące, jak trudno je odhaczyć itp. Otrzymujesz z tego co najmniej dwie rzeczy, jedną z nich jest to, że gdy jesteś zmuszany na ścieżce od klienta wysokiego lub klienta, możesz zacząć działać, po drugie, kiedy jest twoja kolej, aby wybrać platformę, jesteś lepiej wykształcony na temat tego, co jest i czego nie ma, i możesz wybrać odpowiednią (załadowaną słowo) platformę na podstawie problemu być rozwiązanym.
Nawet jeśli nie lubisz wydawać pieniędzy na sprzęt, większość ma narzędzia, które możesz pobrać (za darmo), w takich przypadkach jak mikroczip możesz teraz uzyskać kompilator C (wcześniej zaawansowany technologicznie), ale subskrybować (zrezygnować z adresu e-mail). gcc to polub lub nienawidzę, że będzie w przyszłości, na komputerze stacjonarnym lub wbudowanym, zabrudz swoje ręce i naucz się go używać jako kompilatora krzyżowego. Spróbuj też lvvm, będzie na jakiś czas i da gcc poważną konkurencję. W każdym razie napisz lub znajdź kilka emulatorów, mame ma wiele, gdb ma trochę itp. Napisałem taki o nazwie thumbulator w github, tylko tryb kciuka ARM, podobny do kory mózgowej-m3, z tym że nie obsługuję thumb2 (nadal mogę się sporo nauczyć i niech uruchomią się oba programy, zanim przełączysz się tylko na sprzęt). Podłączyłem emulator msp430, ale trochę się na tym utknąłem. Zestaw instrukcji jest tak mały, że większość pracy to projekt wieczorny lub może sobotni. To samo dotyczy PIC, długiego popołudnia i masz symulator zestawu instrukcji, z którym możesz ćwiczyć osadzony. Jeśli nic więcej nie możesz napisać, programy kompilują się i łączą, aby przekonać się, jak to zrobić i jak duże są programy, jak dostroić programy, aby tworzyły ściślejszy kod itp.
Jeśli chodzi o C vs asembler, niektóre zestawy instrukcji są przyjazne dla C, a niektóre nie. Niektóre kompilatory są średnie, a niektóre są naprawdę złe, a tylko kilka jest naprawdę dobrych (i zwykle kosztuje kilka tysięcy dolarów rocznie lub raz w roku). Podobnie jak w przypadku wydajności w dowolnym miejscu, jeśli chcesz ją naprawdę popchnąć, może być wymagana mieszanka języka wysokiego poziomu (powiedzmy C) i asemblera. Więc umiejętność nie polega na pisaniu całej aplikacji w asemblerze, umiejętność określa, który kod powoduje, że nie osiągasz czasu / wydajności, a następnie umiesz to rozwiązać poprzez C, opcje kompilatora, wybór odpowiedniego kompilatora lub pisanie asemblera.
Polecam znać asemblera dla wszystkich platform, które zdecydujesz się użyć, jeśli nic innego nie da się go odczytać tak jak w przypadku osadzania, zalecamy częste demontowanie (jednocześnie zastanawiając się, gdzie są twoje problemy z wydajnością). Wiele platform i tak wymaga jakiegoś asemblera do kodu rozruchowego.
Jeśli chcesz zaoszczędzić 10-20% na cenie za sztukę i chcesz kupić tańszy / wolniejszy mikrokontroler lub oscylator, albo część flashową 32Kb zamiast części flashowej 64KB i możesz pokryć koszty rozwoju wielkością sprzedaży, oraz być może długą listę innych rzeczy, które możesz bardzo dobrze napisać w asemblerze, szybko, o niskiej mocy, niskim koszcie, zadowoleni klienci.
W zależności od twojego dotychczasowego doświadczenia, być może nie powinieneś martwić się pisaniem we wszystkich asemblerach, a może także aspektami elektrotechnicznymi osadzonymi w mikrokontrolerach, czytaniem schematów, wiedząc, jaki otwarty kolektor, tri state, push pull, pwm, adc, dac i długa lista innych terminów i sposób ich użycia. bit banging i2c, spi, mdio, dallas one wire itp. Używanie lunety jako programowego debuggera. Mimo że lunety mogą dziś podświetlać dla ciebie rzeczy (pozycja za dodatkową opłatą), powinieneś być w stanie spojrzeć na i2c i spi i niektóre inne protokoły bez wyróżnień.
Polecam również, aby na każdej platformie, na której grasz, wydostań się z innej piaskownicy (na przykład środowisko programowania / ide Arduino). Napisz kod startowy, który zabiera procesor z resetowania do programu main (), zrób tyle, ile możesz, aby zrozumieć, jak załadować / zaprogramować pamięć flash do punktu, który może wymagać napisania własnego programu ładującego, nawet jeśli są one na półce tam. Chodzi o edukację osobistą, im więcej wiesz i możesz wyciągnąć z tylnej kieszeni i użyć większej kontroli nad swoją karierą i tym więcej zer na końcu numeru wypłaty.
Cokolwiek robisz, NIE próbuj uczyć się x86 jako pierwszego asemblera na pulpicie, wybierz prawie wszystko inne i krzyżuj kompilację i symuluj, ARM, THUMB, MSP430, PIC, AVR, a nawet 6502, 8051. x86 to straszna instrukcja zestaw, w wyniku czego został przekształcony i ukształtowany na wiele sposobów, mikrokodowany, a nie mikrokodowany, wielordzeniowy, w kółko. Zachowaj x86 do języków wysokiego poziomu i nieporęcznych systemów operacyjnych. Użyj go do edytora tekstu i kompilatorów i celuj w coś innego.
Przepraszam za długą odpowiedź ... mam nadzieję, że była pomocna.
źródło
Najlepszym sposobem na określenie wymagań flash / RAM dla twojego projektu jest zbudowanie prototypu i zmierzenie go.
Zaimplementuj podstawowe algorytmy na komputerze i oblicz rozmiar kodu obiektowego i użycie pamięci RAM. To da ci figurę do gry w piłkę.
Nie zapomnij dodać więcej do swojego budżetu, jeśli korzystasz z funkcji systemu operacyjnego, takich jak stdio lub zarządzanie pamięcią.
Nie ma bezpośredniego sposobu na porównanie Lines of Code do skompilowanego rozmiaru kodu. Można jednak porównać architektury procesorów pod względem gęstości kodu.
źródło
Myślę, że najlepszym sposobem, aby poczuć, jakie są twoje wymagania, w tym przypadku pod względem pamięci jest pobranie próbek MCU, zaprogramowanie go i sprawdzenie, ile pamięci jest używane. W rzeczywistości będzie to zależeć od użytego kompilatora. Jeśli programujesz MCU po raz pierwszy, nie przejmuj się zbytnio specyfikacjami. Wybierz jeden z dużą ilością pamięci, wieloma urządzeniami peryferyjnymi itp. W ten sposób możesz się wiele nauczyć z jednego MCU. Kiedy tworzysz swój pierwszy projekt za pomocą tego MCU, będziesz mieć lepsze pojęcie o pamięci potrzebnej do dalszych projektów.
Najbardziej odpowiedni MCU dla zadania? Ile kanałów ADC potrzebujesz? Co z DAC? Co jest ważniejsze w twojej aplikacji: wydajność czy niska moc? Czy na takie pytania musisz odpowiedzieć przy wyborze konkretnego MCU.
źródło
Wybierz mikrokontroler z zestawem potrzebnych urządzeń peryferyjnych. Prawdopodobnie będzie rodzina mikrosów, które mają takie same / podobne urządzenia peryferyjne, ale różne ilości pamięci RAM i Flash. Zacznij od układu z największą pamięcią RAM / Flash. Gdy masz już działający prototyp, możesz spaść do tańszej mikro, jeśli twój program będzie pasował.
źródło
Prawdziwi profesjonaliści nie wybierają mikrokontrolera w oderwaniu, prowadzą projekt dla maksymalnego zysku. W zależności od kryteriów projektu, które mogą spowodować wybór mikrokontrolera, który wydaje się być zbyt drogi, ale zdarza się, że dobrze pasuje do dostępnej wiedzy specjalistycznej, narzędzi, bibliotek itp. Nie podejmuj odosobnionych decyzji, pamiętaj o dużym obrazie , zwłaszcza suma (koszty rozwoju + koszty produkcji)!
Większość producentów mikrokontrolerów oferuje zakresy układów, z rozmiarem flash jednym z parametrów różniących się w zależności od układu. „Bezpiecznym” wyborem jest początkowe wybranie układu o największym rozmiarze pamięci flash, aby można było go zmniejszyć, jeśli aplikacja mieści się w mniejszym układzie. Ale aplikacje mają tendencję do powiększania się, aby pasowały do wszystkich dostępnych rozmiarów (i więcej).
Rozmiar pamięci flash IME nie jest już dużym czynnikiem kosztowym, nawet liczba pinów jest mniejsza, rozmiar RAM wydaje się być największym czynnikiem kosztowym.
źródło