다른 견해 : 마이크로 컨트롤러의 메모리가 부족하지 않습니다.
적어도 제대로 프로그래밍되지 않았을 때. 마이크로 컨트롤러를 프로그래밍하는 것은 범용 프로그래밍과 정확히 같지 않으므로 올바르게 수행하려면 제한 조건과 프로그램을 알고 있어야합니다. 이를 보장하는 데 도움이되는 도구가 있습니다. 적어도 링커 스크립트와 경고를 읽는 방법을 찾아서 배우십시오.
그러나 Majenko와 다른 사람들이 말했듯이 잘못 프로그래밍 된 마이크로 컨트롤러에는 메모리가 부족한 다음 무한 루프 (적어도 워치 독 타이머가 재설정 할 수있는 기회를 제공합니다. 워치 독 타이머를 활성화 했습니까?)를 포함하여 무엇이든 할 수 있습니까? )
마이크로 컨트롤러에 대한 일반적인 프로그래밍 규칙은이를 피합니다. 예를 들어, 모든 메모리는 스택에 할당되거나 정적으로 (전역 적으로) 할당됩니다. "new"또는 "malloc"은 금지되어 있습니다. 서브 루틴 중첩의 최대 깊이를 분석하고 사용 가능한 스택에 맞게 표시 할 수 있도록 재귀도 마찬가지입니다.
따라서 필요한 최대 스토리지는 프로그램이 컴파일되거나 링크 될 때 계산 될 수 있으며 대상 프로세서의 특정 프로세서에 대한 메모리 크기 (종종 링커 스크립트로 인코딩 됨)와 비교 될 수 있습니다.
그런 다음 마이크로 컨트롤러에 메모리가 부족하지는 않지만 프로그램이 손상 될 수 있습니다. 이 경우에는
- 다시 쓰거나 작게 또는
- 더 큰 프로세서를 선택하십시오 (메모리 크기가 다른 경우가 많습니다).
마이크로 컨트롤러 프로그래밍에 대한 일반적인 규칙 세트 는 모터 산업에서 채택한 MISRA-C 입니다.
필자의 관점에서 SPARK-2014 Ada 하위 집합 을 사용하는 것이 가장 좋습니다. Ada는 실제로 AVR, MSP430 및 ARM Cortex와 같은 소형 컨트롤러를 합리적으로 잘 대상으로하며 본질적으로 C보다 마이크로 컨트롤러 프로그래밍을위한 더 나은 모델을 제공합니다. 그러나 SPARK는 주석을 프로그램 형태로 설명에 추가합니다.
이제 SPARK 도구는 해당 주석을 포함하여 프로그램을 분석하고 해당 속성을 증명하거나 잠재적 오류를보고합니다. 잘못된 메모리 액세스 또는 정수 오버플로를 처리하는 데 시간이나 코드 공간을 낭비하지 않아도 결코 발생하지 않는 것으로 입증되었습니다.
SPARK와 관련된 선행 작업이 더 많지만 신비한 재부팅 및 기타 이상한 동작을 쫓는 데 시간을 소비하지 않기 때문에 더 빠르고 저렴하게 제품을 얻을 수 있다는 경험이 있습니다.
MISRA-C와 SPARK의 비교