iPhone 13 mini (iOS 26) [daily driver]
Jolla C2 (Sailfish OS 5)
Xiaomi Pad 6 (Sailfish OS 5)
OnePlus 6T (Ubuntu Touch 20.04)
Hoi, ik ben bang dat ik je moet teleurstellen, het is niet mogelijk om een Arduino code vanaf een externe source uit te laten voeren. Dit heeft er mee te maken met hoe de ATmega328(Hart van de Arduino) is opgebouwd. Deze kan namelijk niet extern adresseren, wat nodig is om code vanaf extern te kunnen draaien.
Er zijn MCU's die vanaf een externe source code kunnen draaien(ATMega8515), maar die hebben daar speciale poorten voor en kunnen dat niet vanaf een SD.
Het enige wat je zou kunnen doen is over te stappen naar de Arduino Mega 256. Deze heeft 256KB aan flash opslag, wat denk ik wel genoeg is voor je projectje.
Er zijn MCU's die vanaf een externe source code kunnen draaien(ATMega8515), maar die hebben daar speciale poorten voor en kunnen dat niet vanaf een SD.
Het enige wat je zou kunnen doen is over te stappen naar de Arduino Mega 256. Deze heeft 256KB aan flash opslag, wat denk ik wel genoeg is voor je projectje.
[ Voor 14% gewijzigd door Vuikie op 31-01-2016 17:59 ]
Nou ja, in principe kan het wel, maar het is zoveel werk om dat voor elkaar te krijgen dat niemand het doet, want de optie om eentje met groter geheugen te kopen is altijd handiger. (Je zou een gedeelte van je flash geheugen voor functies gebruiken die je met IAP vanaf de SD kaart laadt).
Dat of je programma kleiner krijgen.
Dat of je programma kleiner krijgen.
hoe is je flash gebruik binnen de arduino? als je alles op stack stapelt gaat 't hard vol, maar dingen als tekst die je verzend voor de gebruikersinterface ofzo kan je allemaal in het flash gooien, dat scheelt nogal.
Je kunt helaas geen code draaien vanaf je SD-kaart. Wel is het mogelijk om tabellen op te slaan in het flash gedeelte van je Arduino, ipv in je programma gedeelte.
Zie hier :
https://www.arduino.cc/en/Reference/PROGMEM
http://www.nongnu.org/avr...al/FAQ.html#faq_rom_array
dit is alleen nuttig als je grote 'vaste' tabellen hebt die normaal in je programma zitten, deze zet je dan in de flash en zo bespaar je wat geheugen voor je programma.
Je kunt ook proberen om simpelweg kleinere code te schrijven, of een grotere Arduino te nemen (de mega 2560 heeft bvb 256k prog geheugen ipv 32k van de nano/uno).
Zie hier :
https://www.arduino.cc/en/Reference/PROGMEM
http://www.nongnu.org/avr...al/FAQ.html#faq_rom_array
dit is alleen nuttig als je grote 'vaste' tabellen hebt die normaal in je programma zitten, deze zet je dan in de flash en zo bespaar je wat geheugen voor je programma.
Je kunt ook proberen om simpelweg kleinere code te schrijven, of een grotere Arduino te nemen (de mega 2560 heeft bvb 256k prog geheugen ipv 32k van de nano/uno).
/me heeft eindelijk ook een icoontje.. woef.. boeien..
Je weet dat een uC instructies alleen vanaf het flash geheugen kan uitvoeren? Data kan overal vandaan komen. Het flash geheugen in een uC is heel anders van opbouw dan in een SD kaart of SSD, die wel geschikt zijn voor continue read-write acties. Het flash in een uC kan maar beperkt beschreven kan worden! Als je doormiddel van self write telkens het flash gaat beschrijven, dan gaat dat stukje flash er wel heel snel aan.Sissors schreef op zondag 31 januari 2016 @ 18:08:
Nou ja, in principe kan het wel, maar het is zoveel werk om dat voor elkaar te krijgen dat niemand het doet, want de optie om eentje met groter geheugen te kopen is altijd handiger. (Je zou een gedeelte van je flash geheugen voor functies gebruiken die je met IAP vanaf de SD kaart laadt).
Dat of je programma kleiner krijgen.
Plus dan krijg je het probleem: Hoe krijg je binaire code in stukjes op de SD kaart? De AVR GCC compiler, die de Arduino IDE gebruikt, gaat ervan uit dat de code op het flash staat van de uC. Adresseringen die de compiler aanhoud kloppen dus niet, deze zal je met de hand dmv een hex editor moeten aanpassen, of via een stukje code, realtime, moeten omrekenen in de uC zelf.
Als we het dan toch over adressering hebben, stel je voor je roept een functie aan, dan jumpt de Arduino naar de code die de compiler van te voren berekend heeft in het flash geheugen. Ook dit zal je dus moeten gaan ondervangen en het stukje code van de SD gaan inladen en uitvoeren.Maar wat ga je doen als de functie groter is dan het flash wat je gereserveerd hebt voor 'externe code'?
Sorry, maar nee, dit is ondoenlijk.
Dus, zoals ik al zei, data kan je overal vandaan halen in een uC, maar instructies(opcodes) kan je alleen inladen vanaf het interne flash.
Voor degene die het zich afvragen, een Raspberry Pi kan het wel, omdat deze de logica in de CPU heeft zitten die de data en instructies van de SD kaart af haalt, in het geheugen zet en dan uit kan voeren(Net als bij een 'gewone' PC) De Arduino kan geen code uitvoeren vanaf zijn interne geheugen(Dit wordt dan ook een scratch pad genoemd) maar voert zijn code direct vanaf zijn interne flash uit. Alleen data wordt naar het interne geheugen gekopieerd voor tijdelijke opslag. Het bewerken van de data gebeurd dan ook niet in het geheugen, maar in de registers van de Arduino.
[ Voor 3% gewijzigd door Vuikie op 31-01-2016 19:23 ]
Datatabellen in PROGMEM zetten heb je hier niks aan, wordt je code niet kleiner van, alleen het geheugengebruik (SRAM).
Je zou ze wel in de code van een extern 'medium' kunnen halen (sd-kaart oid) maar dat is wel verschikkelijk traag.
Je hebt simpelweg 3 realistische opties:
- Andere micro met meer geheugen.
- Programma kleiner maken.
- Geheugen vrijmaken op de micro (bijv door de bootloader te verwijderen).
Wat tips om je programma kleiner te maken:
- Minder libraries gebruiken (als je bijv een complete rekenmodule erbij gooit om alleen machtsverheffen te doen of een seriele library die je alleen voor foutzoeken gebruikt.)
- Tabellen veranderen door rekenen (veel programmacode is een afweging tussen processor en geheugengebruik)
Je zou ze wel in de code van een extern 'medium' kunnen halen (sd-kaart oid) maar dat is wel verschikkelijk traag.
Je hebt simpelweg 3 realistische opties:
- Andere micro met meer geheugen.
- Programma kleiner maken.
- Geheugen vrijmaken op de micro (bijv door de bootloader te verwijderen).
Wat tips om je programma kleiner te maken:
- Minder libraries gebruiken (als je bijv een complete rekenmodule erbij gooit om alleen machtsverheffen te doen of een seriele library die je alleen voor foutzoeken gebruikt.)
- Tabellen veranderen door rekenen (veel programmacode is een afweging tussen processor en geheugengebruik)
Pagina: 1