Este artículo analiza la naturaleza y el uso de las variables en lenguaje C en el contexto de las aplicaciones integradas.
Muchos de nosotros escuchamos la palabra "variable" en las clases de matemáticas mucho antes de saber mucho, si es que sabemos algo, acerca de la programación de computadoras. Una variable matemática es una cantidad cuyo valor no se conoce o no se limita a un número. Este uso es similar, aunque no idéntico, al concepto de una variable C. Dos diferencias importantes son: Primero, en matemáticas, usualmente usamos una letra como X o y para representar una variable, mientras que en C usamos con frecuencia una palabra o frase descriptiva como temperatura, Valor máximoo Número de muestras. En segundo lugar, hay situaciones en las que usamos una variable de C para identificar una cantidad que es conocida y no pretende ser nunca diferente del valor original.
Las variables son convenientes e intuitivas para los programadores. Para el hardware computacional, por otro lado, no tienen un significado real. Los microprocesadores almacenan datos en registros y ubicaciones de memoria. Esta diferencia fundamental entre las personas que escriben firmware y las máquinas que ejecutan el firmware se supera mediante lenguajes de alto nivel como C, que maneja varios detalles asociados con la traducción entre variables basadas en texto y la realidad física de un procesador.
Los diseñadores de sistemas integrados a menudo trabajan con procesadores de 8 bits. En estos dispositivos, el tamaño fundamental de los datos es siempre un byte. La memoria se organiza de acuerdo con los bytes, el tamaño de los registros es de un byte y la CPU está diseñada para procesar datos de 8 bits. Esta es una limitación bastante incómoda porque hay muchas situaciones en las que el valor de una variable excederá el valor máximo de un número de 8 bits.
El lenguaje C no limita el tamaño de una variable a 8 bits, incluso cuando está trabajando con un procesador de 8 bits. Esto significa que una variable en su firmware puede corresponder a múltiples registros o ubicaciones de memoria en el hardware. "Manualmente" administrar variables multibyte (es decir, a través del lenguaje ensamblador) no es mi idea de diversión, pero a los compiladores no les importa en absoluto, y hacen el trabajo muy bien.
El primer paso para usar una variable es definir esa variable. Los componentes esenciales de una definición de variable son el tipo y el nombre.
Hay muchos tipos de variables; La lista completa, así como los detalles de la implementación del hardware, variarán según el compilador que estés usando. Aquí hay unos ejemplos:
El siguiente código muestra definiciones de variables que consisten solo en un tipo básico y un nombre (la forma más técnica de referirse al nombre es “identificador”):
int ADC_result;
char ReceivedByte;
flotador Referencia_Voltaje;
En muchos casos, es una buena idea darle un valor inicial a una variable. Esto facilita la depuración y es esencial si la variable se usará antes de que se establezca en un valor conocido. Puede inicializar una variable en la definición o en otra parte de su código, pero incluir el valor inicial en la definición es una buena manera de mantener su código organizado y desarrollar el hábito de inicializar constantemente cuando sea necesario.
Aquí hay ejemplos de definiciones de variables que incluyen la inicialización:
int ADC_result = 0;
char ReceivedByte = 0x00;
flotante Reference_Voltage = 2.4;
Hay varias otras palabras que se pueden incluir en una definición de variable. Estos se utilizan para especificar con mayor precisión la naturaleza de la variable o para dar instrucciones al compilador sobre cómo implementar la variable en el hardware.
Las siguientes palabras clave podrían ser útiles en sus proyectos de firmware:
Aquí hay unos ejemplos:
unsigned char UART_byte; // El rango de valores aceptables de la variable es de 0 a 255.
const float PI = 3.14159;
volatile unsigned char ADC_Register // El registro puede ser modificado por el hardware, por lo que usamos el calificador volátil para evitar optimizaciones que podrían hacer que el programa ignore los eventos generados por el hardware.
código de calibración sin firmar CalibrationValue = 78;
No hay mucho que decir acerca de cómo usar sus variables después de que se hayan definido. En realidad, con respecto a la variable en sí, la definición es la mayor parte del trabajo. Después de eso, simplemente incorporas el identificador de la variable en operaciones matemáticas, bucles, llamadas a funciones, etc. Un buen compilador no solo manejará los detalles de la implementación del hardware sino que también buscará formas de optimizar el código con respecto a la velocidad de ejecución o el tamaño del programa.
Quizás el error más común relacionado con el uso variable es un desbordamiento. Esto se refiere a una situación en la que el valor asignado a una variable está fuera del rango numérico asociado con el tipo de datos de la variable. Debe pensar en todos los escenarios posibles relacionados con una variable determinada y luego elegir el tipo de datos en consecuencia.
La funcionalidad básica de la variable proporcionada por el lenguaje C es intuitiva y directa, pero hay algunos detalles que pueden ayudarlo a hacer que una aplicación integrada sea más confiable y eficiente. Si tiene alguna pregunta relacionada con las variables de C, no dude en mencionarlas en la sección de comentarios a continuación, e intentaremos incorporar la información relevante en los artículos futuros.
ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'embedded,memory,computing,embedded-software,arduino'}); ga('set',{'contentGroup1':'embedded,memory,computing,embedded-software,arduino'}); 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','memory','computing','embedded-software','arduino'], 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…