domingo, 11 de septiembre de 2022

Primeros pasos en Lenguaje C

Muy breve historia del lenguaje C


Este lenguaje fue desarrollado por Dennis Ritchie entre 1969 y 1972 en los laboratorios Bell. Una característica importante es que estuvo enfocado en el desarrollo de sistemas operativos Unix específicamente.

Dadas sus bondades, como que era fácil de crear aplicaciones de alto nivel y a la par implementar soluciones de bajo nivel. Su uso incremento rápidamente, a finales de los 70s,  comenzó a sustituir a BASIC como lenguaje de programación de microcomputadoras, también en esta época se hizo el desarrollo del lenguaje C++, que toma C y se le añade la manipulación de Objetos. 

 En 1989,  se realizó la estandarización del lenguaje C bajo el estándar: SO/IEC 9899:1990. 

La segunda revisión se realizó en 1999 bajo el nombre: ISO 9899:1999, C99.

En el 2011 una nueva revisión estuvo disponible: ISO/IEC 9899:2011 o C11

La última revisión es la ISO/IEC 9899:2018 o C18.

Para mas información podemos ir a dar una vuelta por wikipedia o en la página de la historia de C.

Herramientas para trabajar

La idea de esta sección es familiarizarnos con el lenguaje C, hacer algunos programas básicos en consola para intentar comprender su funcionamiento y estructura, para después adentrarnos en lo que nos interesa. Lenguaje C para sistemas embebidos. Si ya tienes conocimientos del tema, puedes saltarte hasta la sección de desarrollo con microcontroladores, y si eres nuevo en este mundo, intentaré hacer todo lo más simple posible

Lo más básico para trabajar con Lenguaje C, es un procesador de texto y un compilador.

El procesador de texto, es el software que nos permite trabajar con el lenguaje de programación, en nuestro caso C. 

El compilador esta compuesto por herramientas que permiten traducir lenguaje C (instrucciones en "idioma humano" llamadas  de alto nivel) en mapas de memoria que la computadora, microprocesador o microcontrolador podrán interpretar. 

IDE (Integrated Development Environment):  Por sus siglas en inglés es un entorno de desarrollo integrado, que como su nombre nos indica es un conjunto de herramientas que nos permiten realizar desarrollo en un solo software. Por lo general los IDEs contienen un editor de código, compilador, debugger e interprete en un solo software y actualmente control de versiones. Algunos ejemplos de IDEs populares para diversos lenguajes de programación son Eclipse, NetBeans, Visual Studio Code, y Arduino IDE.  

Instalación de Dev C++

Dev C++ es un IDE optimizado para el desarrollo de Software utilizando herramientas GNU, de código abierto, es decir,  cualquier persona pude ver su código fuente y modificarlo. Se utilizará este IDE para realizar nuestros primeros programas debido a que es muy fácil de conseguir e instalar, es gratuito y también contiene editor, compilador y debugger. 

 La página oficial del proyecto es la siguiente: https://www.bloodshed.net/  en esta página procedemos a descargar el software. 










Al hacer clic, nos redirige a sourceforge un repositorio de software libre en el cual podemos encontrar muchos proyectos de software libre. La descarga debería iniciar automáticamente, de no ser así dar clic en el icono para iniciar la descarga. 












 Una vez descargado se procede a instalar el software, solamente hay que seguir la secuencia de instalación dada por el asistente y listo. 

1. Iniciar la instalación.
 

2. Seleccionar idioma de instalador


3. Aceptar la licencia.










4. Seleccionar la instalación Full









5.Seleccionar la ruta de instalación.









 

Termina la instalación








Al finalizar, se elige el idioma en que estará ejecutándose el software, para nuestros fines, y para hacer todo un poco más sencillo, se puede escoger español de Latinoamérica. Pero dado que el mundo de la programación como veremos más tarde esta documentado en inglés y para fortuna o adquisición de oportunidades nuestra, deberíamos aprender a la par el lenguaje C como el idioma inglés y prestarle más atención al "English" que a C.  

Crear un proyecto en Dev C++

Ejecutamos Dev C y luego de eso damos clic en el menú archivo/nuevo/proyecto. 























Luego se abre un cuadro de dialogo, donde seleccionamos aplicación de terminal. 













Damos clic en Aceptar, y seleccionamos el directorio donde guardaremos nuestro proyecto, en  mi caso usaré el escritorio. 


Ahora tenemos nuestro primer código fuente muestra.



Este código ya puede ser compilado y los archivos binarios resultantes pueden ser ejecutados, aunque haremos algunos cambios para que sea un poco más intuitivo. Debemos guardar el archivo para así pasar a la compilación. 



Listo para comprobar que nuestro primer código funciona, solo hay que ir al icono de compilar y ejecutar (su atajo es presionar la tecla F11).



Y ahora tenemos el resultado final.



Como podemos ver en la pestaña de registro de compilación podemos ver cuales son los resultados del proceso y a la derecha la consola con nuestro primer programa corriendo. 

Felicidades, has iniciado en el mundo de la programación. 

Ahora viene un camino lleno de horas a prueba y error para mejorar nuestras habilidades. No prometo que será fácil pero intentaré enseñar las bases de la mejor manera que pueda y por que no, divirtiéndonos si es posible. 

Próximamente explicaré como hacer esto en Linux, un sistema operativo que recomiendo puedas comenzar a utilizar de no tener ni idea de que es, porque nuestro mundo hiperconectado esta cimentado sobre Linux. 

domingo, 4 de septiembre de 2022

Sistemas de numeración

Sistemas de numeración

    Recuerdan cuando eran niños (no sé si esto aun apliqué pero los que crecimos en los 90s e inicios de los 2000) llevábamos un abaco a la primaria Fig1. 

    Esto nos permitió comprender como funcionan los sistemas de numeración posicional de forma inconsciente, para nuestro caso especial el sistema de numeración decimal.

    Y ¿cómo funciona el ábaco? Pues en la varilla izquierda pones una cuenta y sabes que es la representación de las unidades. 

    La siguiente representa la decenas, la tercera la centenas y así sucesivamente.


Ese es el principio básico de cualquier sistema de numeración. Intentare explicarlo de una forma más general.

Primero tenemos un conjunto de símbolos que nos tendrán un valor intrínseco, estos serán lo números o dígitos. 0,1,2,3,4,5,6,7,8,9 (en el sistema decimal).
De izquierda a derecha tendrán un valor dependiendo de su posición.
 

B^n B^(n-1) ... B^3 B^2 B^1 B^0 B:Base del sistema, decimal para el ejemplo
10^n 10^(n-1) ... 10^3 10^2 10^1 10^0

Para tomar un ejemplo, tomamos el número 3785, este no es otra cosa que la suma de sus componentes:
3x10^{3} + 7x10^{2} + 8x10^{1}+5x10^{0}=3*1000+ 7*100 + 8*10 + 5*1= 3000+700+80+5=3785

El mismo concepto aplica para cualquier sistema de numeración. 

    En el mundo de la informática se utiliza el sistema binario de numeración para realizar operaciones es más práctico realizar operaciones de bits que codificar el sistema decimal desarrollando hardware que pueda soportarlo.

 Sistema de numeración binario.

    Dado que las computadoras utilizan transistores para realizar operaciones, la forma de codificar esto es utilizando el sistema binario de numeración.  

2^n 2^(n-1) ... 2^3 2^2 2^1 2^0
2^n 2^(n-1) ... 8 4 2 1     

Siguiendo las reglas de un sistema de numeración, al utilizar solo dos valores posibles, se necesitan solo 2 dígitos para representar cualquier valor. En este caso el 0 y 1.

Así que se puede realizar la conversión a decimal fácilmente siguiendo la siguiente tabla:

Binario Desarrollo de exponentes Sumatoria decimal Valor Decimal
0000 0x2³ + 0x2² + 0x2¹ + 0x2⁰ 0 + 0 + 0 +0 00
0001 0x2³ + 0x2² + 0x2¹ + 0x2⁰ 0 + 0 + 0 + 1 01
0010 0x2³ + 0x2² + 1x2¹ + 0x2⁰ 0 + 0 + 2 + 0 02
0011 0x2³ + 0x2² + 1x2¹ + 1x2⁰ 0 + 0 + 2 + 1 03
0100 0x2³ + 1x2² + 0x2¹ + 0x2⁰ 0 + 4 + 0 + 0 04
0101 0x2³ + 1x2² + 0x2¹ + 1x2⁰ 0 + 4 + 0 + 1 05
0110 0x2³ + 1x2² + 1x2¹ + 0x2⁰ 0 + 4 + 2 + 0 06
0111 0x2³ + 1x2² + 1x2¹ + 1x2⁰ 0 + 4 + 2 + 1 07
1000 1x2³ + 0x2² + 0x2¹ + 0x2⁰ 8 + 0 + 0 + 0 08
1001 1x2³ + 0x2² + 0x2¹ + 1x2⁰ 8 + 0 + 0 + 1 09
1010 1x2³ + 0x2² + 1x2¹ +0x2⁰ 8 + 0 + 2 + 0 10
1011 1x2³ + 0x2² + 1x2¹ + 1x2⁰ 8 + 0 + 2 + 1 11
1100 1x2³ + 1x2² + 0x2¹ + 0x2⁰ 8 + 4 + 0 + 0 12
1101 1x2³ + 1x2² + 0x2¹ + 1x2⁰ 8 + 4 + 0 + 1 13
1110 1x2³ + 1x2² + 1x2¹ + 0x2⁰ 8 + 4 + 2 + 0 14
1111 1x2³ + 1x2² + 1x2¹ + 1x2⁰ 8 + 4 + 2 + 1 15

Algo que seguramente se habrá notado es que aunque se necesitan más posiciones, el sistema es muy simple debido a que solamente dos dígitos son suficientes para representar el conjunto de los números enteros.

    Siguiendo las reglas de los sistemas de numeración es posible representar valores en cualquier base. Al trabajar con sistemas informáticos, debido a la manera en que utilizamos los semiconductores para el control de la corriente eléctrica (Tema que se verá posteriormente), lo más fácil es utilizar el sistema binario, que además es fácilmente codificable en sistema octal y hexadecimal. Cabe aclarar que el sistema octal actualmente es poco utilizado en aplicación, aunque comprenderlo facilita las cosas cuando estamos aprendiendo. 

Para esto vamos a definir algunos conceptos: 

Bit: Es la unidad mínima de información, en una computadora el espacio donde solo puede haber 0 ó 1.

Byte: Es la agrupación de 8 bits, en las arquitecturas de microprocesador más simple es el tamaño que tiene un registro (tener esto en cuenta para futuros temas).

Nibble:  La agrupación de 4 bits, también conocido como octeto o medio byte.

Sistema de numeración octal: Este sistema de numeración tiene de base el número 8, es decir del 0 al 7. 

Sistema de numeración hexadecimal: este sistema de numeración tiene como base el número 16, utilizando los dígitos decimales del 0 al 9 y completándolos con las letras A, B, C, D, E, F.

En la siguiente tabla se puede ver la equivalencia de algunos valores en estos sistemas.

   Binario 
    Octal      Hexadecimal    Valor Decimal 
0000 00 00 00
0001 01 01 01
0010 02 02 02
0011 03 03 03
0100 04 04 04
0101 05 05 05
0110 06 06 06
0111 07 07 07
1000 10 08 08
1001 11 09 09
1010 12 0A 10
1011 13 0B 11
1100 14 0C 12
1101 15 0D 13
1110 16 0E 14
1111 17 0F 15
00001 0000 20 10 16

Existe una correlación entre los sistemas binario, octal y hexadecimal, dado que la base 8 y 16 en su respectivo sistema es una potencia del número 2. 

Para convertir de binario a octal solo agrupamos los bits de derecha a izquierda de 3 en 3 y simplemente se acomodan las cifras. Ejemplos:

   Decimal 
    Binario      Agrupando     Octal 
28 11100 011,100 38
147 10010011 010,010,011 223
465 111010001 111,010,001 721

En el caso del hexadecimal, se aplica la misma regla, el único cambio es agrupar en 4 posiciones de izquierda a derecha (un nibble) los dígitos binarios. Algunos ejemplos en la siguiente tabla:

   Decimal 
    Binario      Agrupando    Hexadecimal 
19
10011
1,0011
17
219 11011011
1101,1011
DB
465 111010001 1,1101,0001
1D1

Por lo general, la arquitectura de los registros de los procesadores, microprocesadores ó microcontroladores es de 8 bits, 16 bits o 64 bits. Esto toma relevancia dado que el sistema hexadecimal se vuelve hasta una forma natural de realizar las operaciones en los distintos dispositivos. 

En lecciones posteriores se intentarán hacer proyectos en arquitecturas de 8 y 32 bits. 

 

<- 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...