Hvordan udvider jeg programhukommelsen på en arduino?

Nogle gange løber jeg tør for plads af programstørrelsen til det indlejrede C-program, som jeg vil lægge på en arduino. Så hvilken chip har jeg brug for for at udvide arduinoens programhukommelse, så jeg kan bruge større C-programmer med min arduino?

Kommentarer

  • Overvejer at en fyr ved navn Petri H ä kkinen satte et arkadespil på en Atmega328P, måske skal du se på at spare plads i din kode? Hvis det ikke er ‘ t praktisk, som nogle af svarene siger, kan du få en større chip med mere programhukommelse. Atmega644 kommer f.eks. I en DIP-chip-pakke.
  • Se også forum.arduino.cc/index.php?topic= 226465.0
  • kan du venligst forklare lidt mere dit svar? 2) Arduino har SPI, så der er adgang til et SD-kort. Enhver kode på SD-kortet skal indlæses i eksekverbar hukommelse. Dette er kompliceret og ikke for begyndere … Du mener, at du kan ændre eller omprogramme instruktionshukommelsen, mens programmet kører? Kan det kørende program ringe til bootloaderen og indlæse nye instruktioner på forskellige adresser? Vandt ´ i denne alder programhukommelsen? En anden løsning kan være at identificere rutiner i dit program, og alle ” kald ´ s ” gemt med dataene i en ekstern hukommelse til spi … Tak!

Svar

En ATmega2560 er chip til at tilføje for mere hukommelse, når du løber tør for programhukommelse på en Uno. Med henvisning til websiden Memory på arduino.cc vil du se, at den har Flash = 256KB, SRAM = 8KB, EEPROM = 4KB, hvor ATmega328-chip på Uno har Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

Når du løber tør for programhukommelse på en Uno, har du omkring tre valg, der er praktiske: Gør programmet mindre; fjern bootloaderen (for at frigøre en eller to KB); brug et andet kort med en mere kapabel processor. CPUen på et Uno-kort har ikke en måde at få adgang til programbyte fra andre steder end 32-kB flash på chip. CPUen på et Mega2560-kort starter med 8 gange så meget flash, så det kan rumme større programmer end en Uno-dåse.

Hvis du fjerner bootloaderen, kan du i stedet programmere ved hjælp af et USBASP-kort, som beskrevet i en “Programmer AVR-chip ved hjælp af et USBASP med 10-pin-kabel” artikel på learningaboutelectronics.com.

Kommentarer

  • men hvis du frigør bootloaderen, hvordan skal jeg så bruge arduino IDE til at programmere?
  • @ qwerty10, se sidste afsnit om redigering. Arduino IDE understøtter USBASP ok.
  • Ville det ikke fungere med nogen programmør, der kan uploade kode til ATMEGA? I stedet for kun en USBASP. Som jeg forstår det, bruger det faktisk ikke 10 ben, men en delmængde af disse ben.
  • @ qwerty10, USPASP er en ISP-programmerer (i systemprogrammering). Generelt kan enhver ISP-programmør bruges til at programmere en chip (med eller uden en bootloader på den) så længe MOSI-, MISO-, SCK-, RST-, VCC- og GND-ben er tilgængelige på målchippen.
  • Nuværende Unos bruger den meget kompakte optiboot bootloader. Fjernelse af det frigør kun 512 byte.

Svar

En anden måde (bortset fra MCU med mere hukommelse) er bruger ikke Arduino framework og dets biblioteker. Et sådant abstraktionsniveau er dyrt på begge måder – hukommelsesforbrug og hastighed. Men det er meget sværere. Hvis du har brug for noget bibliotek, skal du portere det (hvis du ikke har fundet et oprindeligt) eller i det mindste give de nødvendige funktioner fra Arduino.

For eksempel i Arduino IDE 1.6.11 tom skitse bruger op til 444 Bytes flash. Brug af en pinMode og digitalWrite(13, ! digitalRead(13)); + delay(500); betyder 964 byte. Selvfølgelig er disse sandsynligvis engangsbegyndere. Hvis du bruger seks flere ben og skifter den, bruger den meget mindre programhukommelse end at bruge den første (1192B). Men den vokser stadig rigtig hurtigt.

I ren C er tomt program ca. 134 Bytes langt. Samme funktionalitet (at skifte en pin hver 500 ms) tager 158 Bytes (og det er langt hurtigere).

Men for hobbyprojekt ville jeg i stedet gå til ATMega2560 eller ATMega644 / 1284.

Og du kan også bruge direkte adgang til hardware. Skift pin-skitse med brug af registre direkte, og _forsink_ms fra avr-biblioteker bruger 468 Bytes i stedet for 964B. Med forsinkelse fra Arduino-kernebiblioteker er det 602B.

Kommentarer

  • Du mener _delay_ms().
  • Dette har den ekstra fordel, at du faktisk lærer om MCUen, som du ‘ genbruger. AVRerne på disse Arduinos er meget mere i stand end ” standardbiblioteket ” ville have dig til at tro.++

Svar

Hvad med et hindbær pi nul ? Jeg har et par og bruger dem ret ofte som arduinos.

Kommentarer

  • Andre arkitekturer bør faktisk overvejes, men et indlejret linux-system med obligatorisk opstart af SD-kort ligesom pi tilføjer meget kompleksitet og er skrøbelig på unikke måder, selvom det ikke er dyrere. Der er mange bestyrelser baseret på mindre, mere stærkt integrerede ARM MCUer, som ligner meget en Arduino med hensyn til applikationer, mens de er drastisk mere i stand. Men hvis du har brug for en masse behandling eller megabyte hukommelse, så ja, disse kompleksiteter begynder at være umagen værd.
  • Jeg foretrækker også nul, fordi det er så fleksibelt. Du kan tilføje mere lagerplads eller integrere det i projekter, mens du også har en stor nok processor til at gøre stort set alt.

Svar

Du kan også se på andre platforme. For eksempel er en Teensy 3.2 Arduino-kompatibel og har en 2KB eeprom og 64KB RAM.

Svar

Vi beder en bred spørgsmål, er det nyttigt at medtage nogle detaljer. Ligesom hvor meget hukommelse, og hvorfor du tror, du har brug for det.

Jeg angav en gang en processor på 2 KB programplads, 64 bytes RAM og 1 KIPS. Ingeniøren spurgte, MIPS, jeg forklarede tusinder i sekundet. Han svarede, de kommer ikke så langsomt. I slutningen af projektet blev der tilføjet et stort brugergrænseflade, og hukommelsen blev stram … men passer stadig uden problemer.

Så overvej at være mere tankevækkende om de ressourcer, der bruges.

For at besvare spørgsmålet:

1) Arduino giver ikke en praktisk bus til at hente hukommelse over. Så der er ingen måde at tilslutte en chip for at få mere hukommelse.

2) Arduino har SPI, så der er adgang til et SD-kort. Enhver kode på SD-kortet skal indlæses i eksekverbar hukommelse. Dette er kompliceret og ikke for begyndere …

3) Som foreslået skal du stramme din kode op. Dette er sandsynligvis en god måde at lære på.

3) Gå til en større Arduino.

Der er forskellige Arduino-processorer. Nogle i ACR-linjen, andre på ARM-linjen. At gå til en anden enhed i samme familie er en relativt beskeden ændring og kan give op til 368 Bytes progam FLASH. Men dette er ikke Arduino-kort nøjagtigt.

De Arduino ARM-baserede enheder er meget forskellige og brug forskellige biblioteker.

Tjek Arduino Mega 2560, den ligner meget på Uno, har et lignende fodaftryk, koden skal portes relativt let og er billig.

Der er større enheder i AVR-familien.

Bemærk, AVR32 er en anden processor, og periferiudstyr er tilstrækkeligt forskellige til, at det er en anden enhed.

Hvis du vil komme ind i meget store programmer ( gigabyte hukommelse) tjek Beagleboard. Den har en fuld linux med virtuel hukommelse (se nr. 2 ovenfor) og har mere kraftfulde I / O-mekanismer.

Kommentarer

  • Måske rette nogle skrivefejl, som Wen, 3 og forskellige
  • Jeg mener, hvis du retter disse skrivefejl, kan nogen stemme op for dit svar …

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *