Alternatywny widok: w mikrokontrolerach nie brakuje pamięci.
Przynajmniej nie po prawidłowym zaprogramowaniu. Programowanie mikrokontrolera nie jest dokładnie tak samo jak programowanie ogólnego przeznaczenia, aby zrobić to poprawnie, musisz być świadomy jego ograniczeń i odpowiednio programować. Istnieją narzędzia, które pomogą to zapewnić. Wyszukaj je i naucz się - przynajmniej jak czytać skrypty linkera i ostrzeżenia.
Jednak, jak mówią Majenko i inni, źle zaprogramowanemu mikrokontrolerowi może zabraknąć pamięci, a następnie zrobić cokolwiek, w tym nieskończoną pętlę (co przynajmniej daje zegarowi nadzorującemu szansę na jego zresetowanie. Włączyłeś zegar nadzoru, prawda? )
Wspólne reguły programowania mikrokontrolerów unikają tego: na przykład cała pamięć jest albo przydzielana na stosie, albo statycznie (globalnie) przydzielana; „nowe” lub „malloc” są zabronione. Podobnie jest z rekurencją, aby maksymalna głębokość zagnieżdżenia podprogramu mogła zostać przeanalizowana i pokazana, aby pasowała do dostępnego stosu.
Zatem maksymalną wymaganą pamięć można obliczyć, gdy program jest kompilowany lub połączony, i porównać z wielkością pamięci (często zakodowaną w skrypcie linkera) dla konkretnego procesora, na który celujesz.
Wtedy mikrokontroler może nie zabraknąć pamięci, ale twój program może. I w takim przypadku dojdziesz do
- przepisz to, mniejsze lub
- wybierz większy procesor (często są one dostępne z różnymi rozmiarami pamięci).
Jednym wspólnym zestawem zasad programowania mikrokontrolerów jest MISRA-C , przyjęty przez przemysł motoryzacyjny.
Moim zdaniem najlepszą praktyką jest korzystanie z podzestawu Ady SPARK-2014 . Ada faktycznie atakuje stosunkowo małe kontrolery, takie jak AVR, MSP430 i ARM Cortex, i z natury zapewnia lepszy model programowania mikrokontrolera niż C. Jednak SPARK dodaje do programu adnotacje w formie komentarzy, które opisują jego działanie.
Teraz narzędzia SPARK przeanalizują program, w tym te adnotacje, i udowodnią jego właściwości (lub zgłoszą potencjalne błędy). Nie musisz marnować czasu ani miejsca na kod, zajmując się błędnym dostępem do pamięci lub przepełnieniem liczb całkowitych, ponieważ udowodniono, że nigdy się nie zdarzają.
Chociaż SPARK wymaga więcej pracy z góry, doświadczenie pokazuje, że może dostać się do produktu szybciej i taniej, ponieważ nie spędzasz czasu na tajemniczych restartach i innych dziwnych zachowaniach.
Porównanie MISRA-C i SPARK