Métodos de desarrollo

ackerman
Mensajes: 335
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 140 veces
Agradecimiento recibido: 279 veces

Métodos de desarrollo

Mensajepor ackerman » 10 Jul 2022 12:58

El ESP32 es un bestia del WIFI y el Bluetooth, y como tal está pensado para ello. Se nota cada vez que se usa la librería de WIFI, con el consumo de 70 KB de SRAM así como casi 1 MB de Flash. Usar librerías alternativas WIFI al ESP32, no compensa, dado que se pierde compatibilidad, frente a una reducción de recursos de como mucho un 10%.

Cuando, en lugar de usarlo sólo para el WIFI, se usa para otros menesteres, como por ejemplo, emuladores, es cuando nos encontramos con problemas.
Si usamos el PlatformIO con el framework de Arduino o el el Arduino IDE, habremos notado como ganamos en facilidad, pero tenemos pérdida de control de recursos, sobre todo SRAM. Además, con cada subida de versión, sobre todo en PLATFORMIO, se puede notar como se llega a perder incluso 8 KB de SRAM, respecto a usar las librerías Espressif32 v3.5.0 con respecto a la v5.0. Ya con la v4, eran 4 KB. Si usamos PSRAM, puede que nos de igual, pero con SRAM, es una perdida, enorme. Es cierto, que en cada versión se van ganando facilidades, como el manejo de RTC RAM, pero eso ya estaba con la versión 3. Se empieza a notar como si entraran las técnicas de desarrollo de PC, con todos los problemas del PC, porque se ve librerías internas que pasan en muy poco tiempo a pragmas de optimización 3, luego 2, luego 3, luego 2, luego que si semáforos, que si vuelvo a optimización 2, que si pongo este trozo en un núcleo, que si otra vez a optimización 2... en plan pollos sin cabeza. En el mundo PC, es el pan nuestro de cada día, pero aqui, es evidente, que Espressif se estan equivocando.
Ya cuando se hablaba hace un par de años de Memory leak (fugas de memoria), con 4 MB de PSRAM ya sonaba a chiste, imaginad hablar de dicho fallo con 400 KB de Heap con sólo SRAM. Y resulta, que se empieza a ver como algo normal. -grin
El desarrollo en SOC, debería parecerse lo máximo posible al desarrollo en MCU, claro está, si intentan desbancar a un MCU.

Está claro, que si queremos pocos sobresaltos, hay que evitar lo máximo posible el uso de librerias de terceros, sobre todo si cambian radicalmente en cortos periodos de tiempo. Esta técnica se realiza mucho en PC para lograr software estable, en donde, básicamente consiste en utilizar una librería genérica, de la cual, sólo se uso lo mínimo, mínimo y se deja toda la lógica en la libreria propia. De esta manera, por mucho que cambien de la librería genérica, mientras no toquen la única cosa de la que depende, siempre funcionará. Esta técnica de desarrollo no es eficiente, pero se ha demostrado que es la más efectiva.

Para habilitar en PlatformIO el framework en el platformio.ini:

Código: Seleccionar todo

framework = espidf

Vemos como ganamos en gestión de memoria, pudiendo lograr chunks de 176 KB contigüos e incluso más en algún ESP32 concreto, frente a los 114 KB de usar el:

Código: Seleccionar todo

framework = arduino

Se ganan muchas opciones especiales de configuración, muchas ligadas a chips ESP32 muy específicos. Recordemos, que existe un ecosistema de ESP32 enorme.
Perdemos el Setup, loop, así como DigitalWrite y muchísimas cosas que facilitan la vida al programador, como el uso de librerías. Por tanto, es una decisión delicada el apostar por un cambio de esta magnitud.

El ESP32 dispone de MMU para la cache, la PSRAM y la FLASH, pero no para la SRAM. Esto quiere decir, que podemos mapear una zona de memoria en otra, pero al no poder hacerse en SRAM, no podemos compactar segmentos de memoria como IRAM y SRAM, por lo que tendremos que hacerlo de manera artesanal.
Esto es muy útil para el port de emuladores como el de CPC.

La decisión de una u otra metodología, nos puede anclar a una plataforma, que puede que nos interese o no, sobre todo, ahora que la rp2040 (raspberry pi pico) ha demostrado que aguanta muy bien el overclock a 436 Mhz.

Volver a “Desarrollo emuladores ESP32”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado