Intérprete BÁSICO Oculto en Silicon ESP32
Continuamos con el programa en curso desarrollado para el chip WiFi ESP32, y eso significa muchos relámpagos, conexiones de cables aleatorias y reinicio. En el camino nos encontramos con un huevo de Pascua: el procesador ESP32 tiene un intérprete BASIC incorporado al que recurrir.
Este es un gran intercambio, pero no pudimos encontrar ninguna característica importante que lo hiciera mucho más útil. Sin embargo, es muy divertido jugar en tiempo real con el chip. ¡Y absolutamente parpadeará el LED más rápido en ESP32 BASIC que en un Arduino!
Acceso a BASIC
Al principio pensamos que la clave para entrar en el shell BASIC era simplemente bloquear la ROM del programa flash integrado, como lo descubrimos al conectarnos a GPIO 12, etiquetado como el pin MOSI para “HSPI”. Pero alguna verificación con "probador integral y de continuidad" verifica que ningún dato cruza este pin al inicio, y que el módulo ni siquiera rompe las líneas SPI para el flash. Parece que cualquier arranque de ROM que tenga el ESP32 en su interior está probando un alto voltaje en GPIO 12. No nos pregunte.
De todos modos, la versión corta de la historia es: suba GPIO 12 y presione reiniciar. Conéctese al ESP32 a través de serie y presione adentro para evitar que se reinicie continuamente. Falling back to built-in command interpreter.
Vut. Configure su programa de terminal para enviar solo un flujo de línea al final de cada línea y ¡listo! ¿No tienes ESP32 a mano para probar esto? Grabé una pantalla de mis aventuras, para que al menos puedas acompañarme en el viaje.
LED parpadeante, estilo BÁSICO
¿Qué es lo primero que hace frente a un símbolo del sistema? Escribe "ayuda", ¿verdad? Bueno, eso funciona. El ESP32 regresa con "Consola ROM muy básica. Comandos / funciones disponibles:" y luego enumera todo lo que necesita para comenzar. Ahora nuestro BASIC está un poco oxidado, se remonta a los días de Tandy Color Computer, pero creamos rápidamente algunas demostraciones y, sinceramente, nos divertimos mucho.
> acerca de
ESP32 ROM Basic (c) 2016 Expressive Shanghai
Derivado de TinyBasic Plus por Mike Field y Scott Lawrence
Espressif fue lo suficientemente amable para agregar iodir
y ioset
comandos al BÁSICO, y le permiten establecer la dirección de datos de cualquier pin (entrada o salida) y leer o escribir en él. Eso significa que los LED parpadeantes están a solo unas palabras de distancia.
> lista
5 YODO 32,1
10 POR I = 1 AL 10
20 IMPRIMIR "¡Hola La-Tecnologia!"
30 GOSUB 100
40 SIGUIENTE I
50 FINO
100 REM BLINK SUBRUTINA
110 IOSET 32,1
120 retraso 200
130 IOSET 32.0
140 retraso 100
150 VUELTA
bien
> kuri
¡Hola La-Tecnologia!
...
Y hubo un rizo y un parpadeo. ¡Es más fácil que empezar con Arduino!
Misterios y desaparecidos
Pero eso también es lo que hemos llegado. Hay print
orden, y un input
comando, pero no pudimos averiguar cómo manejar cadenas, por lo que nunca superamos
10 IMPRIMIR "Ingrese su número favorito"
20 ENIGO F
30 SE F = 42 GOTO 100
40 PRINT "¿De verdad? Yo prefiero"
50 IMPRIMIR F + 1
60 FINO
100 PRINT "Ese también es mi número favorito".
110 FINO
Es rseed
comando, y la ayuda enumera un rnd
pero parece un error de sintaxis cuando intentamos usarlo en una función. ioget
, que debería leer el voltaje lógico en un pin, tampoco parece funcionar. Al bajar en la lista, nos entusiasmó que muchas de las funciones que nos gustaría enseñar a la programación para niños pequeños simplemente no lo fueran.
BÁSICO ¿Sin echar un vistazo?
No pudimos conseguirlo peek
y poke
trabajando por nuestras vidas. Parece que no se han implementado, lo cual es una pena porque esos dos comandos son casi la mejor característica de BASIC para explorar el interior de un nuevo chip en tiempo real. Aunque a menudo no tiene motivos para bromear sobre piezas sueltas en su computadora de escritorio, encender de forma interactiva esos pequeños interruptores de silicio es una herramienta maravillosa cuando se trata de un microcontrolador con periféricos de dispositivos mapeados en memoria.
Peek
y poke
es la razón de ser de BASIC. Sin ellos, es solo un lenguaje de juguete.
Edición tardía: [Sprite_tm] escribió en el BÁSICO. Tenía todo mal. ¡Mira y empuja el trabajo! Simplemente no adiviné la sintaxis correctamente. De echo, [Sprite_tm] confirma que los usaron durante la fase inicial de salida del chip. ¿Cuan genial es eso?
El siguiente código habilita GPIO 4 como salida, lo enciende y vuelve a encender, y luego imprime el valor de las entradas GPIO en hexadecimal. Cambiamos el voltaje de entrada a otro GPIO y observamos cómo explotaban las piezas. El resto es una simple cuestión de software.
5 POKE Y H3FF44020, 16
10 POKE Y H3FF44004, 16
20-retardo 200
20 POKE Y H3FF44004, 0
30 retraso 200
40 PHEX PEEK (Y H3FF4403C)
50 GOTO 10
Para saber qué significan estos números, consulte el mapa de memoria en los documentos técnicos (PDF). ¡Divertirse!
Estos no son los droides ...
De todos modos, la gran noticia es que el equipo de Espressif ha iniciado la mayor parte del núcleo de Arduino, y pronto tendremos una revisión completa. También continúan trabajando como locos en el desarrollo de las bibliotecas C que los desarrolladores reales usarán para lanzar estos parches, por lo que probablemente no sea la mayor prioridad para ellos implementar. peek
dentro de un huevo de Pascua. Pero pasamos una tarde divertida batiendo habilidades BÁSICAS.
Sonco dice:
"El equipo de Espressif ha lanzado la mayor parte del kernel de Arduino, y pronto tendremos una revisión completa. También continúan trabajando como locos en el desarrollo de las bibliotecas C que los desarrolladores reales usarán para lanzar estos chips". Desarrolladores reales jejeje.
No puedo esperar para conseguir mi esp32Mungojerry dice:
Como programador, cambio entre ser real y estar protegido, pero es necesario reiniciarlo.
MS-JEFE dice:
¿Requiere tener 286 puntos de CI?
Vagabundo hastiado dice:
No, solo estimulación A20
itsthatidiotagain dice:
Basta de estos juegos de palabras, tienes la intención de crear un INM mío.
MS-JEFE dice:
Me gustaría dejar este hilo, pero eso me acabaría.
Martín dice:
¿Y qué pasa con los imaginarios?
MS-JEFE dice:
¿Estás apuntando a lo irreal?
xorpunk dice:
"Verdaderos programadores" = personas que escriben primitivas o nunca terminan nada porque están en algún lugar de un foro con argumentos de lenguaje.
Scott Lawrence (@yorgle) dice:
Nunca trabajé en "Entrada" la última vez que trabajé en él, así que no funciona del todo. También creo que rnd necesita parientes porque es una función, p. 10 A = rnd () Cuando estaba trabajando en esto (para plataformas Arduino), Peek y Poke eran ... interesantes porque tienes EEProm, Program ROM y Program RAM, todos separados ... entonces, ¿qué hacen Peek and Poke? (Debo señalar que no me conocía en el puerto a esta plataforma ... ¡pero estoy muy feliz de verlo allí!: D
Mike Szczys dice:
¡Gracias por la comprensión adicional, Scott! Y gracias por todo su trabajo en Tiny Basic Plus que hizo posible este EasterEgg. Lamento haber sacado su nombre de la pantalla de visualización de arriba, pero claramente se le cita acerca de leer el "acerca de" de ESP32 (ahora está inmerso en el silicio, la mejor alternativa a la carbonita).
Elliot Williams dice:
"¿Qué tienen que ver mirar y picar?"
¿Para microcontroladores? Ingrese los registros asignados en memoria que gobiernan los periféricos del dispositivo. Con un vistazo y una buena hoja de datos, podría hacer casi cualquier cosa (difícil).
La EEPROM y la memoria flash / ROM de programa son mucho menos interesantes, y es posible que no se puedan escribir. Programar RAM es divertido de diagnosticar (y crear bloqueos aleatorios), por lo que también sería genial si realmente comanda. 🙂
Walter Cecil Hynson dice:
peek = mirar ..... empujar = establecer
DainBramage dice:
¡Eso es bueno!
Jovan Ivkovic dice:
Sí, hombre, llegamos a la misma posición que nosotros en los años 76-80, pero ahora solo al comienzo de una nueva revolución de las nanocomputadoras 🙂
¿Pero no dijiste qué tan rápido puede vencer a sus GPIO?Jacques1956 dice:
La placa de la foto parece una placa central Olimex ESP32. Están agotados en este momento. ¿Conoces alguna otra placa similar?
Gabriel dice:
"También continúan trabajando como locos en el desarrollo de las bibliotecas C que los desarrolladores reales usarán para lanzar estos chips".
"Desarrolladores reales" ... me encanta.
Jacques1956 dice:
Tal vez haya algo así como un "programador virtual" ... no lo sé.
RW dice:
Bueno, la virtualización de procesadores tiene una capa abstracta, por lo que sería sintácticamente correcto referirse a los programadores en un nivel superior y lenguajes interpretados como programadores virtuales. Supongo que aún más si el lenguaje tiene su propia máquina virtual, como java.
gazzeur dice:
Los programadores reales no comen como ... https://www.hacker-dictionary.com/terms/real-programmer
Shakipu dice:
Xkcd requerido: http://xkcd.com/378/
Millas arquero dice:
¿Quién es el primero en configurar un Star Trek con uno de estos? http://www.vintage-basic.net/bcg/superstartrekins.bas
Erik Johnson dice:
¿Parece que esto no hace más que iniciar un programa de cinta?
alemán dice:
http://www.atariarchives.org/basicgames/showpage.php?page=159
¿Mejor?
página siguiente para obtener más información ... sin embargo, no corte y pegue.
bleullama dice:
(no estoy seguro de si mi primera respuesta se cumplió o no)
Agregué las cosas "más" a TinyBasic, pero no tuve participación en su puerto ESP32, por lo que no puedo hablar sobre los detalles de esa plataforma. Sin embargo, necesito conseguir uno para mí. : D
Cuando estaba trabajando en TinyBasic Plus, no terminé "Entrada". No funcionó cuando comencé con el código y nunca tuve la oportunidad de averiguar por qué.
iirc, rnd es una función, así que tienes que hacer algo como 10 A = rnd ()
Tanto Peek como Poke son interesantes. En el Arduino, hay 3 piezas de memoria diferentes, por lo que no estaba claro para quién debería usarse; Programa EEProm, ROM y RAM. Honestamente, no recuerdo el estado cuando terminé. Sin embargo, todavía te dejo guardar y cargar desde EEProm o tarjeta SD ... así que traté EE como almacenamiento masivo y para mantener el arranque automático.
En la plataforma AVR, la cantidad de RAM era demasiado restrictiva para hacer algo útil después de agregar algunas bibliotecas de soporte (como SD + Fat, etc.) que lo convertirían en una computadora de aprendizaje automático más útil, así que me desvié y creé un BÁSICO aún más estricto lenguaje derivado. (BLuB) ... ambos están todos en Github. Espero ver los cambios para ESP32 en algún momento (si aún no lo han hecho) y ver mejoras de acuerdo con la revisión anterior realizada por alguien con mucho más tiempo que yo ...: D
bleullama dice:
Soy el "Scott Lawrence" mencionado anteriormente. 😉
Haddyhad dice:
Por desgracia, incluso se incorporó a la ortografía. ¡Maravilloso!
https://la-tecnologia.com/wp-content/uploads/2016/10/esp32-example-basic.pngMike Szczys dice:
Oh, culpa mía. Escribí el resultado del screencast de Elliot porque no se podía leer nada en el fragmento. ¿Está EasterEgg dentro de EasterEgg? No, solo estoy metiendo el dedo en él. # Cómo se convirtió la salchicha
B dice:
Solo pondré un "hola" aquí para cualquier otra persona que busque en la página antes de comentar.
RW dice:
Solo pondré "El último álbum de Miley Cyrus" para cualquiera que busque en Internet cosas infantiles y luego haga clic a ciegas en cualquier enlace.
xorpunk dice:
¿Qué es este cebo de clic? Vine aquí por Miley Cyrus y acabo de encontrar un montón de nerds
cik dice:
¡Toma tu lámpara de latón y prueba el ron!
Jacques1956 dice:
Al ser un Easter Egg, probablemente sea una adaptación rápida de https://github.com/BleuLlama/TinyBasicPlus
Entonces, la documentación para este último tiene que ser bastante buena.bleullama dice:
De hecho, parece que sí. Ese soy yo.
Alphatek dice:
Siempre es bueno encontrar un intérprete BÁSICO en un chip. Por cierto, en el problema de PEEK / POKE, tienes la documentación incorrecta 🙂
Ricardo dice:
¡No toques! ¿Cómo tendremos vidas infinitas en Mania Minor?
RW dice:
Esa versión ... suena incompleta
senopera dice:
ahora entonces, ahora entonces, ahora entonces ...
Shannon dice:
¿Demasiado pronto? * estremecimiento * Ese hombre siempre me dio las rampas
Marcos dice:
Ya no picamos a los menores. Prueba con un minero.
Daniel dice:
¿También tienen lugares en el mar?
piotrsko dice:
podría ser un comando para escribir datos en una dirección como costumbre básica en la edad oscura o podría ser parte del comando de escritura
nater dice:
¡Eso es genial! ... O al menos sería genial si pudiera comprar uno. 🙁
TheRegnirps dice:
BAZA? Forth sería realmente genial.
Scott_Tx dice:
tal vez puedas escribir uno en básico.
RW dice:
Tal vez sabría que los alquileres le comprarían un Speccy o un C64 en lugar de Jupiter Ace ...
Julian Skidmore dice:
No es posible escribir un Forth rápido en Basic, pero es posible escribir un Forth rápido en Basic:
http://www.nicholson.com/rhn/files/Tiny_BASIC_in_Forth.txt
TheRegnirps dice:
Podría hacerlo, pero todo sería POKE de códigos de operación en RAM, luego manténgalo como sea posible. Simplemente inserte la imagen binaria o escriba un metacompilador en BASIC que lea una fuente de Forth para Forth y construya un compilador de Forth.
Elliot Williams dice:
¡Esto x10! Forth es, de hecho, el lenguaje perfecto para ingresar y explorar un sistema de bajo nivel. ¡Mirar y picar es para los tontos cuando tienes @e!
Pero Forth está loco, y solo unas pocas personas lo conocen / usan. Entonces eligieron BASIC. Puedo respetar eso.
En serio, Forth: es un lenguaje difícil de implementar en ESP8266 / ESP32 porque realmente desea mantener la interoperabilidad con los libros de Espressif C para cosas como WiFi, etc. Entonces, básicamente, bloquea la escritura de C Forth en lugar de ensamblar Forth, con todos los gastos generales con la llamada a la función C. Véase punyforth, por ejemplo.
Mecrisp-Stellaris Forth en los ESP, con función de biblioteca, fallaría. No se como hacerlo.
profuso dice:
Intérprete de Woooo BASIC. Ahora tenga una razón (excusa) para obtener ESP32. Un verdadero programador. Risa disimulada. Dile a esa "llama azul" que se acabó, ¿verdad? Decir ah.
ian dice:
¿Por qué no anunciaron que estaban haciendo esto y lo convirtieron en una aplicación "compatible" completa? ¡Agregaría significativamente a las personas a quienes podrían venderlo!
Elliot Williams dice:
B / c, el tipo que hace ESP BASIC (para el 8266) inevitablemente cruzará, y esa plataforma es increíble. Supongo que habrá un BASIC realmente utilizable en el ESP32 dentro de seis meses a menos que las cosas de RTOS se interpongan demasiado en su camino.
https://la-tecnologia.com/2015/08/29/basically-its-an-esp8266/ y https://la-tecnologia.com/2015/11/28/basic-on-the-esp8266/
Podstuff dice:
¡Imagínese lo rápido que sería el bitbanging usando lluvia de ideas o incluso ook!
Pedro dice:
Debe verificar los brazos utilizados en las tablas BeagleBone. Son TI Sitara ARM Cortex A8 con un par de "PRU". Estas PRU son procesadores RISC de 200 MIPS para E / S. Puede activar un pin en el software para crear una onda cuadrada de 100 MHz. 🙂
Andrés Peakin dice:
¿Y BÁSICO? Esta en ingles. Es obvio cómo funciona. Sencillo. Lo usé durante más de 20 años, tanto a nivel profesional como como pasatiempo, y nunca tuve la necesidad de mirar o pinchar. O usa Github.
Jacques1956 dice:
No hay nada malo con el BASIC moderno como freeBASIC o VisualBASIC. y similares. Pero esta vieja escuela BÁSICA está realmente pasada de moda. Pero si quieres un lenguaje interactivo, Python tiene todas las facilidades modernas y no es más difícil de aprender que el BASIC de la vieja escuela o el BASIC más nuevo. Es un micropyton para una plataforma integrada.
RW dice:
Descubrí cómo corregir el error del milenio en las BIOS de las computadoras en una línea de QBASIC en 1996, y estaba amarga, amargamente decepcionado por lo fácil que resultó (y lo pocas máquinas que realmente lo tenían) porque quería crear mi fortuna. 😀
De todos modos, tengo mis dudas de que puedas hacer eso en Python ... pero era principalmente una ilustración de "Mira, puedes hacer cosas importantes del mundo real en BASIC".
Steven Gann dice:
Python probablemente no pueda hacer eso. Una vez más, BASIC ya no puede.
Jonmayo dice:
microPython es aproximadamente 20 veces más grande (80 KB) que la implementación de TinyBasic (4 KB). No es algo que puedas esconder fácilmente como un huevo de Pascua en un microcontrolador.
TinyBASIC probablemente solo sea un juguete. Pero basta con ver que el sistema funciona. Es difícil extenderlo sin modificar la implementación original y flashearla.
FORTH es probablemente tan expresivo como un micropyton porque es fácilmente extensible y cabría en un espacio similar. Pero FORTH no tiene un atractivo tan amplio como BASIC o Python.Bruce Hoult dice:
4K de código parece excesivo para BASIC simple, especialmente sin un punto flotante, sin variables de cadena, sin matrices, nombres de variable de un carácter ...
Steven Gann dice:
Empecé con QBasic, pero ahora estoy trabajando con C, C ++ o C # según el proyecto. Tengo esa nostalgia de QB, pero después de probar QB64, honestamente, no puedo recordar por qué me gustó tanto.
La sintaxis es ineficaz para escribir y leer. Lo que se puede hacer en una línea de C adquiere una función completa en Basic. La mayoría de las implementaciones básicas con las que he trabajado (QBasic, PBasic y TRS-80 Basic) no tienen un depurador real, por lo que cuando algo sale mal, debe recorrer manualmente cientos de líneas de código para darse cuenta de que ha escrito
Luego está la falta total y completa de POO. Todo debe escribirse como un algoritmo estático, por lo que la mayoría de los modelos de IA están completamente descartados. No tienes clases ni siquiera espacios de nombres, por lo que no hay un diseño modular para nada de lo que escribes, por lo que todo lo tienes que escribir tú a menos que comiences con un código preescrito y escribas alrededor de él.
Fíjate, algunas implementaciones ni siquiera tienen matrices, mucho menos listas enlazadas, árboles de búsqueda u otras estructuras de datos dinámicas. IIRC, TRS-80 Basic ni siquiera tenían diferentes alcances (¿o era PBasic?) Así que todo era global. Esto me utilizó para declarar todas las variables en la parte superior del programa para poder rastrear qué nombres ya se usaron.
Luego está la actuación. Probablemente podría implementar FFT en Basic para una MCU de 16 bits, pero ahora está lidiando con la sobrecarga masiva del intérprete.
Alguien que use Basic de manera profesional en 2016 es casi inaudito (a menos que cuente VB, pero VB6 es una basura y VB.NET apenas es más Basic). Me gustaría saber para qué lo usa y cómo maneja la ausencia de herramientas tan básicas.
Miroslav dice:
Yo uso BASIC para probar motores paso a paso conectados al LPT, con TIP122s haciendo funcionar las bobinas del motor. Aunque con DOS 5 y QB4.5. También lo usé como sistema de control para varios experimentos en el pasado, menos hoy con Arduinos chinos tan baratos. Con GOTOs recibí alrededor de 500.000 muestras por segundo mientras leía sobre LPT. Cuando probé un enfoque de programación más moderno (bucles), la frecuencia de muestreo se redujo a menos de 100.000. Utilice subprogramas y acorte sus programas: menos de 300 líneas suele ser suficiente incluso para las tareas aceptables más grandes. No hago OOP de todos modos. Es solución buscando un problema.
Miroslav dice:
Una gran noticia. Finalmente, algunos GOT y GOSUB como Dios pretendía. ¡Yeeehaaaw!
Elliot Williams dice:
¡Por eso los incluí en el código de muestra! Originalmente alineé la "función" de parpadeo, pero luego tuve que ver si podía llamarla con GOSUB. ¡¿Hura ?!
Mike Morrow dice:
Siempre he dicho que cuando el hardware deje de hacer declaraciones de rama, dejaré de querer ir a.
Dan # 942164212 dice:
¡¡Aaaaah no, no Baza !! ¿Por qué no usaron Forth?
RW dice:
Porque nadie, ni siquiera un supergeek residente subterráneo, quiere experimentar la vida sonando como un Jedi licencioso ... "Yo uso el Forth" ... ...
Martín dice:
No, su notación inversa: el Forth que uso. 🙂
Steven Gann dice:
El Cuarto esté contigo.
Espere por favor ...
TheRegnirps dice:
: Forth Love If Honk Then;
Sprite_tm dice:
Oye, parece que el huevo de Pascua es público ahora ...
El intérprete en realidad se inicia en la rutina de mal funcionamiento para las rutinas de carga de rayos, por lo que si logra que el ESP32 no lea datos o cague de un rayo, lo obtendrá. Por lo general, sin ninguna entrada, el perro guardián reinicia el chip, por lo que no se verá bonito en el intérprete BÁSICO cuando no lo necesite.
Creo que "input" no hace lo que quieres, porque si recuerdo correctamente, este BASIC no hace cadenas. Sin embargo, debe funcionar para números enteros. "Peek" y "Poke" también funcionan, y Pekek y Poke en el directorio de memoria ESP32. Así que es bastante poderoso: puedes obtener ROM, RAM y todos los periféricos con él.
Como se dijo antes, rnd e ioget son funciones, así que utilícelas como 'print rnd ()' e 'print ioget ()'. Las otras funciones son peek, abs y usr. Usr en particular es divertido: se puede llamar rutinas de lenguaje de máquina. ioget () realmente funciona, pero necesita el pin que desea inspeccionar como argumento, p. ej. 'imprimir yogur (0)',
Parte de la razón para escribir esto (aparte del hecho de que, ¡eh, ROM BASIC!) Fue que podría facilitar las pruebas. Por lo tanto, p. Ej. También implementamos números hexadecimales (& habc) y números binarios (& h1011). Al final, no creo que usamos el intérprete más allá de un chip inicial, pero está ahí.
@bleullama y Mike Field: Gracias por crear este artista. Modificar y ampliar esto no fue un problema para el que asignamos mucho tiempo (creo que lo logré después de uno o dos días), su código era lo suficientemente pequeño como para caber en el espacio que dejamos en la ROM y bastante legible para ampliar sin demasiados problemas.
hamsternz dice:
@Sprite_tm: soy Mike Field, a quien originalmente llevé / escribí tinyBasic desde el ensamblaje 68000 al C en el AVR / Arduio hace unos años, pensé que podría ser bueno simplemente balancear pines y demás mientras probaba en una placa o traer un tablero, porque cuando estás trabajando en un producto, a menudo es útil probarlo antes de tener un proyecto "real" para encenderlo.
Nunca pensé que alguien pudiera correr con él tanto como lo ha hecho Scott (@bleullama), y ahora es realmente sorprendente que lo hayas hecho. Que esté en la ROM del módulo ESP de próxima generación es bastante bueno. Estoy estrangulado hasta la muerte.
Tengo muchos de los módulos ESP8266 más antiguos pero aún excelentes para varios proyectos, por lo que no puedo esperar a que ESP32 comience a enviarse, lo que me permite jugar con uno y tener un brillo difuso cálido sabiendo que solo ayudé a un pequeño en el desarrollo de la misma.
Elliot Williams dice:
Bien, trabajé rnd (10) e ioget (0). Estupendo. ¿Extrañé los corchetes que parecen innecesarios en otros lugares? (No hablo este idioma).
¡Y mierda santa! Peek funciona, pero tienes que imprimirlo o asignarlo a una variable. (No hablo este idioma). He intentado que funcione sin una tarea y falla.
peek (& h3ff4403c) es un error de sintaxis, pero a = peek (& h3ff4403c) funciona. ¡Aquí tienes un vestido! Fuera, voy a parpadear los LED con fuerza.
Greenaum dice:
> (No hablo este idioma).
¡Niños por ahora!
Por supuesto, PEEK solo es un error en sí mismo, ¿qué esperas que haga con el vistazo? Si no lo imprime ni lo pone en una variable, ¿de qué sirve? O para decirlo de otra manera, ¡PEEK es una función! Y BASIC es un poco diferente de C, porque está a medio camino entre hablar inglés y pasar a un cerebro totalmente orientado a la pila.
cik dice:
¿Cuánto tiempo pasará hasta que alguien descubra cómo obtener una salida de video de BASIC?
NoseyNick dice:
¿¡¿Huevo de Pascua?!? Pero ... ¡es casi Halloween! 😀
Falko1 dice:
Afortunadamente Sprite_tm no pensó en el lenguaje Brianf * ck.
Miroslav dice:
Él hizo. Y luego dijo ... "Bueno, ¿¡quién usará este st!?"
BeagleBoy dice:
¿No es ese el lenguaje que usan los que odian a Benchoff? "Brianf * ck"
BeagleBoy dice:
Lo siento, no pude resistir el error tipográfico. 😉
RW dice:
La próxima vez que me estrelle en una isla desierta con nada más que un contenedor de carga de componentes discretos para una empresa, implementaré una CPU creada por mi cerebro.
Greenaum dice:
Dejando a un lado la isla desierta, no sería difícil, Brainfuck y ensamblador, sin embargo, no están demasiado lejos, BF es principalmente un conjunto con algunos bits agregados solo para hacerlo perverso. Es una máquina apiladora simple, probablemente una de las CPU más fáciles que podría construir.
Stefan_Z dice:
Entonces, si está "incrustado en silicona", lo que lo haría indeleble, ¿no es un gran riesgo de seguridad?
¿O simplemente está en el chip "vacío" en el momento de la entrega y se eliminará después de que lo programe?igrr dice:
Un intérprete básico en el ESP32 se puede deshabilitar soplando el mismo bit OTP, lo que deshabilita el modo de descarga UART.
pelrun dice:
¿Por qué es un riesgo para la seguridad? No le gusta que esté haciendo algo para ejecutar código que no ha sucedido antes (¡el * punto * de un microcontrolador es ejecutar código!) Y si puede activar básico, entonces ya tiene completo control sobre el hardware.
No es como si hubiera un flash interno que pueda leer con este intérprete de todos modos.
Greenja dice:
Para nada. Tal vez quieras abordar tu historial de microcontroladores.
Greenaum dice:
Lo que está amenazado y necesita seguridad es el mismo código que una empresa programaría en él. Digamos que la Compañía X pone ESP32 en su costoso widget. Utiliza un código inteligente en el que la Compañía X ha gastado mucho dinero para investigar y desarrollar.
Un competidor no puede leer este código de ninguna manera porque los microcontroladores tienen bits de seguridad que lo impiden. Específicamente por lo tanto, seguridad de código. A X no le importa que la gente reprograme el micrófono, pero le preocupa que le roben el código.
Pero con este problema BÁSICO, los espías de la Compañía Y podrían comenzar a usar Widget, comenzar en BÁSICO y usar PEEK para examinar y descartar toda la memoria a la salida serial. Luego tienen el programa propietario, al menos el código objeto, que podría ser lo suficientemente bueno para clonar el producto aunque no lo entiendan.
Por supuesto, hay un flash interno, ¿dónde más va el código? Sprite_tm nos informa que PEEK puede leer toda la memoria del chip.
Afortunadamente Igrr señaló que, aparentemente, esto no es posible, ya que el bit de seguridad también afecta al BASIC. Buen trabajo, de lo contrario esto sería un poco aburrido. Supongo que cualquier persona responsable del bit de seguridad en Espressif tendrá que verificar todos los complementos propuestos para la ROM y verificar este.
pelrun dice:
La mayoría de los otros microcontroladores no le brindan acceso físico al flash. La única forma de acceder a él (sin decapitarlo) es hacer que el microcontrolador le diga qué contiene. En ese caso, un intérprete * puede * representar un riesgo para la seguridad.
Aparte de los chips ESP NO son similares a la mayoría de los otros microcontroladores. El flash que contiene el firmware es un chip de gelatina separado. No está encriptado. No es necesario que confíe en el ESP para leerlo; simplemente conecte otra unidad flash en serie al chip y listo.
igrr dice:
pelrun: Bueno, todo es que con el ESP32, el programa en un chip flash externo * puede * cifrarse, con claves almacenadas en la memoria ESP32 OTP (y accesible solo por una unidad de descifrado móvil, no por una aplicación).
pelrun dice:
Ah, sí, lo veo ahora. Ignora mis disputas mal informadas.
Greenja dice:
BASIC en la ROM ESP32, esa es una forma interesante. Como se mencionó anteriormente, trae recuerdos de la pequeña base de Tandy y Li-Chen Wang. Sigo usando BASIC de una forma u otra, incluido TechBasic para crear programas basados en BLE y WiFi directamente en mi iPad.
Ahora bien, ¿es esto un huevo de éster, una descripción general o un caballo de Troya? Todos conocemos las puertas traseras de los programas, ¿es esa puerta trasera del hardware? Para la primera versión de este chip, creo que nadie produciría en masa un producto comercial, pero esta opción de lanzamiento predeterminada no aparecerá en la próxima versión. Cualquiera puede "espiar", "picar" y descompilar su código en un instante. Puede que no le importe a un aficionado, pero si coloca algún firmware propietario, debería ser seguro.
El bit OTP para la descarga de UART no elimina el acceso a la ROM. Apuesto a que podría acceder a esa área de ROM y leer la memoria a través del software de mapa de bits I2C, SPI o UART.
igrr dice:
El truco es que este intérprete no puede ejecutarse directamente desde la ROM. Solo puede funcionar si se copia en IRAM. Lo que no puede hacer si el modo de descarga UART está desactivado y el cifrado flash / flash seguro está habilitado.
Sprite_tm dice:
Sí, el intérprete básico en ROM está incluso mezclado, por lo que ni siquiera devolverá dispositivos ROP. Agregue a eso el hecho de que el mismo Intérprete Básico también controla ese fusible: realmente no quería hacer un complemento caprichoso para convertirme en una especie de amenaza a la seguridad.
Greenja dice:
Me alegra saber que ha tomado las precauciones necesarias. Porque tienes suerte de que saliera así. Ahora el público debe ser educado sobre esto para no dejar esta característica abierta a nadie para ser explotada en el campo.
Tengo muchas ganas de probar esta función BÁSICA. Abre un camino completamente nuevo para que la gente explore.
Sería bueno ver el próximo ESP32 con soporte de ROM de interfaz de cámara para convertirlo en un SoC completo. ¡Buen trabajo hasta ahora, sigue así!
igrr dice:
No estoy seguro de lo que quiere decir con soporte ROM, pero ESP32 tiene una interfaz de cámara, compatible con OV7xxx / 5xxx y similares. Esto se logra mediante periféricos I2S en modo de entrada en paralelo.
Greenja dice:
Eso es bueno escuchar. No veo ninguna información sobre la interfaz de la cámara en el TRM.
Cuando mencioné el soporte de ROM, pensé más en términos de DMA con un búfer FIFO accesible en ROM a través de API o algunos otros comandos dedicados para reducir supercondiciones (mejor facilitación de transmisión de video).
Indíqueme dónde puedo encontrar más información sobre la interfaz de la cámara con I2S.
igrr dice:
La documentación de I2S aún está en proceso de traducción / edición, por lo que no hay nada a lo que pueda dirigirlo en este momento.
kakureru dice:
EZ-haka stako
Steven dice:
10 cl
20 hastaNo hay errores en ese programa.
RW versión 0.0.1 dice:
Falta la función de deshacer :-p
TTaM dice:
En Basic, ¿no es necesario que las variables de cadena tengan el prefijo de un signo de dólar? Así fue en MSQB
Zibri (@zibri) dice:
En mi ESP32 obtengo:
primero: 0x10 (RTCWDT_RTC_RESET), arranque: 0x33 (SPI_FAST_FLASH_BOOT)
error de flash, 1000
ets_main.c 371
ets 8 de junio de 2016 00:22:57y golpear una entrada no hace nada.
Zibri (@zibri) dice:
este es mi módulo: https://c.76.my/Malaysia/espressif-systems-iot-e[email protected]
alguna indicación?
Zibri (@zibri) dice:
esto es mío: https://bit.ly/3grIwJk
Zibri (@zibri) dice:
Todo esto fue escrito aquí: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/romconsole.html
Peter Cook dice:
Intenté esto y ahora no puedo programar el dispositivo; se reinicia, parece cargar el programa, pero solo lo hace durante el reinicio.
primero: 0x1 (POWERON_RESET), inicio: 0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP: 0xee
clk_drv: 0x00, q_drv: 0x00, d_drv: 0x00, cs0_drv: 0x00, hd_drv: 0x00, wp_drv: 0x00
modo: DIOS, reloj div: 1
carga: 0x3fff0018, longitud: 4
carga: 0x3fff001c, len: 1100
carga: 0x40078000, len: 9232
carga: 0x40080400, len: 6400
entrada 0x400806a8Arturo Mezins dice:
¡Guau! Esta publicación tiene vida propia.
A mediados de los 80, mientras trabajaba en un trabajo por contrato, llevé "Small Basics for the 6800" del Dr. Dobbs al 6809 y lo transformé en un monitor de depuración de 2 KB en UVEPROM (lo que se usa para almacenar programas antes de flash) para depurar el producto que hice. Me gustó que Tiny Basic usara una diapositiva BCD, eliminando los errores de truncamiento / redondeo para 5, etc., debido a que no tenía que traducir de binario a decimal (porque era decimal puro). También me gustaba usar variables para almacenar direcciones de depuración y poder "llamar" (es decir, "gosub") en mi código para probar fragmentos con los que tenía problemas. Usé "@" para indirecto, así que no necesitaba Peek / Poke. Este primero funcionó con un Radio Shack Coco2 modificado. Pasé un poco de eternidad haciendo eso, pero fue divertido.
Entonces, ¿por qué lo hice? Los sistemas de desarrollo eran demasiado caros entonces y eso es lo que nosotros, los pobres programadores, teníamos que hacer para sobrevivir. Incluso antes de que el DoD-ARPANET se transformara en “internet”. Por supuesto, hice trampa y usé la montura 6809 de mi empleador diario, que aprendí cuando se estaba ejecutando en PDP11. Cuando el soporte se transfirió a la “computadora” más tarde, lo encendí en mi computadora NEC V20 de 8 MHz con 640 KB de RAM. Sí, soy Matusalén.