최적화
임베디드 시스템의 저수준 프로그래밍은 컴퓨터 및 휴대폰과 같은 범용 장치의 프로그래밍과는 상당히 다릅니다. 자원은 매우 중요하기 때문에 효율성 (속도 및 공간 측면)이 훨씬 중요합니다. 공간이 부족한 경우 가장 먼저해야 할 일은 코드의 어떤 부분을 최적화 할 수 있는지 확인하는 것입니다.
프로그램 공간 (플래시) 사용을 줄이려면 경험이 부족하거나 해당 기술이 필요하지 않은 데스크톱 컴퓨터 프로그래밍에 더 익숙하다면 코드 크기를 최적화하기가 매우 어려울 수 있습니다. 불행히도 모든 상황에서 작동하는 '마법의 탄환'접근법은 없지만 스케치가 실제로 필요한 것을 진지하게 고려하면 도움 이됩니다. 기능이 필요하지 않은 경우 제거하십시오.
때로는 코드의 여러 부분이 동일한 (또는 매우 유사한) 위치를 식별하는 것이 도움이됩니다. 여러 곳에서 호출 할 수있는 재사용 가능한 기능으로 압축 할 수 있습니다. 그러나 때때로 코드를 너무 재사용 할 수있게 만들면 실제로는 더 장황하게됩니다. 연습에 따르는 경향이있는 파업은 까다로운 균형입니다. 코드 변경이 컴파일러 출력에 어떤 영향을 미치는지 살펴 보는 데 약간의 시간이 소요됩니다.
SRAM (런타임 데이터) 최적화는 익숙 할 때 약간 더 쉬운 경향이 있습니다. 초보자 프로그래머에게 가장 흔한 함정은 너무 많은 글로벌 데이터를 사용하는 것입니다. 전체 범위에서 선언 된 것은 스케치의 전체 수명 동안 존재하며 항상 필요한 것은 아닙니다. 변수가 하나의 함수 내에서만 사용되며 호출간에 지속될 필요가없는 경우 로컬 변수로 만듭니다. 함수간에 값을 공유해야하는 경우 전역으로 만드는 대신 매개 변수로 전달할 수 있는지 고려하십시오. 그렇게하면 실제로 필요할 때 해당 변수에 대해서만 SRAM을 사용하게됩니다.
SRAM 사용의 또 다른 킬러는 텍스트 처리 (예 : String
클래스 사용)입니다. 일반적으로 가능하면 문자열 작업을 수행하지 않아야합니다. 그들은 거대한 메모리 호그입니다. 예를 들어 많은 텍스트를 직렬로 출력하는 경우 Serial.print()
문자열 연결 대신 여러 번의 호출을 사용하십시오. 또한 가능한 경우 코드에서 문자열 리터럴 수를 줄이십시오.
가능하면 재귀를 피하십시오. 재귀 호출이 이루어질 때마다 스택의 레벨이 더 깊어집니다. 재귀 함수를 반복적으로 리팩토링하십시오.
EEPROM 사용 EEPROM
은 가끔 변경되는 것의 장기 저장에 사용됩니다. 큰 목록 또는 고정 데이터의 룩업 테이블을 사용해야하는 경우 사전에 EEPROM에 저장하고 필요한 경우 필요한 항목 만 꺼내십시오.
분명히 EEPROM은 크기와 속도가 상당히 제한되어 있으며 쓰기주기가 제한되어 있습니다. 데이터 제한에 대한 훌륭한 솔루션은 아니지만 플래시 또는 SRAM의 부담을 덜어주기에 충분할 수 있습니다. SD 카드와 같은 유사한 외부 저장소와 인터페이스하는 것도 가능합니다.
확장
다른 모든 옵션을 다 사용한 경우 확장이 가능할 수 있습니다. 불행히도 프로그램 공간을 늘리기 위해 플래시 메모리를 확장하는 것은 불가능합니다. 그러나, 이다 SRAM을 확장 할 수. 즉, 데이터 크기를 늘리는 대신 코드 크기를 줄이기 위해 스케치를 리팩터링 할 수 있습니다.
더 많은 SRAM을 얻는 것은 실제로 매우 간단합니다. 하나의 옵션은 하나 이상의 23K256 칩 을 사용하는 것 입니다. SPI를 통해 액세스되며 SpiRAM 라이브러리 가있어이를 사용하도록 도와줍니다. 5V가 아닌 3.3V에서 작동한다는 점에 유의하십시오 !
Mega를 사용하는 경우 Lagrangian Point 또는 Rugged Circuits 에서 SRAM 확장 쉴드를 얻을 수도 있습니다.