ARM - Ethernet

Hi Pou,

Son rutinas en C y ASM que se compilan junto con el programa.
Su funcion es administrar el tiempo que el procesador dedica a cada proceso.
display, ethernet,USB,CAN son procesos que normalmente estan activos
y a los que se tiende que atender cuando genera una intrreupcion.
Aqui te paso lo que forma el FreeRTOS.
:)
 

Adjuntos

  • FreeRTOS.zip
    135.5 KB · Visitas: 10
Lo que te permite un kernel multitasking (osea multitarea) es distribuir el tiempo del uP o uC (segun sea) a las distintas tareas.

Por ej. yo puedo tener 4 tareas distintas (tareas relativamente sencillas):

- Tarea 1: encender y apagar un led.
- Tarea 2: atender el puerto serie.
- Tarea 3: manejar un display.
- Tarea 4: manejar un dispositivo SPI.

El kernel divide el tiempo de uso del uC/P a una cierta base de tiempo, supone 1mSeg. Entonces cada tarea en base a 100mSeg recibira mayor o menor prioridad del uso del uC/P, siguiendo con el ej.:

- Tarea 1 - 10% --> 10 mSeg
- Tarea 2 - 10% --> 10 mSeg
- Tarea 3 - 30% --> 30 mSeg
- Tarea 4 - 50% --> 50 mSeg (esto es lo que normalmente ves en Windows cuando entras en el administrador de tareas)

Entonces cada 100mSeg el ciclo del uP/C comienza de nuevo tarea por tarea y se va repartiendo el tiempo.

Eso es lo que trata de hacer un kernel multitasking, pero obviamente en el medio tenes un monton de despiole, como por ej. encargarte de guardar el contenido de la pila de la tarea anterior y todos sus flags de estado, por lo que tenes punteros (hablando en codigo C) o direcciones (en assembler) por todos lados.
 
De hecho, hay cada vez más fabricantes o plataformas para programar ARM's gratuitas, la mayoría de las cuales se suelen basar en el WinARM. Así a bote pronto, aparte de CooCox, me viene a la cabeza Ride con ST, por ejemplo.

Lo que si he visto, es que todos los fabricantes escriben sus propios 'drivers' para sus micros ARM, y los puedes encontrar por ejemplo, en las demos que vienen con IAR, con el CooCox (exactamente los mismos archivos .c y .h), con Ride, con Keil, etc.

Las mayores diferencias entre los diferentes IDE's son básicamente dos: la capacidad del compilador de optimizar (el GCC para ARM es realmente excepcional, casi a la altura del de IAR), cosa que para la estructura interna de loa ARM es fácil y por tanto hay pocas diferencias, y luego está el tema de la depuración.

Lo que más cambia, complica, ayuda, importa y valoro, de los IDE, es la parte de depuración. No tanto la capacidad para soportar sistemas HW de depuración en circuito (ICE, generalmente JTAG y TWD para los ARM), si no el soporte para diferentes cosas. Así pues, por ejemplo, el WinAVR es estupendo para depurar todo lo relacionado con periféricos, gracias a su interfaz gráfico con los mismos. Pero para los mismos AVR, cuando el HW y sus periféricos ya funcionan correctamente, es bastante mejor (a mi entender) el IAR, pues permite hacer trazas, plugins para sistemas operativos, y otros tipos de soporte de depuración del programa propiamente dicho, que hacen más fácil encontrar bugs y problemas relacionados propiamente con la aplicación.

El ejemplo más evidente, es la integración del PowerPAC dentro del IAR. En su versión gratuita, las ventanas de depuración y soporte del RTOS ofrecen el tiempo que ha estado activa cada tarea, el stack que parece ser que ocupan, el estado de las mismas, permite poner condiciones de parada (breakpoints) según los diferentes elementos del sistema operativo, permite ver los parámetros operativos de los diferentes componentes (tareas, pila USB, Fat filesystem, TCP/IP), etc. Cada cosa en su ventana, claro y fácil de leer. En su versión no gratuita, parece ser que aún hay más (trazas, gestión del consumo según tareas, depuración controlada y gestionada según la energía y situación, permitiendo que el micro entre en reposo o se pare sin problemas de depuración, midiendo el consumo, etc).
 
De hecho, hay cada vez más fabricantes o plataformas para programar ARM's gratuitas, la mayoría de las cuales se suelen basar en el WinARM. Así a bote pronto, aparte de CooCox, me viene a la cabeza Ride con ST, por ejemplo.

Lo que si he visto, es que todos los fabricantes escriben sus propios 'drivers' para sus micros ARM, y los puedes encontrar por ejemplo, en las demos que vienen con IAR, con el CooCox (exactamente los mismos archivos .c y .h), con Ride, con Keil, etc.

Las mayores diferencias entre los diferentes IDE's son básicamente dos: la capacidad del compilador de optimizar (el GCC para ARM es realmente excepcional, casi a la altura del de IAR), cosa que para la estructura interna de loa ARM es fácil y por tanto hay pocas diferencias, y luego está el tema de la depuración.

Lo que más cambia, complica, ayuda, importa y valoro, de los IDE, es la parte de depuración. No tanto la capacidad para soportar sistemas HW de depuración en circuito (ICE, generalmente JTAG y TWD para los ARM), si no el soporte para diferentes cosas. Así pues, por ejemplo, el WinAVR es estupendo para depurar todo lo relacionado con periféricos, gracias a su interfaz gráfico con los mismos. Pero para los mismos AVR, cuando el HW y sus periféricos ya funcionan correctamente, es bastante mejor (a mi entender) el IAR, pues permite hacer trazas, plugins para sistemas operativos, y otros tipos de soporte de depuración del programa propiamente dicho, que hacen más fácil encontrar bugs y problemas relacionados propiamente con la aplicación.

El ejemplo más evidente, es la integración del PowerPAC dentro del IAR. En su versión gratuita, las ventanas de depuración y soporte del RTOS ofrecen el tiempo que ha estado activa cada tarea, el stack que parece ser que ocupan, el estado de las mismas, permite poner condiciones de parada (breakpoints) según los diferentes elementos del sistema operativo, permite ver los parámetros operativos de los diferentes componentes (tareas, pila USB, Fat filesystem, TCP/IP), etc. Cada cosa en su ventana, claro y fácil de leer. En su versión no gratuita, parece ser que aún hay más (trazas, gestión del consumo según tareas, depuración controlada y gestionada según la energía y situación, permitiendo que el micro entre en reposo o se pare sin problemas de depuración, midiendo el consumo, etc).

Se nota que trabajas de esto :LOL: , la tenes muy clara, y eso esta bueno para este foro y sus usuarios (y) .
 
La verdad es que los proyectos que he acabado con ARM han sido pocos y de escasa envergadura, mientras que los más adecuados se han acabado implementando de otra manera (generalemente con mis queridos AVR) por cuestiones varias, excepto el proyecto con el que estoy trabajando ahora, un equipo de medición industrial con bastantes requerimientos (CANOpen, ADC de 12 bits a 2MSPS, controles varios, multímetro, puerto serie, etc.)
 
STM32F103 en varios tamaños (64 pines en la placa de demo que me regalaron, 100 y 144 según la aplicación, que aunque la base sea la misma, habrá diferentes variantes). Los otros proyectos que he realizado han sido con el AT91SAM7S64 y el AT91SAM7X256, que no son Cortex-M3 si no ARM7TDMI. Del último tengo una placa de evaluación de Olimex muy chula.
 
Yo tengo arm de luminarymicro sus librerias son bastantes. Es facil trabajar con KEIL te da todo, pero estoy probando el codesourcery con el ide de keil es mas dificil de configurar el startup y el linker y ademas las interrupciones.
Lo que da el fabricante no es completo para este compilador.
 
Hi Cristian...
Que micro estas utilizando?

Yo probe tambien el Codesourcery, con un micro de TEXAS, y tambien se me hizo muy complicado.
AL final el micro de Texas no lo utilice y deje de usar el codesourcery.

:)
 
Hay tengo el LM3S818 trabaja bien con Keil y Iar en la documentacion de las librerias esta todo pero hasta no se como tomar cualquier pin adc en forma independiente por que hay ejemlos con tomas consecutivas de 3 pines ADC.
 
Ok, yo tengo el kit de LM3S9B92,
exactemanete que es lo que ocupas;
como configurar el puerto?
quieres un solo canal de ADC, que el resto de los pines queden como GPIO?
:)
 
En esos micros los Pines ADC son dedicados a esa funcion.
Hay ejemplos para adc yo lo ise y funciona para ADC0 tambien para una secuencia de adc0,..adc5 pero no hay para un adc cualquiera por ejemplo yo quiero solo el adc3 nada mas.
 
Ok, no te preocupes si te entendi, deja desempolvo el kit jiji,
Estas usando el codesourcery en modo evaluacion?
de ke trata tu proyecto? si se puede saber :)

Me puedes pasar el link de la nota de aplicacion?
 
Última edición:
Atrás
Arriba