Intro: Muchas veces, me ha ocurrido; que por no saber y no preguntar. He descubierto (con el correr del tiempo) que algo que quería. Si se podía HACER. Y por eso va mi pregunta.
Si yo tengo una EEPROM externa a un Microcontrolador (en este caso: ATmega328p, Arduino UNO, NANO, MEGA, etc.)
Yo. ¿podría poner las librerías en esa memoria “Externa” y llamarla o que mi sketch la busque en ese lugar?
Sito un Ejemplo: Si yo quiero usar una librería de Adafruit para un Display TFT… los recursos de espacio que me toma son muy considerables.
Independientemente que la libreria use la memoria del micro para el desarrollo de las variables que emplee la librería.
Respuestas probables:
(Burrada), (tal vez si se pueda), (no. No se puede), (No, es imposible);
(Tendrías que alterar el Bootloader del micro con el que estás trabajando).
Juro que estoy hambriento por saber la respuesta. Un cordial abrazo desde E. Ríos
Las librerías se integran al código durante la compilación y forman parte del mismo.
Hablando "en criollo" (Ud. me entiende), cada #include es como decirle al compilador "copiá y pegá acá el código de...", luego el compilador "elige" qué cosas no son necesarias de ese "agregado" y no las compila.
O sea, las librerías forman parte de tu sketch, no hay forma de separarlas (al menos que yo conozca).
Si efectivamente eso es lo que hace y ocurre. Y es justo por eso que en las "alternativas" a mi consulta puse "burrada". Dicho esto y continuando con la pregunta.
La pongo de otro modo.
El ATtiny85 es un "arma descomunal" para mi: Espacio fisico, cantidad de pines y admite "todo" lo de sus harmanos más grandes.
Pero, pero, pero... su espacio logico es pequeñisimo en relación a sus parientes.
Existe un modo de ponerle el Sketch en una EEPROM externa?
de antemano te aclaro: perdés espacio entre ATtiny y EEPROM... poné un ATmega328p y usá 4 pines y dejate de jorobar.
Emm si también lo comprendo.
Dame una mano y contestame (si podés)... ¿podría?
Infinitamente muy agradecido por tu pronta respuesta.
Entiendo que solo puedes anexar una eeprom para datos, no para código.
Tal vez modificando el bootloader se pueda pero realmente no lo sé.
Lee la hoja de datos del micro a ver si puede ejecutar código desde una memoria externa.
Hay micros preparados para eso (por ej. el RP2040 de la Pi Pico, entre otras, no tiene flash, usa una flash externa), otros que solo corren código de su flash interna pero los hay que tienen capacidad de ampliación.
Hubiese querido estar contigo en la sombra; sentados en un cordón de la vereda compartiendo una gaseosa y charlando este tema.
Esta pregunta que hice... sospecho, pienso, estimo; que no la encontraré en las 322 pag. del datasheet. Yo estoy casi convencido que la respuesta esta en el Bootloader.
Te cuento. Yo vengo de los Diskettes de 8", 5 14", 3 1/2" y no sabes las maravillas que llegamos a realizar antes de la aparición del HD 32Mb. solo haciendo la pregunta ¿se podría?... y te juro que siempre pudimos. Claro, luego de encontrar la "punta del ovillo".
Te entiendo, yo empecé programando para Z80 y en ensamblador.
Si necesitabas información, biblioteca y si tenías suerte había que rebuscárselas con el idioma.
Por otro lado, lo que no esté en la hoja de datos y/o notas de aplicación, no existe.
MaximoEsfuerzo dijo: "yo empecé programando para Z80 y en ensamblador"
Querido lector ahí esta la clave. Es por eso que no me dijo. Estas Loco... eso no se puede.
Claramente no es lo mismo un CPU que microControlador (por inumerables diferencias), pero ambos se comportan de igual manera.
Y si tenemos clara la definición de PROGRAMA "secuencia ordenada de comandos y funciones" podremos comprender que la punta del ovillo debe estar en el bootloader donde le dicen en que parte o sitio de esa maravillosa memoria ir a buscar su programa.
La conclusión a mi pregunta inicial sería para mi. Estas loquisimo "pero estoy más convencido que se puede."
¿Vale la pena tanto lío en lugar de meter un ATmega328p y usar solo 4 pines?... Claro que no vale la pena. Pero sentados en un cordón de una vereda llegamos a ser quienes somos hoy. Cordial saludo desde E. Ríos
Yo creo Humberto que el problema no es el ATtiny sino la forma de programar.
Deberias bajar a assembler y empezar a optimizar librerías y cosas que no usas y presionar como si fuera un chorizo hasta que entre usando lo que tienes disponible como se hacia cuando solo teniamos lo que teniamos, Z80,8080, etc.
Buscando encontre algunos "consejos" que responde simultáneamente tu pregunta.
Although you cannot run code from external (S)RAM, you can:
optimize your code (reducing the number of lines of code by):
use parameterized functions instead of copying/paste code
reduce the type (storage) variables (like constants) which are kept in memory, e.g. instead of 200 integers of 2/4 bytes use 200 bytes
instead of storing const calculated array values, calculate them runtime (causing a performance reduction)
remove unused libraries
strip down used libraries (not needed to remove unused functions)
Por otro lado estas son tus alternativas
Los ATtinyCores como los llaman
No, no se puede a menos que la hoja de datos diga lo contrario.
Ahora, si "eliges creer", bueno, somos campeones del mundo, no?
Abrazo desde Baires
PD: La diferencia entre un microprocesador (al menos de aquellos) y un microcontrolador es que el uP no tiene periféricos como sí los tiene un uC, te quiero ver conectando todo lo que tienes disponible en un uC (UART, I2C, SPI, RTC, puertos paralelos, ACD's, etc) a un uP.
Hola SurByte tantisimo tiempo... una alegría inmensa cruzarme nuevamente.
Exactamente bucear como en los viejos tiempos. Agradezco muchisimo tus links. seguramente (y como de costumbre) me servirán para leer esta semana.
Un cordial saludo para todos.
Querido lector cuando logramos cambiar el logo de un programa o que en la presentacion en lugar de que diga el nombre de la empresa, aparezca nuestro nombre. A eso se refiere con "bajar".
Maximo. Juro que no quiero irme por las ramas. Pero haceme una gauchada.
Mirá detenidamente el datasheet del modulo GPS NEO 6M y el para que de cada uno de sus pines. Ahora eso si. Que tu señora te esconda el módulo. Porque tendrás ganas de salir corriendo a desarmarlo. jajaj un gran abrazo y un gusto de haberte conocido.
Si, del 6M conozco bastante y si lo tenemos en un módulo solo usamos el puerto serial (si es a eso a lo que te referís).
También hacemos un uso bastante básico (aunque generalmente suficiente) de su protocolo de comunicación, nos limitamos a NMEA pero el protocolo UBX (binario) es mucho más "potente".
Hay quienes ni saben que se puede setear para varios modos de trabajo (y de ello depende la precisión de sus soluciones de ubicación), desde estar estático en un lugar hasta equiparlo en un avión, entre otras cosas muy útiles.
Ni hablar que la mayoría usa la vieja librería TinyGPS o su sucesora TinyGPS++, cuando NeoGPS es muy superior y más precisa (claro que requiere un mínimo trabajo de configuración).
Creo que existe una pseudo solución: usar el microcontrolador emulando un microprocesador, usando chips de memoria externa (por ejemplo ROM/RAM via SPI). El programa se almacenará en la ROM y el uP deberá leer instrucciones, decodificarlas y ejecutarlas.
Te pongo un ejemplo: Dan64. En este proyecto usa un atMega328p en conjunto con una RAM SPI de 64k para emular un 6502 con teclado, audio y video...
La verdad es emular un sketch dentro de un sketch sería algo mas complicado.
Aparte de lo que te han comentado, yo creo que quizá @Humberto02 el enfoque no es correcto. Quiero decir que si un arduino se te queda pequeño bien sea por necesidades de I/O o por necesidades de RAM es hora de mirar alguno que realmente se adapte a nuestras necesidades. Por ponerte un ejemplo: si tenemos necesidad de arar un campo, y queremos hacerlo con un automóvil, ¿qué hacemos, compramos un automóvil y lo modificamos o directamente compramos un tractor aunque éste sea sensiblemente más caro?
Para una producción en masa la reducción de costes puede ser significativa y queda justificada pero para un hobbie el andar usando attiny+eeprom+"burradas"+muchas_horas_de_desarrollo teniendo opciones muy económicas y con mayores capacidades me parece que es una vía incorrecta.
Yo pondría en la balanza las cosas y vería donde se inclina (coste, esfuerzo, etc).
Saludos.
The high-performance, low-power Microchip 8-bit AVR® RISC-based microcontroller combines 8 KB ISP Flash memory, 512B EEPROM, 512B SRAM, six general purpose I/O lines, 32 general purpose working registers, one 8-bit timer/counter with compare modes, one 8-bit high-speed timer/counter, USI, internal and external
Y esto es un STM32Go30j6
STM32G030J6 - Mainstream Value Line Arm Cortex-M0+ MCU with 32 Kbytes of Flash memory, 8 Kbytes RAM, 64 MHz CPU, 2x USART, timers, ADC, comm. I/F, 2-3.6V, STM32G030J6M6, STMicroelectronics
RAM de 512bytes a 8Kbytes
Flash 8Kb de a 32Kb
Y es programable estilo arduino
Ver con mas detalle este debate del foro en inglés
No leí el enlace completo, te lo dejo a vos Humberto. Trabajar con los STM32 tiene sus cosas y hay que adaptarse.
Emm. Es evidente que terminamos yendonos "sin querer" por las ramas.
Yo hice una consulta (NO) porque necesito, este porfiado, desconozca... porque esta CLARISIMO todas las alternativas que poseemos.
Mi pregunta esta basada no en costo, no en alternativas, esta basada en: Aprender, Tomar nuevos desafíos y lograr cosas que no tienen necesidad específica alguna.
¿Entonces para que lo haces?. Tan solo para decir: Lo pude hacer. Lo intenté y no lo logré (por esto, por esto y esto). Ganando el esfuerzo, el golpe sobre la mesa, el poder gritar SIIII! o simplemente "La pucha digo no pude".
Es contruir un carro con madera y cuatro rulemanes; lo que no quiere decir que no sepa que existe el Skate, BiciElectrica, etc.
La pregunta es muy simple: que pasa si localizo la linea donde indica la direccion donde ir a buscar el Sketch y que pasa si logro decirle anda a buscarlo a esta direccion de memoria. Y que pasa si anda. NO PASA NADA, tan solo decir: LO LOGRE!!!; o tal vez núnca lo lograré... pero seguramente habre aprendido algo más. Ahí sentiré que ese esfuerzo valió la pena. Cordial saludo
Humberto, te reitero, si "eliges creer" dale para adelante pero sin darte cuenta has dado con el punto en donde está la pared con que vas a dar el cabezazo.
Por la arquitectura del micro no puedes acceder a una memoria flash externa, no está diseñado para eso, no hay manera.
No hay forma que le digas que acceda a una dirección fuera de las direcciones de memoria del propio micro porque no hay forma de direccionarla.
Por eso te puse de ejemplo el RP2040 que portan la Raspberry Pi Pico y la Nano RP2040 (entre otras placas).
Este micro no tiene memoria flash, se diseñó para trabajar unicamente con memoria flash externa.
Y por otro lado tienes el X6 del ESP32 que tiene flash "onboard" pero puede acceder a memoria flash externa con capacidad de ejecutar código (o sea, no solo para datos) porque el espacio de direcciones de la misma está dentro del espacio de direcciones del procesador.
O sea, su arquitectura se diseñó pensando en poder ampliar la flash.
De hecho lo diseñaron pensando en la "ampliación" (a secas) porque también admite el agregado de SRAM.
Agrego:
Coincido completamente con vos.
Si pregunto cómo usar una tabla de logaritmos, que me respondan que use una calculadora es irrelevante e inútil.
Hi,
Yo uso el rp2040 pico como MaximoEsfuerzo lo menciono en el post 4 tu y ese si puedes guardar la libreria en flash y el programa en el systema. El problema es que el tamano del micro es como 10 veces el ATINY85. El rp2040 se puede programar usando python o el IDE de Arduino o THONY..