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.
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.
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.
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á.
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.
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(); } },
}) }); }
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…