Categories: NoticiasTecnología

Concurrencia e interrupciones en microcontroladores y sistemas integrados

Este artículo presenta la idea de concurrencia y un mecanismo que muchas computadoras proporcionan para lidiar con la concurrencia llamada interrupciones.

Este artículo es el primero de una serie que explorará los conceptos de concurrencia e interrupciones. La mayor parte de la serie tratará directamente con microcontroladores e interrupciones GPIO.

En esta pieza inicial, abordaremos las definiciones básicas de estos conceptos y consideraremos cómo son relevantes para escribir código para un microcontrolador.

¿Qué es la concurrencia?

Hablemos de concurrencia usando un ejemplo con el que todos estamos familiarizados. Por lo general, cuando te acuestas, quieres despertarte a una hora determinada. Aquí tiene dos objetivos: acostarse para poder descansar, pero también asegurarse de no dormir más allá de la hora de despertarse deseada.

Una forma de asegurarse de que no se pierda su hora de despertarse es permanecer despierto y mirar el reloj, pero eso frustraría su propósito de querer acostarse. Para ayudar a remediar esto, usualmente usamos un reloj despertador (ya sea un dispositivo o una persona de confianza que ya estaría despierta para ese momento) para despertarnos en el momento particular para que podamos concentrarnos en dormir y aún así cumplir con nuestro objetivo de despertarnos hora.

Concurrencia es el término que usamos para describir el escenario cuando tiene que atender dos o más procesos al mismo tiempo, pero solo tiene la capacidad de tratar físicamente solo uno de los procesos en cualquier momento.

En el ejemplo anterior, los dos procesos a los que debemos prestar atención son el sueño y el seguimiento del tiempo (por lo que nos despertamos a la hora deseada). Es físicamente imposible para la misma persona hacer ambas cosas al mismo tiempo.

Por lo general, solo estamos interesados ​​en eventos particulares asociados con los procesos a los que estamos atendiendo. Como notó anteriormente, el único evento que nos importa desde una perspectiva de tiempo es si es hora de despertarse. La forma típica de abordar la concurrencia es tener otro recurso físico (el despertador o la persona) monitorear el evento que nos interesa y luego alertar (o interrumpir) al hecho de que el evento ha ocurrido para que podamos atenderlo.

La Figura 1 muestra una ilustración de la línea de tiempo de esto.

Figura 1. Ilustración de la línea de tiempo de irse a la cama y dejar que la alarma lo despierte a una hora específica.

Concurrencia en sistemas integrados y ciberfísicos

Los sistemas integrados y ciberfísicos generalmente tienen que lidiar con la concurrencia.

Un ejemplo de este concepto en acción es un microondas. El dispositivo debe poder manejar las pulsaciones de los botones o detectar cuándo abre la puerta mientras la comida se está calentando. Al presionar el botón de pausa o cancelar o al abrir la puerta, la comida dejará de calentarse.

Los microcontroladores, que son las computadoras que normalmente programa para ser el "cerebro" del sistema, están diseñados teniendo en cuenta la concurrencia.

Además de la CPU de uso general, contienen varios dispositivos de hardware especializados (llamados periféricos) para interactuar con el mundo exterior para que pueda conectar cosas como botones y pantallas y otro hardware externo que necesita para implementar su sistema. Por lo general, estos periféricos tienen un mecanismo de interrupción para que la CPU pueda pedirles que observen un evento en particular y luego interrumpan la CPU cuando se produce ese evento.

Descripción general de alto nivel de interrupciones y programas concurrentes

Las interrupciones en un microcontrolador funcionan como en el ejemplo de dormir y el despertador que discutí anteriormente.

Puede escribir un programa que configure un periférico para observar un determinado evento e interrumpir la CPU cuando se produce ese evento, por ejemplo, cuando el valor de entrada GPIO va de 0 a 1. Cuando su programa se ejecuta, la CPU ejecuta las piezas de su programa principal. Cuando se produce el evento que está esperando, el periférico le indica a la CPU que se ha producido el evento. Si todo está configurado correctamente, la CPU detendrá todo lo que estaba haciendo en el programa principal, ejecutará una función especial llamada rutina de servicio de interrupción (ISR) o controlador de interrupción, y luego volverá al programa principal para continuar desde donde se quedó. cuando estuvo hecho.

Tiene que escribir el ISR como parte de su código. Suponiendo que está utilizando C para escribir su programa, eso significa que debe declararlo y definirlo en algún lugar del código fuente que se creará como parte del ejecutable que ejecutará el microcontrolador.

Sin embargo, usted nunca llama al ISR. Todas las herramientas de desarrollo de microcontroladores tienen una forma específica para que usted le diga al compilador de C que una determinada función es un ISR y con qué interrupción específica está asociada. Una vez que haya hecho esto correctamente, cuando ocurra la interrupción específica, la CPU saltará automáticamente a esa función y la ejecutará.

Un ejemplo de interrupción en el código C

Debido a la forma en que las interrupciones funcionan, el manejo de la concurrencia en la programación puede parecer un poco no intuitivo al principio.

Las siguientes figuras explican cómo funcionaría un código escrito en C que tiene un ISR para ayudar a proporcionar una buena manera de pensar en programas concurrentes. Se supone que toda la configuración de interrupción se realiza correctamente.

Figura 2. Código en C con interrupción
  1. La CPU está ejecutando código en el ciclo while en la función principal.
  2. El evento de interés (cambio de 1 a 0) ocurre en el pin que está configurado para la interrupción.
  3. La CPU deja de ejecutar el código en el bucle while y ejecuta la rutina de servicio de interrupción.
  4. La CPU reanuda la ejecución del bucle principal desde donde se dejó después de terminar de ejecutar la rutina de servicio de interrupción.
  5. La CPU está ejecutando código en el bucle while.
  6. El evento de interés ocurre nuevamente.
  7. La CPU deja de ejecutar el código en el bucle while y ejecuta la rutina de servicio de interrupción.
  8. La CPU reanuda la ejecución del bucle principal desde donde se dejó después de terminar de ejecutar la rutina de servicio de interrupción.

Interrupciones para periféricos y GPIO

La mayoría de esta serie se centra en los conceptos de concurrencia e interrupciones en referencia a los microcontroladores. Sin embargo, antes de continuar por ese camino, entraremos en más detalles sobre las interrupciones para otros periféricos.

ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'embedded,computers-peripherals,electromechanical,embedded,engineering-consulting'}); ga('set',{'contentGroup1':'embedded,computers-peripherals,electromechanical,embedded,engineering-consulting'});

ga('set',{'dimension3':"September 30, 2019"});

ga('set',{'dimension4':"Philip Asare"});

ga('send', 'pageview');

!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1808435332737507'); // Insert your pixel ID here. fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['embedded','computers-peripherals','electromechanical','embedded','engineering-consulting'], content_type: 'category'});

_linkedin_data_partner_id = "353081"; (function(){var s = document.getElementsByTagName("script")[0]; var b = document.createElement("script"); b.type = "text/javascript";b.async = true; b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; s.parentNode.insertBefore(b, s);})(); } if(jstz.determine().name().indexOf("Europe") === -1) { showSocialCode(); // NOT EU } else { showSocialCode(); window.addEventListener("load", function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#14a7d0" } }, "type": "opt-out", "content": { "message": "This website uses tracking cookies to ensure you get the best experience on our website.", "href": "https://www.allaboutcircuits.com/privacy-policy/", "dismiss": "OK, GOT IT" }, onInitialise: function (status) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },

onStatusChange: function (status, chosenBefore) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },

onRevokeChoice: function () { var type = this.options.type; if (type == 'opt-out') { console.log("eu"); //showSocialCode(); } },

}) }); }

Maria Montero

Me apasiona la fotografía y la tecnología que nos permite hacer todo lo que siempre soñamos. Soñadora y luchadora. Actualmente residiendo en Madrid.

Recent Posts

Máquina de mano Lean, Green, Raspberry Pi

Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…

2 years ago

Cómo pronosticar series de tiempo usando autorregresión

Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…

2 years ago

Aquí están todas las formas en que puede cargar su AirPods Pro

Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…

2 years ago

Las principales noticias tecnológicas del lunes: la prohibición de clientes de terceros de Twitter parece no ser un accidente

Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…

2 years ago

AirPods Max 2: aquí están las características más solicitadas

Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…

2 years ago

El remake de Dead Space continúa luciendo terriblemente genial en el nuevo tráiler de la historia

El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…

2 years ago