Parfois, je manque despace par rapport à la taille du programme pour le programme C embarqué que je veux mettre sur un arduino. Alors, de quelle puce ai-je besoin pour étendre la mémoire programme de larduino afin de pouvoir utiliser des programmes C plus gros avec mon arduino?
Commentaires
- Considérant que un camarade du nom de Petri H ä kkinen a mis un jeu de style arcade sur un Atmega328P, peut-être devriez-vous chercher à économiser de lespace dans votre code? Si cela nest pas ‘ t pratique, comme le disent certaines réponses, vous pouvez obtenir une puce plus grosse avec plus de mémoire programme. LAtmega644, par exemple, est livré dans un package DIP-chip, entre autres.
- Voir aussi forum.arduino.cc/index.php?topic= 226465.0
- pouvez-vous expliquer un peu plus votre réponse? 2) LArduino a SPI, donc une carte SD est accessible. Tout code sur la carte SD doit être chargé dans la mémoire exécutable. Cest compliqué et pas pour les débutants … Vous voulez dire que vous pouvez changer ou reprogrammer la mémoire dinstructions pendant que le programme est en cours dexécution? Le programme en cours dexécution peut-il appeler le chargeur de démarrage et charger de nouvelles instructions sur des adresses différentes? ´ t cet âge la mémoire du programme? Une solution différente peut être didentifier les rutines dans votre programme et tous les » appeler ´ s » stocké avec les données sur une mémoire externe spi … Merci!
Answer
Un ATmega2560 est le puce à ajouter pour plus de mémoire lorsque vous manquez de mémoire programme sur un Uno. En vous référant à la page Web Memory sur arduino.cc, vous verrez quelle contient Flash = 256 Ko, SRAM = 8 Ko, EEPROM = 4 Ko, où la puce ATmega328 est activée Uno a Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.
Lorsque vous manquez de mémoire programme sur un Uno, vous avez environ trois choix pratiques: réduire le programme; supprimer le chargeur de démarrage (pour libérer un ou deux Ko); utilisez une carte différente avec un processeur plus performant. Le processeur sur une carte Uno na pas de moyen daccéder aux octets de programme à partir dendroits autres que le flash de 32 Ko sur la puce. Le processeur dune carte Mega2560 démarre avec 8 fois plus de flash, il peut donc contenir des programmes plus volumineux quun Uno.
Si vous supprimez le chargeur de démarrage, vous pouvez à la place programmer en utilisant une carte USBASP, comme décrit dans un article «Programmer la puce AVR à laide dun USBASP avec un câble à 10 broches» sur learningaboutelectronics.com.
Commentaires
- mais si vous libérez le chargeur de démarrage, comment puis-je utiliser lIDE arduino pour programmer?
- @ qwerty10, voir le dernier paragraphe de lédition. Arduino IDE prend en charge USBASP ok.
- Ne fonctionnerait-il pas avec nimporte quel programmeur capable de télécharger du code sur ATMEGA? Au lieu de seulement un USBASP. Si je comprends bien, il nutilise pas réellement 10 broches, mais un sous-ensemble de ces broches.
- @ qwerty10, USPASP est un programmeur ISP (en programmation système). Généralement, nimporte quel programmeur ISP peut être utilisé pour programmer une puce (avec ou sans chargeur de démarrage) tant que les broches MOSI, MISO, SCK, RST, VCC et GND sont disponibles sur la puce cible.
- Les Unos actuels utilisent le chargeur de démarrage optiboot très compact. Le supprimer ne libérera que 512 octets.
Réponse
Une autre façon (autre que MCU avec plus de mémoire) est nutilisant pas le cadre Arduino et ses bibliothèques. Un tel niveau dabstraction est coûteux dans les deux sens – utilisation de la mémoire et vitesse. Mais cest beaucoup plus difficile. Si vous avez besoin dune bibliothèque, vous devez la porter (si vous nen avez pas trouvé une native) ou au moins fournir les fonctions requises à partir dArduino.
Par exemple dans lIDE Arduino 1.6.11 une esquisse vide utilise jusquà 444 octets de flash. Utiliser un pinMode
et digitalWrite(13, ! digitalRead(13));
+ delay(500);
signifie 964 octets. Bien sûr, ce sont probablement des ponctuels. Si vous utilisez six broches de plus et que vous les activez, cela utilise beaucoup moins de mémoire programme que la première (1192B). Mais il grandit toujours très vite.
En pur C, un programme vide fait environ 134 octets de long. La même fonctionnalité (basculer une broche toutes les 500 ms) prend 158 octets (et cest beaucoup plus rapide).
Mais pour un projet de loisir, jopterais plutôt pour ATMega2560 ou ATMega644 / 1284.
Et vous pouvez également utiliser un accès direct au matériel. Basculer le croquis des broches avec lutilisation directe des registres et _delay_ms des bibliothèques avr utilise 468 octets au lieu de 964B. h3>
- Vous voulez dire
_delay_ms()
. - Cela présente lavantage supplémentaire de découvrir le mcu que vous ‘ réutilisation. Les AVR de ces Arduinos sont bien plus performants que la » bibliothèque standard » ne le ferait croire.++
Réponse
Et une raspberry pi zéro ? Jen ai quelques-uns et je les utilise assez souvent comme arduinos.
Commentaires
- Dautres architectures devraient en effet être envisagées, mais un système Linux embarqué avec démarrage obligatoire sur carte SD comme le pi ajoute beaucoup de complexité et est fragile de manière unique, même si ce nest pas plus cher. Il existe de nombreuses cartes basées sur des microcontrôleurs ARM plus petits et plus intégrés qui sont beaucoup plus similaires à un Arduino en termes dapplications, tout en étant considérablement plus capables. Mais si vous avez besoin de beaucoup de traitement, ou de mégaoctets de mémoire, alors oui, ces complexités commencent à en valoir la peine.
- Je préfère aussi le zéro car il est très flexible. Vous pouvez ajouter plus de stockage ou lintégrer dans des projets tout en disposant dun processeur suffisamment grand pour faire à peu près nimporte quoi.
Réponse
Vous pouvez également vous pencher sur dautres plates-formes. Par exemple, un Teensy 3.2 est compatible Arduino et dispose dun eeprom de 2 Ko et de 64 Ko de RAM.
Réponse
Wen demandant un large question, il est utile d’inclure quelques détails. Comme la quantité de mémoire et pourquoi vous pensez en avoir besoin.
Une fois, jai spécifié un processeur avec 2 Ko despace programme, 64 octets de RAM et 1 KIPS. Lingénieur a demandé, MIPS, jai expliqué des milliers par seconde. Il a répondu, ils ne viennent pas si lentement. À la fin du projet, une énorme interface utilisateur a été ajoutée et la mémoire est devenue serrée … mais toujours en forme sans problème.
Alors, pensez à être plus réfléchi à propos des ressources utilisées.
Pour répondre à la question:
1) LArduino ne fournit pas de bus pratique pour récupérer la mémoire. Il ny a donc aucun moyen de brancher un puce pour obtenir plus de mémoire.
2) LArduino a SPI, donc une carte SD est accessible. Tout code sur la carte SD devra être chargé dans la mémoire exécutable. Cest compliqué et pas pour les débutants …
3) Comme suggéré, resserrez votre code. Cest probablement un bon moyen dapprendre.
3) Passez à un plus grand Arduino.
Il existe différents processeurs Arduino. Certains dans la gamme ACR, dautres dans la gamme ARM. Passer à un appareil différent de la même famille est un changement relativement modeste et peut fournir jusquà 368 octets de programme FLASH. Mais ce ne sont pas des cartes Arduino exactement.
Les appareils basés sur Arduino ARM sont très différents et utilisez des bibliothèques différentes.
Découvrez lArduino Mega 2560, il est très similaire à lUno, a une empreinte similaire, le code devrait être porté relativement facilement et est peu coûteux.
Il existe des appareils plus gros dans la famille AVR.
Remarque, lAVR32 est un processeur différent et les périphériques sont suffisamment différents pour que ce soit un appareil différent.
Si vous voulez entrer dans de très gros programmes ( gigaoctets de mémoire) consultez le Beagleboard. Il a un Linux complet, avec une mémoire virtuelle (voir # 2 ci-dessus) et des mécanismes dE / S plus puissants.
Commentaires
- Peut-être en corriger quelques-uns fautes de frappe, comme Wen, 3 et differnt
- Je veux dire, si vous corrigez ces fautes de frappe, quelquun pourrait voter pour votre réponse …