Está en la página 1de 45

(Pegar figura referente al

evento)

Programación de Sistemas
Embebidos
Profesor: Msc. Ronald Solis M.
Objetivo General

•Aplicar los conocimientos de


programación en sistemas
embebidos para la construcción de
sistemas complejos.
Objetivos Específicos

• Utilizar lenguaje C para el desarrollo de


sistemas embebidos.
• Manejar las herramientas GNU para
programar sistemas embebidos mediante el
uso del lenguaje C
Temario

• Uso de lenguaje C en sistemas embebidos


• Compiladores, depuradores y ambientes de desarrollo para sistemas
embebidos
Lenguaje de programación C

Temario
Historia Lenguaje C

• Creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como


evolución del anterior lenguaje B, a su vez basado en BCPL.
• En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del
kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20,
fue reescrita en C. Éste fue uno de los primeros núcleos de sistema
operativo implementados en un lenguaje distinto al ensamblador.

Temario
Lenguaje C

• Es un lenguaje orientado a la implementación de Sistemas Operativos,


concretamente Unix, al igual que el lenguaje B
• Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias
unas pocas instrucciones en lenguaje máquina para traducir cada elemento
del lenguaje
Tipos de datos, declaración de variables,
constantes.

Temario
Tipos de datos en C
C ofrece tres tipos de datos básicos:

• Números enteros definidos con la palabra clave int

• Letras o caracteres definidos con la palabra clave char

• Números reales o en coma flotante definidos con las palabras claves float o double

Temario
Tipos de datos en C
La tabla muestra el rango de valores, que estos datos tienen en su forma básica.

TIPO Número de bits Rango


char 8 -128 a 127
unsigned char 8 0 a 255
signed char 8 -128 a 127
short 16 -32768 a 32767
int 16 -32768 a 32767
unsigned int 16 0 a 65535
signed int 16 -32768 a 32767
short int 16 -32768 a 32767
unsigned short int 16 0 a 65535
signed short int 16 -32768 a 32767
long int 32 -2147483648 a 2147483647
signed long int 32 -2147483648 a 2147483647
unsigned long int 32 0 a 4294967295
long 32 -2147483648 a 2147483647
unsigned long 32 0 a 4294967295
float 32 3.4E-38 a 3.4E+38
double 64 1.7E-308 a 1.7E+308
1.7E-308 a 1.7E+308 ó 3.4E-4932 a
long double 64 ó 80 (según versión).
1.1E+4932
Números Enteros
Se definen con “int” y admiten de forma opcional dos prefijos
modificadores:

“short” y “long”: Modifica el tamaño en bits del entero. Existen por


tanto tres tipos de enteros: “int”, “short int” (que se puede abreviar
como “short”), y “long int” (que se puede abreviar como “long”).

El lenguaje C no define tamaños fijos para sus tipos de datos básicos.


Lo único que garantiza es que un short int tiene un tamaño menor o
igual que un int y este a su vez un tamaño menor o igual a un long
int. Esta característica del lenguaje ha complicado la creación de
programas que sean compatibles entre varias plataformas.

“unsigned”: define un número natural (mayor o igual a cero).


Temario
Letras y cadenas
• Las variables de tipo letra se declaran como “char”. Para referirse a una letra se
rodea de comillas simples: 'M'. Como las letras se representan internamente como
números, el lenguaje C permite realizar operaciones aritméticas como 'M' + 25.

• Las cadenas de texto o strings son simplemente tablas de “char”. Las funciones de
biblioteca para manipular estas cadenas asumen que el último byte tiene valor
cero. Las cadenas de texto se escriben en el programa rodeadas de dobles comillas
y contienen el valor cero al final. A continuación se muestran dos definiciones:

Temario
Números Reales
• Los números reales se definen con “float” o “double”. La diferencia entre ambas es la
precisión que ofrece su representación interna. Hay un número infinito de reales, pero se
representan con un número finito de bits. A mayor número de bits, mayor número de reales
se representan, y por tanto, mayor precisión. Los reales definidos con “double” tienen un
tamaño doble a los definidos con “float”. Al igual que en el caso de los enteros, el tamaño
de estas representaciones varía de una plataforma a otra.

• Algunas plataformas ofrecen números reales con tamaño mayor al “double” que se definen
como “long double”. Los tamaños típicos para los tipos “float”, “double” y “long double”
son 4, 8 y 12 bytes respectivamente. A continuación se muestran varias definiciones de
números reales.

Temario
Cadenas de caracteres
Cadenas de caracteres (str) .
Las cadenas de caracteres son secuencias de caracteres encerradas entre comillas (" ") o apóstrofes
(' ') indistintamente.

'Hola Mundo'
"Vamos al McDonald's“

None.
El tipo None representa un valor "vació".

Temario
Operaciones Aritméticas, Operadores de
comparación y Lógicas
Operadores y Operaciones

• Un operador es un símbolo que denota una operación aritmética, lógica o de


otro tipo.
• Cada operación se desarrolla sobre uno o más operandos que pueden ser
variables o constantes.
• Además, cada operación se caracteriza por su prioridad y asociatividad.
Operaciones Aritméticas en C

Operaciones Aritméticas
Suma +
Resta -
Multiplicación *

División /
Incremento ++

Decremento --

Módulo %
Operadores de Comparación
Operadores de comparación

Mayor que >

Menor que <

Menor o igual que <=

Mayor o igual que >=

Igual que ==

Distinto que !=
Operadores Lógicos en C

Operadores lógicos

And &&

Or ||

Not !
Sentencia “if”

• Operador Condicional if:


if (expresión) operación;

Si el resultado de expresión es ≠ de cero (verdadera) entonces se ejecuta


operación, pero si el resultado de expresión es = a cero (falso) entonces no
se ejecuta operación.
Sentencia “if-else”

• Operador Condicional if - else:


if (expresión) operación1 else operacion2;

Si el resultado de expresion es ≠ de cero (verdadera) se ejecuta operación1,


pero si el resultado de expresión es = a cero (falso) entonces se ejecuta
operación2.
Sentencia “if-else”

Si operación1 u operación2 es compuesta, es decir consta de varias sentencias,


éstas deben encerrarse entre llaves { }.

if(expression) {
... //
... // operation1
...}//
else {
operation2
}
Sentencia “if e if-else”
A veces hay más de dos posibilidades y necesitamos más de dos ramas. Una forma de
expresar tal cómputo es una condicional encadenada.

Si operación1, operación2 es compuesta u operación3, es decir consta de varias sentencias,


éstas deben encerrarse entre llaves { }.

if(expression) {
... //
... // operation1
...}//
else if(expression) {
operation3
}
else {
operation2
}
Sentencia “switch”

La operación switch funciona de la manera siguiente:


• Primero se jecuta selector y luego se compara con constant1, si es igual
entonces ejecuta el grupo de sentencias de ese bloque hasta encontrar
break o el fin de switch. Si no es igual, entonces selector se compara con
contant2, si son iguales se ejecuta el grupo de sentencias de ese bloque
hasta encontrar break o fin de switch y asi sucesivamente.
• Si selector no compara con ninguna constante, entonces se ejecuta el
grupo de sentencias después del operador default.
Sentencia “switch”
A diferencia de la sentencia If – else que hace la selección entre dos opciones, el operador switch nos permite
escoger entre varias operaciones. La sintaxis de la sentencia switch es:
switch (selector) // Selector is of char or int type
{
case constant1:
operation1 // Group of operators are executed if
... // selector and constant1 are equal
break;
case constant2:
operation2 // Group of operators are executed if
... // selector and constant2 are equal
break;
default:
expected_operation // Group of operators are executed if no
... // constant is equal to selector
break;
}
Bucle “while”

Las sentencias se ejecutan repetidamente hasta que expresión se haga falsa.


Si se entra a lazo while con expresion falsa el lazo (grupo de sentencias) no
será ejecutado.
Si expresion permanece siempre verdadera estamos frente a un lazo infinito.
Ver ejemplo en siguiente transparencia.
Bucle “while”

while(expression){
sentencias
...
}
Bucle infinito

while(1){
... // Este grupo de sentencias se ejecuta
... // permanentemente.
}
Bucle “for”

Initial_expresion setea el valor inicial de la variable del lazo, que luego se


compara con condition_expression antes de entrar al lazo. Las
operaciones dentro del lazo se ejecutan repetidamente, después de cada
ejecución del grupo de sentencias el valor de la expresión se cambia.
Esto se repite hasta que condition_expression evalúe a falsa.
for(initial_expression; condition_expression; change_expression)

{
operaciones
...
}
Bucle “for”

for(k=1; k<5; k++) // Incrementar 5 veces variable k (de 1 a 5) y


{ operaciones // repetir cada vez

….
}
Sale del lazo con K=5.
Bucle “do-while”
do
{
operaciones
……
}
while (condición_salida);

Las operaciones se repiten indefinidamente hasta que condición_salida sea falsa.


Las operaciones se ejecutan al menos una vez ya que la condición_salida se verifica al final
del lazo.
Bucle “do-while”

Ejemplo:

a = 0; // Setea valor inicial


do
a = a+1; // Operacion
while (a <= 1E06H); // verifica condicion de salida
Herramientas GNU

• GNU es un sistema operativo de tipo Unix, lo cual significa que se trata de


una colección de muchos programas: aplicaciones, bibliotecas,
herramientas de desarrollo y hasta juegos.
Algunas herramientas GNU online

• https://www.onlinegdb.com/
online_c_compiler • https://dcoder.tech/index.html

https://repl.it/~
Ejemplos de códigos en C

• https://repl.it/join/sagrueyc-rdsolis2020
Librerías en lenguaje C
Librerías en lenguaje C

Temario
Librerías en lenguaje C

Temario
Stdio.H
• Significa "standard input-output header" (cabecera estándar E/S), es el
archivo de cabecera que contiene las definiciones de las macros, las
constantes, las declaraciones de funciones de la biblioteca estándar del
lenguaje de programación C para hacer operaciones, estándar, de entrada y
salida, así como la definición de tipos necesarias para dichas operaciones.
• Ejemplo:
printf: usado para imprimir salidas de datos.
scanf: utilizado para introducir entradas.
puts: imprime una cadena de caracteres.
getc: devuelve un carácter desde un fichero.
ferror: comprueba el indicador de errores.
Math.h
• Es un archivo de cabecera de la biblioteca estándar del lenguaje de
programación C diseñado para operaciones matemáticas básicas. Muchas
de sus funciones incluyen el uso de números en coma flotante
• Ejemplo:
acos: arcocoseno.
asin: arcoseno.
atan: arcotangente
Floor: menor entero no menor que el parámetro.
Cosh: coseno hiperbólico.
Log: logaritmo natural.
Pow(x,y): eleva un valor dado a un exponente. x^y
String.h
• Es un archivo de la Biblioteca estándar del lenguaje de programación C que
contiene la definición de macros, constantes, funciones y tipos y algunas
operaciones de manipulación de memoria.
• Ejemplo:
null: macro que representa la constante puntero nulo.
strcpy: copia una cadena en otra.
strcat: añade una cadena al final de otra.
strrev: invierte una cadena.
strstr: busca una cadena dentro de otra.
Stdlib.h
• (std-lib: standard library o biblioteca estándar) es el archivo de cabecera de
la biblioteca estándar de propósito general del lenguaje de programación C.
Contiene los prototipos de funciones de C para gestión de memoria
dinámica, control de procesos y otras.
• Ejemplo:
atof: ascii to float, cadena de caracteres a coma flotante.
rand: genera un número pseudo-aleatorio.
free: liberan memoria devolviéndola al heap.
system: ejecutar un comando externo.
exit: terminar ejecución del programa.
Ejemplos de programación en C en sistemas
embebidos
Arduino Uno
PIC 16F628A
ZEDBOARD Raspberry Pi
Referencias
• https://informatica.uv.es/estguia/ATD/apuntes/laboratorio/Lenguaje-C.pdf
• https://www.ecured.cu/Historia_del_Lenguaje_C#:~:text=Historia%20del%20Leng
uaje%20C%20.,de%20Sistemas%20Operativos%2C%20concretamente%20Unix.
• https://www.ictea.com/cs/index.php?rp=%2Fknowledgebase%2F8834%2FiQue-
es-el-lenguaje-de-programacion-C.html
• https://www.gnu.org/home.es.html#:~:text=GNU%20es%20un%20sistema%20op
erativo%20de%20tipo%20Unix%2C%20lo%20cual,se%20conoce%20como%20Pr
oyecto%20GNU.&text=El%20nombre%20%C2%ABGNU%C2%BB%20es%20un,%
C2%ABGNU%20No%20es%20Unix%C2%BB.
• https://es.slideshare.net/CristianMaza2/librerias-bsicas-y-sus-funciones-lenguaje-
de-programacin-c?qid=f3ba74cc-a8f7-4c99-bb0a-
6a19b4d5b893&v=&b=&from_search=1

También podría gustarte