때때로 arduino에 삽입하려는 임베디드 C 프로그램에 대한 프로그램 크기의 공간이 부족합니다. 그렇다면 arduino에서 더 큰 C 프로그램을 사용할 수 있도록 arduino의 프로그램 메모리를 확장하려면 어떤 칩이 필요합니까?
코멘트
- 고려 Petri H라는 이름의 동료 ä kkinen 이 아케이드 스타일 게임 , 코드에서 공간 절약을 고려해야할까요? 일부 답변에서 알 수 있듯이 이것이 ' 실용적이지 않다면 더 많은 프로그램 메모리로 더 큰 칩을 얻을 수 있습니다. 예를 들어 Atmega644는 무엇보다도 DIP 칩 패키지로 제공됩니다.
- forum.arduino.cc/index.php?topic= 참조 226465.0
- 답변을 좀 더 설명해 주시겠습니까? 2) Arduino에는 SPI가 있으므로 SD 카드에 액세스 할 수 있습니다. SD 카드의 모든 코드는 실행 가능한 메모리에로드해야합니다. 이것은 복잡하고 초보자를위한 것이 아닙니다. 프로그램이 실행되는 동안 명령 메모리를 변경하거나 다시 프로그래밍 할 수 있다는 의미입니까? 실행중인 프로그램이 부트 로더를 호출하고 다른 주소에 새 명령을로드 할 수 있습니까? ´이 나이가 프로그램 메모리를 차지하지 않았습니까? 다른 솔루션은 프로그램의 루틴과 모든 " 호출 ´ s " spi 외부 메모리에 데이터를 저장했습니다 … 감사합니다!
답변
ATmega2560은 Uno에서 프로그램 메모리가 부족할 때 더 많은 메모리를 추가하는 칩. arduino.cc의 Memory 웹 페이지를 참조하면 Flash = 256KB, SRAM = 8KB, EEPROM = 4KB가 있으며 ATmega328 칩이있는 것을 볼 수 있습니다. Uno에는 Flash = 32KB, SRAM = 2KB, EEPROM = 1KB가 있습니다.
Uno에서 프로그램 메모리가 부족할 때 실용적인 선택이 약 세 가지 있습니다. 프로그램 크기를 줄이고 부트 로더를 제거합니다. (1 개 또는 2KB를 확보하기 위해) 더 많은 기능을 갖춘 프로세서가있는 다른 보드를 사용합니다. Uno 보드의 CPU는 온칩 32KB 플래시 이외의 위치에서 프로그램 바이트에 액세스 할 수있는 방법이 없습니다. Mega2560 보드의 CPU는 플래시의 8 배로 시작하므로 Uno보다 더 큰 프로그램을 저장할 수 있습니다.
부트 로더를 제거하면 USBASP 보드를 사용하여 프로그래밍 할 수 있습니다. learningaboutelectronics.com의 “10 핀 케이블이있는 USBASP를 사용하여 AVR 칩 프로그래밍” 기사에서.
댓글
- 하지만 부트 로더를 비우면 arduino IDE를 사용하여 프로그래밍하는 방법은 무엇입니까?
- @ qwerty10, 편집의 마지막 단락을 참조하십시오. Arduino IDE는 USBASP를 지원합니다.
- ATMEGA에 코드를 업로드 할 수있는 프로그래머와 작동하지 않습니까? USBASP 대신. 내가 이해하기로는 실제로 10 개의 핀을 사용하는 것이 아니라 해당 핀의 하위 집합입니다.
- @ qwerty10, USPASP는 ISP (시스템 프로그래밍) 프로그래머입니다. 일반적으로 대상 칩에서 MOSI, MISO, SCK, RST, VCC 및 GND 핀을 사용할 수있는 한 모든 ISP 프로그래머가 칩을 프로그래밍하는 데 사용할 수 있습니다 (부트 로더가 있거나없는 경우).
- 현재 Unos는 매우 컴팩트 한 optiboot 부트 로더를 사용합니다. 제거하면 512 바이트 만 확보됩니다.
Answer
다른 방법 (메모리가 더 많은 MCU 이외의 다른 방법)은 Arduino 프레임 워크 및 해당 라이브러리를 사용하지 않습니다. 이러한 추상화 수준은 메모리 사용량과 속도 측면에서 비용이 많이 듭니다. 그러나 그것은 훨씬 더 어려운 방법입니다. 라이브러리가 필요한 경우이를 포팅하거나 (기본 라이브러리를 찾지 못한 경우) 적어도 Arduino에서 필요한 기능을 제공해야합니다.
예를 들어 Arduino IDE에서 1.6.11 빈 스케치는 최대 444 바이트의 플래시를 사용합니다. 하나의 pinMode
및 digitalWrite(13, ! digitalRead(13));
+ delay(500);
를 사용하면 964 바이트를 의미합니다. 물론 이들은 일회성 일 가능성이 큽니다. 6 개의 핀을 더 사용하고 토글하면 첫 번째 핀 (1192B)을 사용하는 것보다 훨씬 적은 프로그램 메모리를 사용합니다. 하지만 여전히 매우 빠르게 성장합니다.
순수 C에서 빈 프로그램은 약 134 바이트 길이입니다. 동일한 기능 (500ms마다 하나의 핀 전환)은 158 바이트가 걸립니다 (훨씬 더 빠름).
하지만 취미 프로젝트의 경우 대신 ATMega2560 또는 ATMega644 / 1284를 사용합니다.
또한 하드웨어에 직접 액세스 할 수도 있습니다. 레지스터를 직접 사용하여 핀 스케치를 전환하고 avr 라이브러리의 _delay_ms는 964B 대신 468 바이트를 사용합니다. Arduino 코어 라이브러리에서 지연되면 602B입니다.
댓글
댓글
-
_delay_ms()
를 의미합니다.
- 이것은 실제로 MCU에 대해 학습하는 추가 이점이 있습니다. ' 사용 중입니다. 이러한 Arduino의 AVR은 " 표준 라이브러리 "가 믿고있는 것보다 훨씬 더 많은 기능을 제공합니다.++
_delay_ms()
를 의미합니다. 답변
라즈베리 파이는 어떻습니까? 0 ? 나는 몇 가지가 있으며 arduino로 자주 사용합니다.
코멘트
- 실제로 다른 아키텍처를 고려해야하지만 파이와 같은 필수 SD 카드 부팅 이있는 임베디드 Linux 시스템 많은 복잡성을 추가하고 더 비싸지는 않더라도 독특한 방식으로 깨지기 쉽습니다. 애플리케이션 측면에서 Arduino와 훨씬 더 유사하면서도 훨씬 더 많은 기능을 제공하는 더 작고 고도로 통합 된 ARM MCU를 기반으로하는 보드가 많이 있습니다. 하지만 처리량이 많거나 메가 바이트의 메모리가 필요한 경우 이러한 복잡성이 그만한 가치가 있기 시작합니다.
- 또한 매우 유연하기 때문에 0을 선호합니다. 스토리지를 추가하거나 프로젝트에 임베드하는 동시에 거의 모든 작업을 수행 할 수있는 충분한 프로세서를 보유 할 수 있습니다.
답변
다른 플랫폼도 살펴볼 수 있습니다. 예를 들어 Teensy 3.2는 Arduino와 호환되며 2KB eeprom과 64KB RAM이 있습니다.
Answer
Wen ask a broad 질문, 몇 가지 세부 사항을 포함하는 것이 도움이됩니다. 메모리의 양과 필요하다고 생각하는 이유를 좋아합니다.
한때 2KB 프로그램 공간, 64 바이트 RAM 및 1KIPS에서 프로세서를 지정했습니다. 엔지니어는 MIPS에게 물었다. 나는 초당 수천을 설명했다. 그는 “그렇게 느리게 오지 않는다”고 답했다. 프로젝트가 끝날 무렵에는 거대한 UI가 추가되고 메모리가 꽉 찼지만 … 그래도 문제없이 맞습니다.
그러니 더 사려 깊게 고려해보세요. 사용중인 리소스에 대해.
질문에 답하려면 :
1) Arduino는 메모리를 가져 오는 편리한 버스를 제공하지 않습니다. 따라서 더 많은 메모리를 얻기 위해 칩.
2) Arduino에는 SPI가 있으므로 SD 카드에 액세스 할 수 있습니다. SD 카드의 모든 코드를 실행 가능한 메모리에로드해야합니다. 이것은 복잡하며 초보자에게는 적합하지 않습니다. …
3) 제안 된대로 코드를 조입니다. 이것은 아마도 배우는 좋은 방법 일 것입니다.
3) 더 큰 Arduino로 이동하십시오.
다른 Arduino 프로세서가 있습니다. 일부는 ACR 라인에, 다른 프로세서는 ARM 라인에 있습니다. 같은 제품군의 다른 장치로 이동하는 것은 비교적 겸손한 변경이며 최대 368 바이트의 프로그램 FLASH를 제공 할 수 있습니다. 그러나 이들은 Arduino 보드가 아닙니다. 정확히.
Arduino ARM 기반 장치는 매우 다르며 다른 라이브러리를 사용하세요.
Arduino Mega 2560을 확인하세요.이 제품은 Uno와 매우 유사하고, 풋 프린트가 비슷하며, 코드는 비교적 쉽게 이식 할 수 있고 저렴해야합니다.
더 큰 장치가 있습니다. AVR 제품군에서.
참고, AVR32는 다른 프로세서이고 주변 장치는 다른 장치이므로 충분히 다릅니다.
매우 큰 프로그램을 사용하려는 경우 ( 기가 바이트 메모리) Beagleboard를 확인하십시오. 가상 메모리 (위의 # 2 참조)가있는 완전한 Linux와 더 강력한 I / O 메커니즘이 있습니다.
댓글
- Wen, 3 및 differentnt와 같은 오타
- 오타를 수정하면 누군가가 귀하의 답변에 투표 할 수 있습니다 …