Para saber cómo funciona, no quieres usar ninguno de los anteriores. Obtener un compilador de la cruz del brazo y la documentación de st, hecho. Comience a codificar. Estos chips son generalmente muy fáciles de programar. la documentación le dice qué bits en qué registros hacen qué.
Cualquier / todas estas bibliotecas tienen la intención de eliminar esa comprensión / carga / trabajo de usted y hacer que se sienta como una experiencia de programación de aplicaciones similar a una API. Que es lo que mucha gente quiere. Puede usar todas las fuentes de estas bibliotecas para ayudar a comprender, pero a medida que mejora, encontrará agujeros y problemas en las bibliotecas, a veces con un código muy aterrador. código mezclado, escrito genéricamente y portado de forma aproximada de un chip a otro, tal vez con características de soporte que su chip no tiene, etc. Y todos tienen una sobrecarga excesiva. 10 a 100 veces demasiado código para la tarea, seguro que gran parte de él se puede optimizar, pero ¿por qué tenerlo allí en primer lugar?
Ya sea que vaya por su cuenta o use una de estas bibliotecas, aún debe consultar la fuente de las bibliotecas que usa para ver si se siente cómodo con lo que están haciendo, si tiene sentido, coincide con la documentación del chip, etc. . Cuando algo sale mal, es probable que tenga que escarbar tanto en sus cosas como en las suyas para averiguar por qué.
Tenga en cuenta que los documentos con chip tampoco son perfectos, eso es parte de la diversión.
No entiendo por qué surge el ensamblaje en una discusión acerca de la programación completa. Se puede arreglárselas con muy poco montaje. Para estos chips Cortex-M, técnicamente solo necesitas esta cantidad de ASM para arrancar:
.globl _start
_start:
.word 0x20001000
.word main
No puede confiar en data ni en bss y no puede regresar de main con un mínimo de asm. Pero ese es todo el asm que NECESITA para el más simple de metal desnudo. Ahora, si quiere hacer interrupciones, necesita más entradas en la tabla de vectores. Más líneas de palabras. Recomiendo más asm, pero quizás 10 o 20 líneas más.
esto suele ser todo el asm que uso.
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
Sí, dice cortex-m0 pero este es un bootstrap real para mi código m4. Prefiero que esto sea pulgar no pulgar2. Y solo reutilizo este código de una corteza a otra, cambiando la dirección del puntero de pila según sea necesario, por lo que funciona para m0, m3 y m4. Todavía no tengo un m7 ni lo he investigado mucho.
Habilitar el fpu puede requerir algunas líneas más de asm ya que se necesitan instrucciones específicas. Pero el punto es no confundir la programación de bajo nivel y asm. C tiene lo que necesita para configurar el chip, así como para escribir una aplicación. Las bibliotecas de las que está hablando están escritas en C, no en asm, por lo que obviamente tampoco necesitan usar asm.
Si desea aprender el funcionamiento interno, escriba su propio código. No utilice estas bibliotecas más que como referencia. A veces es más fácil simplemente piratearlo que intentar leer su código. (No solo ST, sino todos los proveedores. Uno de los proveedores tenía una línea de código tan alarmante que la uso como una pregunta de entrevista, no, no la publicaremos aquí).
Definitivamente ST, pero también otros proveedores, para ahorrar energía, habilitar el reloj para las secciones del chip, así que antes de entrar e intentar parpadear un led, debe encontrar el bit de habilitación para ese bloque gpio y ver si sale del reinicio habilitado, si no, entonces habilítelo, hablar con esa lógica gpio sin un reloj habilitándolo simplemente bloquea el procesador mientras espera una respuesta de la lógica que nunca responderá. No siempre te hablan de estas habilitaciones. Una vez habilitados, a veces te guían por el inicio de algún periférico en particular. ST docs son bastante buenos. Al venir de un microchip que obtiene una nota bastante mala para la documentación, no debería tener un problema.