¿Necesito un sistema operativo para ARM Cortex-M0 (3)?

3

Soy un desarrollador de dispositivos de control para fuentes de alimentación de modo de conmutación que necesitan generar una (s) señal (es) PWM con frecuencias de aproximadamente 100 kHz, medir señales analógicas, comunicarse con USART, realizar cálculos relativamente simples, etc. También es importante comenzar rápido y reaccionar muy rápido en algunos eventos como interrupciones externas (a menudo dentro de una fracción de microsegundo).

Ahora estoy usando Atmel Studio con el compilador GNU C.

Me gustaría pasar de los AVR de 8 bits a los ARM. Las principales razones son (con suerte): cálculos más rápidos, más flexibles, más potentes, mejor apoyo de la comunidad.

Realmente quisiera una curva de aprendizaje corta y un ciclo de desarrollo rápido.

Decidí usar los procesadores ARM Cortex-M0 y M3.

¿Podré usar el sistema operativo en ARM?

Las razones por las que creo que podría ser útil en mi caso: curva de aprendizaje más rápida y tiempo de desarrollo. Pero tengo algunas dudas de que podré ejecutar la aplicación dentro de varios milisegundos después de que se aplique el voltaje de suministro y de que pueda interactuar con los periféricos ARM (como los temporizadores).

¿Necesito un sistema operativo en mi caso?

    
pregunta Roman Matveev

3 respuestas

4

Un sistema operativo de propósito general, como Linux, es diferente de un sistema operativo en tiempo real (RTOS), como FreeRTOS y el propio RTX de ARM. Puedes buscar más información sobre las diferencias.

Desde la descripción de su aplicación, diría que ciertamente no necesita, y probablemente no quiere, un sistema operativo de propósito general. Se podría usar un RTOS, pero probablemente no sea necesario.

Creo que los microcontroladores ARM Cortex M0 y M3 no tienen una Unidad de administración de memoria (MMU), por lo que será difícil incluso ejecutar un sistema operativo de uso general en ellos. Un RTOS no requiere un MMU.

Si ya está familiarizado con la programación de AVR pero no está familiarizado con la programación de RTOS, entonces usar un RTOS en su nuevo proyecto ARM probablemente va a aumentar su curva de aprendizaje en lugar de disminuir it.

Un RTOS no requiere mucho tiempo para iniciarse como un sistema operativo de propósito general. Una aplicación RTOS puede estar en funcionamiento en milisegundos.

Un RTOS no debería interferir en su manera de acceder a los periféricos del microcontrolador, como los temporizadores.

    
respondido por el kkrambo
7

Haces dos preguntas muy diferentes.

  

¿Podré usar el sistema operativo en ARM?

Por supuesto, pero probablemente será un RTOS como FreeRTOS en lugar de un sistema operativo dekstop como Linux.

  

¿Necesito un sistema operativo en mi caso?

Estrictamente hablando: por supuesto que no. Cualquier aplicación puede escribirse de forma autónoma, sin un sistema operativo o RTOS.

Pero la pregunta que deberías haber hecho es

  

Me beneficiaré de usar un RTOS.

Eso es más difícil de responder. Los beneficios de un RTOS son los subprocesos múltiples y las bibliotecas (adicionales), incluida la abstracción de hardware. El inconveniente es que lleva tiempo aprender a usar estas instalaciones.

Mi intuición es que, para la aplicación que describas utilizando un RTOS, no te ayudará mucho, por lo que el aprendizaje te costará más de lo que te ahorra. Pero conocer un RTOS probablemente será útil para algún proyecto futuro.

    
respondido por el Wouter van Ooijen
1

Creo que depende de lo que estás haciendo exactamente. Si el sistema de control es simple de lo normal, tener un RTOS allí solo agrega carga en lugar de disminuirlo.

Una razón por la que necesita un RTOS es cuando hay más de una cosa ocurriendo en su MCU.

Tengo un proyecto AVR bastante complicado que requería un RTOS en un ATtiny85 : un atenuador de luz que se controla a través de fibra óptica. La MCU tiene dos cosas que hacer al mismo tiempo: ver y sincronizar la señal de detección de fase de CA y emitir la señal de control TRIAC en el momento adecuado, y un puerto serie de software a 9600 baudios para la interfaz óptica. Tengo que programar ambos usando un código de no bloqueo controlado por interrupciones basado en temporizador.

    
respondido por el Maxthon Chan

Lea otras preguntas en las etiquetas