jueves, 20 de abril de 2023

Lección 2. Operadores

 Los operadores. 

Son los símbolos que permiten realizar operaciones matemáticas y lógicas, como la suma, sustracción, multiplicación, división, comparación y de manejo de bits. Los mas comunes son:

  1. Operadores aritméticos: se utilizan para realizar operaciones matemáticas básicas, como sumar, restar, multiplicar, dividir y obtener el resto de una división. Algunos ejemplos de operadores aritméticos en C son '+' (suma), '-' (resta), '*' (multiplicación), '/' (división) y '%' (módulo).

  2. Operadores de asignación: se utilizan para asignar valores a variables. El operador de asignación más común en C es '='.

  3. Operadores de comparación: se utilizan para comparar dos valores y devolver un resultado booleano (verdadero o falso). Algunos ejemplos de operadores de comparación en C son '==' (igualdad), '!=' (desigualdad), '<' (menor que), '>' (mayor que), '<=' (menor o igual que) y '>=' (mayor o igual que).

  4. Operadores lógicos: se utilizan para combinar expresiones booleanas y devolver un resultado booleano. Algunos ejemplos de operadores lógicos en C son '&&' (AND lógico), '||' (OR lógico) y '!' (NOT lógico).

  5. Operadores bit a bit: se utilizan para realizar operaciones a nivel de bits. Algunos ejemplos de operadores bit a bit en C son '&' (AND bit a bit), '|' (OR bit a bit), '^' (XOR bit a bit) y '~' (NOT bit a bit).

  6. Operadores de desplazamiento: se utilizan para desplazar bits a la izquierda o a la derecha. Algunos ejemplos de operadores de desplazamiento en C son '<<' (desplazamiento a la izquierda) y '>>' (desplazamiento a la derecha).

Además de estos operadores, C también cuenta con operadores de incremento y decremento '++' y '--', operadores condicionales '?:' y operadores de apuntador '*' y '&'.

Estos operadores se utilizan en diferentes situaciones dependiendo de la aplicación que estemos realizando. 

Precedencia de operaciones. 

La operaciones también pueden agruparse y se tiene el mismo concepto de jerarquía que se obtiene en las matemáticas. Hay una precedencia que debe tomarse en cuenta en lenguaje C. 

  1. Paréntesis:  ( )
  2. Postfijos: X++ X--
  3. Prefijos ++X, --X, Signo unario (positivo y negativo): +,-. Negacion y complemento: '!', '~'. Apuntador y dirección: '*', '&' 
  4.  Multiplicación y división: '*',  '/'. Modulo: '%' (la sobra al hacer una división entera) 
  5. Suma y resta: '+', '-'.
  6. Desplazamiento de bits: >>, <<.
  7. Operadores de comparación: <, >, <=, >=.
  8. Relacionales: ==, !=.
  9. AND binario: &.
  10. XOR binario: ^.
  11. OR binario: |.
  12. AND lógico: &&.
  13. OR lógico: ||.  
  14. Condicional ternario: '? :'.
  15. Asignaciones: =, +=, -=.. etc.
  16. Coma: ', ' (separación de parámetros, listas, elementos) 

Todo esto cobra sentido cuando se utilizan estos operadores. En códigos antes mostrados ya estan plasmados los mas comunes para operaciones aritméticas. 



 

En la próxima lección cuando utilicemos las sentencias de control para comenzar a realizar nuestros primeros programas útiles. 



miércoles, 5 de abril de 2023

Lección 01. Variables, entrada y salida estándar.

 Entrada y salida estándar. 

    En una computadora, el concepto clásico que todos tenemos, tiene varios dispositivos de entrada y salida de datos.

Entradas  Salidas
Teclado  Monitor
Micrófono
 Bocinas
Puertos USB
 Ventiladores
Botones de encendido/reinicio
 Puerto VGA
Ratón
 Puerto HDMI
Reloj de tiempo real
 Unidades de almacenamiento
Cámara de vídeo
 LEDs indicadores

    Un teléfono celular también es una computadora, la cual funciona con el propósito de hacer y recibir llamadas, aunque actualmente tienen un sin fin de utilidades más. Comparte con la PC clásica el hecho de que consta de dispositivos de entrada y salida de datos como lo es un touchpad, pantalla, micrófono, auriculares, bluetooth, wifi, etc.

    En lenguaje C es posible utilizar todos los dispositivos de entrada y salida de una computadora. Aunque esto puede ser tanto muy complejo como muy sencillo dependiendo de la aplicación que se esté desarrollando al momento.

    Para fines educativos, en este espacio se utilizará solamente la terminal o consola para hacer la ejecución de nuestros programas en Lenguaje C, y más adelante se utilizarán los puertos de entrada y salida de microcontroladores y/o microprocesadores a nuestra disposición. 

    En C estándar la biblioteca "studio.h" contiene las funciones básicas para el uso de los puertos de entrada salida, y en nuestro caso hemos utilizado ya una de ellas, que es "printf". Esta función sirve para imprimir mensajes en la pantalla. Su uso se irá extendiendo a base de ejercicios.

Variables

Tipos de datos

    Vamos a partir que en este punto, que tienes conocimientos de matemáticas básicos sobre todo algebra, pues en al final las computadoras solamente pueden reconocer números por medio de almacenamiento de energía eléctrica que se organizan en cadenas de 0s y 1s.  
    Una forma sencilla de comprender una variable es la x de una ecuación de primer grado solucionada, es decir un espacio que puede contener un valor. 
    En lenguaje C, tenemos unas cuantas formas de reconocer datos para considerarlos en diferentes tipos. Esto no sera tan fácil de digerir al inicio supongo, pero con la práctica se verá más fácil. Aquí usaremos el precepto de: "La mejor forma de aprender a programar es programando". Los elementales son los siguientes:
  • Enteros, tal como en las matemáticas son los números que no tienen parte fraccionaria, o punto decimal. Para declararlos existen palabras reservadas especificas:
    • int: Entero con signo de 2 bytes (16 bits) y puede tener valores entre -32768 a 32767. El númeto de datos que se pueden representar con 2¹⁶ en representacion binaria. Si no entendiste esta parte, con algunos ejercicios más adelante se intentará hacerlo más claro. 
    • unsigned int: Entero sin signo es decir, sus valores van de  0 a 65535.
    • long int: El modificador long, dobla el tamaño  "base" de los tipos de dato. para los enteros quedaria en 8 bytes, es decir  
  • Caracteres:
    • char: Es un tipo de datos de 1 byte (8 bits) que codifica el codigo acci (una googleada no esta mal para ver de que se trata).  
  • Cadena de caracteres:
    • No es un tipo de dato como tal en Lenguaje C, se maneja como un array de tipo char, mas adelante se tomara en cuenta de mejor manera.
  • Punto flotante:  Es el tipo de datos que permite utilizar números decimales es decir que tienen parte entera y parte fraccionaria. 
    • float: este tipo de dato por lo general es de 4bytes de precisión para representar numero decimales. sus valores van de 3.4E-38 a 3.4E+38
    • double: este tipo de dato esta compuesto de 8 bytes 1.7E-308 a 1.7E+308.
 Probablemente esto en un principio no sea tan importante, pero ya en el momento de trabajar es algo que debe tomarse muy en cuenta. Vale la pena empezar a familiarizar los conceptos.

Tipos de Variables
    Las variables se pueden organizar en dos grandes tipos. 

Globales

    Este tipo de variables se puede utilizar en cualquier momento dado que se declaran de forma que todo el código tenga la capacidad de acceder a ellas. 

Locales

    Este tipo de variable se define en una parte específica del código y es invisible o inaccesible para el resto de la aplicación. 

En este punto se que te estarás preguntando: ¿Que chingados?  sobre todo si es tu primera vez tomando estos conceptos. El autor esperaría que no, que ya estas ampliando tu conocimiento. En todo caso, se peude ver mejor en el repositorio de Github donde se incluye un ejemplo de uso de entrada y salida de datos que se guardan en variables de distintos tipos. 

Ejemplo práctico

    El archivo printScanVariables.c contiene el codigo para interactuar con la pantalla y el teclado con un codigo muestra, es muy básico pero creo que se comprendera facilmente. En el se puede ver el uso de la función scanf, printf y como pueden distintas variables tener alcances globales y locales.

    Las variables se declaran con un tipo de dato y el valor iniciar (de preferencia) debido a que si esto no se hace puede en algun punto haber comportamientos extraños producto de valores no esperados.

Como se puede ver se sigue la estructura de un programa estandar, al inicio los headers, la sección de macros, variables globales, prototipos de funcion, funcion principal y funciones vamos a llamarles secundarias. 

Dentro del archivo se puede encontrar tambien la forma de imprimir distintos tipos de datos, como lo son caracteres, enteros y números flotantes. utilizando el formato de la función printf (que de hecho deriva del nombre print with format). La función printf se utiliza en su forma más simple con la estructura: 

printf ("Cadena de caracteres", parametros de distinto tipo de dato).

Los modificadores de formato mas utilizados son los siguintes:
  • %d: para imprimir un número entero con signo.
  • %u: para imprimir un número entero sin signo.
  • %f: para imprimir un número en coma flotante.
  • %c: para imprimir un carácter.
  • %s: para imprimir una cadena de caracteres.
  • %p: para imprimir un puntero.
  • %x o %X: para imprimir un número en formato hexadecimal.

A grandes rasgos se utilizarán comas para separar los parametros di la funcion, que pueden ser los tipos de datos vistos anteriormente (enteros, caracteres, flotantes, etcétera).






















Para el caso de la lectura de datos desde el teclado, se utiliza la funcion scanf() la cual funciona  tomando datos de teclado y guardandolos en las variables. Al igual que printf funciona con la misma estructura utilizando caracteres de formato. 






En el código ejemplo se utilizan funciones que serán explicadas más adelante. Recomiendo descargar el código y en base a el crear una funcion main que permita escribir mensajes personalizados,  leer frases y leer variables para hacer algunas otras operaciones. Por ejemplo de desigualdades. 

Para el caso de la lectura de datos, se realiza por medio de la funcion scanf().

La funcion scanf(), utiliza los mismos operadores que scanf, no daremos muchos detalles debido a que este curso esta pensado en darle mas importancia a los sistemas embebidos. Asi que la utilizaremos solamente para aprender un poco la lógica de programación. 















domingo, 5 de febrero de 2023

Leccion 00. Hola mundo y Visual Studio Code

¿Cómo se hace un programa/aplicación en Lenguaje C?

No quiero meterme demasiado en la teoría aun, porque en un inicio aprender definiciones y proceso puede que sea muy cansado. 

Así que les explico un poco, lo que yo sé. No usaré una bibliografía todavía.

Para comenzar, hace unos años (casi 70 dado que escribo esto en 2022) las computadoras eran de tamaño de un cuarto completo,  llenas de bulbos y para realizar operaciones se insertaban tarjetas perforadas y debían cambiarse cantidades enormes de cables y switches,  en esos días el software era curiosamente desarrollado sobre todo por mujeres, hay una película de Disney al respecto de hecho, y es muy famosa la foto de la programadora con el código que escribió para las máquinas que llevaron al hombre a la luna. Unos años después, ya en los 60s y 70s se empezaba a experimentar con las pantallas, fue entonces cuando nació el lenguaje ensamblador y lenguajes de "alto nivel" que para comprenderlo más fácil, no son solo representaciones de 0s y 1s en grandes cadenas que solo la computadora puede entender (las tarjetas perforadas cumplían una función parecida a esta) sino que se representan acciones por palabras comunes que posteriormente pasaron a llamarse keywords.

Una vez que se tuvieron los lenguajes de alto nivel, había que traducir el lenguaje humano (inglés) a lenguaje de las máquinas, 0s y 1s organizados en cadenas que se escriben en un mapa de memoria. Con este fin se inventaron los compiladores. Que son herramientas que se encargan de hacer el proceso de traducción de lenguaje humano a mapas de memoria que el procesador puede comprender.

Pare esto se llevan a cabo 4 pasos principales (a todo esto mejor aprénderlo en inglés será más fácil a futuro):

  1. Preprocesamiento (pre- processing)
  2. Compilación (Compiling)
  3. Ensamblado (Assembling)
  4. Enlazado (Linking)

Una buena práctica de programación es separar los códigos en pequeños módulos. Esto es un archivo principal, y distintos archivos secundarios que serán unidos en el proceso de compilación. 

Compilar nuestro primer programa en lenguaje C

En un primer post ya enseñamos a instalar  IDE de DEV C (compilado y editor)en el sistema operativo windows, ahora se realizará el mismo proceso utilizando GCC (GNU Compiler Collection) desde GNU Linux, el proceso será el mismo en escencia asi que lo que aquí se describa se podrá utilizar en ambos sistemas operativos indistintamente (a eso le llamamos portabilidad).
De igual manera que se hizo en Windows tendremos que conseguir un editor y un compilador como herramientas principales. 
Una herramienta muy útil es Visual Studio Code que funciona en ambos sistemas operativos. Otra herramienta es Notepad++ para windows en Linux con Gedit es posible trabajar para fines educativos.
En este blog se usaran tanto Visual Studio Code como Gedit. 

Reciclamos el código de hola mundo de la vez pasada:

//Headers - Encabezados
#include <stdio.h>

// Macros 
// Global variables - Variables Globales
// Function prototypes - prototipos de función
// Main function - Función principal

int main (){
printf ("Hola mundo\n");
return 0;
}
// Functions - Funciones 




Para compilar y ejecutar nuestro programa en Linux es necesario tener a la mano una terminal y situarnos en el path de trabajo, en mi caso:

$ cd ClangCourse/HelloWorld/

En este directorio se encuentra nuestro archivo HolaMundo.c el cual compilaremos con el comando:

$ gcc HolaMundo.c -o HolaMundo

Lo cual compilara nuestro programa y creara un archivo binario ejecutable llamado HolaMundo. Para ejecutarlo se manda llamar el binario a ejecución:

$ HolaMundo

La salida es el texto: Hola Mundo



Visual Studio Code

Se puede descargar desde su sitio oficial e intalar en cualquie sistema operativo. Es un IDE muy completo y amigable, además que tiene integrado el sistema de versionado GIT lo que nos hará un poco mas fácil nuestras tareas del día a día. Se puede descargar en su portal:


Esta herramienta es de las más utilizadas hoy en día, en la seccion de documentación se puede encontrar información de como instalar la aplicación. 

En windows solo es darle doble clic y siguiente a todo lo que salga. En linux se descarga el paquete y se corre con el instalador de tu preferencia (en mi caso es fedora así que se utiliza dnf, en ubuntu será apt). 

Una vez instalado VS Code seguramente estará configurado en inglés, y como este intento de curso esta dirigido a hispanoparlantes además que siempre es más sencillo aprender algo en el idioma natal, pues es posible cambiar la interfaz. 

Para instalar el paquete de idioma español sera necesario buscarlo en la seccion de extensiones buscamos español y damos clic en instalar.



















Una vez finalizado, sera necesario reiniciar la interfaz como lo indica una ventana emergente en la esquina inferior derecha.












Damos clic en Restart y listo, VS Code esta ahora en español.
























Asi mismo instalaremos las herramientas para desarrollo en Lenguaje C. 

















Buscamos C e instalamos las 3 extensiones relacionadas:
  • C/C++
  • C/C++ Themes
  • C/C++ Extensions Pack
Una vez instalado podemos abrir el directorio de trabajo. Solamente debemos abrir la carpeta donde estamos trabajando en el menú: Archivo/Abrir Carpeta/ y seleccionamos el directorio donde estamos trabajando:

Al hacer clic en abrir, tenemos en pantalla los archivos que forman parte de nuestro proyecto.
en este caso:

Procedemos a abrir el archivo HolaMundo.c


Ahora podemos hacer una prueba y compilar nuestro programa desde VS Code. Dado que ya están instalados los plugins de C/C++ solo hay que hacer clic en Run en la parte superior derecha y listo, nos mostrara la terminal con el programa ejecutándose.



Probablemente haya que configurar manualmente algunos parámetros o variables de entorno si estas acciones no se realizan de forma automática. De ser así pueden preguntar en la caja de comentarios o recurrir siempre al poderoso google, o a stackoverflow para saltarnos un paso.

Saludos y nos vemos en la próxima lección. 
<- Anterior Siguiente ->

Yocto Project II. Primera configuración de sistema y compilación.

 Se dice que la mejor manera de aprender a programar es programando, el mismo principio se sigue respetando para cuestiones de sistemas oper...