Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programacin de sistemas
embebidos en lenguaje C
Introduccin al lenguaje C
Agenda
Historia del Lenguaje C
Fundamentos de C
Tipos de datos
Variables, Constantes y Arrays
Palabras claves
Funciones (Revisin)
Declaraciones
printf() Librarias de uso especial
101 ECP
Slide 2
Agenda
Operadores y Sentencias Condicionales
Sentencias y Expresiones
Sentencias de Control
Funciones
Estructura de un programa
Arrays y Strings
Punteros y Strings
Estructuras y Uniones
Caractersticas adicionales de C
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 3
Section 1
Usando C en un Ambiente
Embebido
101 ECP
Slide 5
101 ECP
Slide 6
C Source Files
Compiler
Driver
Program
Assembler
Object
Files
Archiver
(Librarian)
Linker
(.lib or .a)
Executable
Memory Map
MPLAB IDE
Debug Tool
Linker Script
COFF
Debug File
(.lkr or .gld)
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 7
C Compiler
Archivo Fuente C
.c
Preprocessor
.h
Archivo Header C
Compiler
.s
101 ECP
Slide 8
Entorno Runtime C
Compilador C setea un runtime
Localiza el Espacio para el Stack
Inicializa el stack pointer
Localiza el Espacio para apilar datos
Copia valores desde Flash/ROM para variables
en RAM que se declaren con valores iniciales
Limpia la RAM sin inicializar
Desabilita todas las interrupciones
Llama a la Funcin main() (donde comienza
su cdigo)
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 9
C Runtime Environment
El ambiente del Setup Runtime es
automticamente linkeado dentro de la
aplicacion por la mayoria de
compiladores PIC
Usualmente por cualquiera de estas
formas:
crt0.s / crt0.o (crt = C RunTime)
startup.asm / startup.o
101 ECP
Slide 10
Fundamentos de C
Un programa C simple
Example
Directivas del
Preprocesador
Archivo Header
#include <stdio.h>
#define PI 3.14159
int main(void)
{
float radius, area;
Declaracin de Constantes
(Text Substitution Macro)
Declaracin de variables
Funcion
Comentario
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 11
Seccion 2
Comentarios
Comentario
Definition
/*
Este es un comentario */
Comentario de Bloque simple
//
101 ECP
Slide 13
Comentarios
Las mejores Prcticas
/********************************************************
* Program: hello.c
* Author: R. Ostapiuk
********************************************************/
#include <stdio.h>
/********************************************************
* Function: main()
********************************************************/
int main(void)
{
/*
int i;
// Loop count variable
char *p;
// Pointer to text string
*/
printf(Hello, world!\n); // Display Hello, world!
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 14
Seccion 3
Variables, Identificadores, y
Tipos de datos
#include <stdio.h>
#define PI 3.14159
Tipo de
datos
int main(void)
{
float radio, area;
Declaracin de Variable
Variables
en uso
101 ECP
Slide 16
Variables
Definition
int myVariable;
myVariable = 5;
101 ECP
myVari
able
Slide 17
Variables
Variables son nombres
para almacenar en
localizaciones de
memoria
int warp_factor;
15
4116
char first_letter;
float length;
5.74532370373175
10-44
101 ECP
Slide 18
Variables
La Declaracin de
variables consiste de
un nico identificador
(nombre)
15
int warp_factor;
4116
char first_letter;
float length;
5.74532370373175
10-44
101 ECP
Slide 19
Variables
y un tipo de dato
Determina Tamao
Determina como son
interpretados los valores
int warp_factor;
15
4116
char first_letter;
float length;
5.74532370373175
10-44
101 ECP
Slide 20
Identificadores
Proporcionan Nombres a elementos del
programa:
Variables, Funciones, Arrays, Otros elementos
Ejemplos de identificadores en un programa
#include <stdio.h>
#define PI 3.14159
int main(void)
{
float radius, area;
//Calculate area of circle
radius = 12.0;
area = PI * radius * radius;
printf("Area = %f", area);
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 21
Identificadores
Caracteres vlidos en identificadores:
Identifier
Primer Caracter
_ (entre apstrofes)
A to Z
a to z
Resto de Caracteres
_ (entre apstrofes
A to Z
a to z
0 to 9
Caso sensible!
Solo los primeros 31 caracteres son
validos*
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 22
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
101 ECP
Slide 23
Tipos de Datos
Tipos fundamentales
Type
char
int
float
double
Description
Bits
Caracter simple
8
16
32
64
entero
Nmero de punto flotante simple presicin
Nmero de punto flotante doble presicin
101 ECP
Slide 24
Min
unsigned char
0
char, signed char
-128
unsigned short int
0
short int, signed short int -32768
unsigned int
0
int, signed int
-32768
unsigned long int
0
long int, signed long int
-231
unsigned long long int
0
long long int,
-263
signed long long int
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Max
Bits
255
127
65535
32767
16
16
65535
16
32767
232-1
16
32
231-1
264-1
32
64
263-1
64
Slide 25
Absolute Min
Absolute Max
Bits
float
~10-44.85
~1038.53
32
double (1)
~10-44.85
~1038.53
32
long double
~10-323.3
~10308.3
64
MPLAB-C30:
101 ECP
Slide 26
Variables
Como declarar una variable
Syntax
int x, y, z;
float warpFactor;
char text_buffer[10];
unsigned index;
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 27
Variables
Como declarar una Variable
Variables pueden ser declaradas en las siguientes formas:
Syntax
type identifier;
Una declaracin sobre una linea con un valor inicial
101 ECP
Slide 28
Variables
Como declarar una variable
Examples
unsigned int x;
unsigned y = 12;
int a, b, c;
long int myVar = 0x12345678;
long z;
char first = 'a', second, third = 'c';
float big_number = 6.02e+23;
101 ECP
Slide 29
Variables
Como declarar variables
MyProgram.c
101 ECP
Slide 30
Directiva #include
Tres formas usan esta directiva #include:
Syntax
#include <file.h>
#include file.h
#include c:\MyProject\file.h
101 ECP
Slide 31
Directiva #include
archivo HEADER main.h y achivo FUENTE main.c
main.h
unsigned
unsigned
unsigned
main.c
int
int
int
a;
b;
c;
#include "main.h"
int main(void)
{
a = 5;
b = 2;
c = a+b;
}
101 ECP
Slide 32
Directiva #include
Archivo main.c Equivalente
Antes que el
preprocesador
funcione debe definir
las variables del
archivo main.c sino
usa un archivo header
previo donde defina
las variables usadas.
main.c
unsigned
unsigned
unsigned
int
int
int
a;
b;
c;
int main(void)
{
a = 5;
b = 2;
c = a+b;
}
Archivo equivalente
main.c sin #include
101 ECP
Slide 33
Lab 01
Variables y tipos de datos
On the CD
\ARG_C\Lab01\Lab01.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 34
Seccion 4
Constantes Literales
Constantes Literales
Definition
Literales
Son valorados como "hard coded"
Pueden ser numeros, caracteres o strings
Pueden ser representados en un nmero de formatos
(decimal, hexadecimal, binario, caracter, etc.)
Siempre representa el mismo valor (5 siempre
representa la cantidad cinco)
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 36
101 ECP
Slide 37
Constantes literales
Cuatro tipos bsicos de literales:
Entero
Punto Flotante
Caracter
String
101 ECP
Slide 38
Literales Enteros
Decimal (Base 10)
127
-1021
65535
32,767
25.0
1 024
101 ECP
0552
Slide 39
Literales Enteros
Hexadecimal (Base 16)
0x 0x1
0x0A2B
0xBEEF
0x5.3
0EA12
101 ECP
0xEG
53h
Slide 40
Literales Enteros
Octal (Base 8)
0o12
080
101 ECP
53o
Slide 41
Literales Enteros
Binario (Base 2)
0b
0b1
0b0101001100001111
0b1.0
01100
0b12
10b
101 ECP
Slide 42
101 ECP
Slide 43
Caracteres Literales
Specificados con apstrofes simples (')
Pueden incluir cualquier caracter imprimible
Puede incluir cualquier caracter no-imprimible
usando secuencia de escape (e.g. '\0' = NULL)
Caracteres Vlidos: 'a', 'T', '\n', '5', '@', '
' (espacio)
Caracteres Invlidos: 'me', '23', '''
101 ECP
Slide 44
String Literales
Especificado con doble comillas (")
Puede incluir cualquier caracter
imprimible o no-imprimible (usando
secuencias escape)
Usualmente terminan en caracter nulo \0
String Vlido: "Microchip", "Hi\n",
"PIC", "2500","rob@microchip.com",
"He said, \"Hi\""
String Invlido: "He said, "Hi""
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 45
String Literales
Declaracin
101 ECP
Slide 46
String Literales
Como incluir caracteres especiales en el Strings
Escape Sequence
\a
\b
\t
\n
\v
\f
\r
\"
\'
\?
\\
\0
ASCII Value
Character
BELL (alert)
Backspace
Horizontal Tab
Newline (Line Feed)
Vertical Tab
Form Feed
Carriage Return
Quotation Mark (")
Apostrophe/Single Quote (')
Question Mark (?)
Backslash (\)
Null
101 ECP
7
8
9
10
11
12
13
34
39
63
92
0
Slide 47
String Literales
Como incluir caracteres especiales en Strings
Example
101 ECP
Slide 48
Seccion 5
Constantes Simblicas
Constantes Simblicas
Definition
Constants
Cuando se asigna, el valor de este nunca
cambia
Elimina el uso de nmeros mgicos
Existen dos Tipos de constantes
Etiquetas que sustituyen texto
Variables constantes (!!??)
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 50
Constantes Simblicas
Constantes Variables Usando const
101 ECP
Slide 51
Constantes Simblicas
Texto sustituido por etiquetas Usando #define
Define una etiqueta para sustituir un texto
Syntax
#define
#define
#define
#define
PI 3.14159
mol 6.02E23
MCU "PIC24FJ128GA010"
COEF 2 * PI
101 ECP
Slide 52
Lab 02
Constantes Simblicas
Sobre el CD
\ARG_C\Lab02\Lab02.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 53
Seccion 6
Funcin printf()
printf()
101 ECP
Slide 55
printf()
Funcin de la Librera Standard
Syntax
printf(ControlString, arg1,argn);
Imprime todo palabra por palabra dentro del string excepto %d's los
cuales son reemplazados por los valores de los argumentos del
listado
Example
int a = 5, b = 10;
printf("a = %d\nb = %d\n", a, b);
Result:
a=5
b = 10
2007 Microchip Technology Incorporated. All Rights Reserved.
Slide 56
printf()
%c
%s
%d
%o
%u
%x
%X
%f
%e
%E
%g
%G
Significado
Caracter simple
String (todo los caracteres hasta '\0')
Entero sin signo
Entero octal sin signo
Entero decimal sin signo
Entero decimal sin signo con digitos minuscula(1a5e)
como x, pero con dgitos mayusula (e.g. 1A5E)
Valor decimal con signo(floating point)
Valor decimal con exponente(e.g. 1.26e-5)
como e, pero usando E para el exponente (e.g. 1.26E-5)
como e o f, pero dependiendo del tamao y precision del valor
101 ECP
Slide 57
printf()
Gotchas
101 ECP
Slide 58
Lab 03
Funcin de librera
printf()
On the CD
\ARG_C\Lab03\Lab03.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 59
Seccin 7
Operadores
Operadores
Como hacer expresiones aritmticas
Definicion
101 ECP
Slide 61
Operadores
Aritmticos
Operador
*
/
%
+
+ (unary)
- (unary)
Operacin
ejemplo
resultado
Multiplicacin
Adicin
Sustraccin
x * y
x / y
x % y
x + y
x - y
Positivo
Negativo
+x
-x
Producto de x e y
Relacin de x e y
Resto de x dividido por y
Suma de x e y
Diferencia de x e y
Valor de x
Valor negativo de x
Division
Modulo
101 ECP
Slide 62
Operadores
Operador de divisin
int a = 10;
int b = 4;
float c;
c = a / b;
cc==2.2.0000000
00000
int a = 10;
float b = 4.0f;
float c;
c = a / b;
cc==2.2.5500000
00000
101 ECP
Slide 63
Operadores
Tipo conversin implcita
int x = 10;
float y = 2.0, z;
z = x * y;
// x promoted to float
101 ECP
Slide 64
Operadores
Operaciones aritmticas implcitas Tipo conversin
-x
x * -2L
x es promovida a int
x es promovida a long
porque -2L es un long
x es promovido a int
x es promovido a int
8/x
8%x
8.0/x
x es promovido a double
porque 8.0 es un double
101 ECP
Expresiones
resultado
int
long
5
10
int
int
double
-1
3
-1.6
Slide 65
Operadores
Aplicacin del operador de Mdulos (%)
Truncar: x % 2n donde n es el ancho de la palabra
deseada (e.g. 8 for 8 bits: x % 256)
Retorna el valor de la parte mas baja n-bits de x
Puede ser usado para forzar aparte un numero en
cualquier base dentro de estos dgitos individuales
Example
#define MAX_DIGITS 6
long number = 123456;
int i, radix = 10; char digits[MAX_DIGITS];
for (i = 0; i < MAX_DIGITS; i++)
{
if (number == 0) break;
digits[i] = (char)(number % radix);
number /= radix;
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 66
Operadores
Como declarar sentencias de cdigo
Definition
101 ECP
Slide 67
Operadores
Asignacin
Operado
r
=
+=
-=
*=
/=
%=
&=
^=
|=
Operacion
Ejemplo
Resultado
Asiganacin
x = y
x += y
x -= y
x *= y
x /= y
Compuesta
Asignacin
x %= y
x &= y
x ^= y
x |= y
Asigna x al valor de y
x = x + y
x = x - y
x = x * y
x = x / y
x = x % y
x = x & y
x = x ^ y
x = x | y
x = x << y
x = x >> y
<<=
>>=
2007 Microchip Technology Incorporated. All Rights Reserved.
x <<= y
x >>= y
101 ECP
Slide 68
Operadores
Asignacin compuesta
x = x + y;
Esta operacin se puede entender como: El nuevo valor de
x ser igual al valor actual de x ms el valor de y
x += y;
101 ECP
Slide 69
Operadores
Relacin
Operador Operacin
Ejemplo
<
Menor que
x < y
<=
Menor que o
igual a
x <= y
>
Mayor que
x > y
>=
Mayor que o
igual a
x >= y
==
Igual a
x == y
1 si x igual a y, sino 0
!=
No igual a
x != y
1 si x no igual a y, sino 0
101 ECP
Slide 70
Operadores
Diferencia entre = y ==
if (x == 5)
{
haga si el valor de x es 5
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 71
Operadores
Logicos
Operado
r
&&
Operacion
Ejemplo
Logica AND
x && y
1 Si ambos x 0 y y 0,
sino 0
||
Logica OR
x || y
0 Si ambos x = 0 e y = 0,
sino 1
Logica NOT
!x
1 if x = 0, sino 0
101 ECP
Slide 72
Operadores
Bitwise
Operator
Operation
Example
&
Bitwise AND
x & y
Bitwise OR
x | y
1, if 1 in both x and y
0, if 0 in x or y or both
1, if 1 in x or y or both
0, if 0 in both x and y
Bitwise XOR
x ^ y
Bitwise NOT
(Complemento a uno)
~x
101 ECP
Slide 73
Operadores
Diferencias entre & y &&
if (x && y)
{
Si x y y son TRUE (no-cero)
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 74
Operadores
Difference Between & and &&
char x = 0b1010;
char y = 0b0101;
if (x & y) printf("Hi!");
Ejemplo 2 Usando un operador logico AND
Operator
char x =
char y =
if (x &&
0b1010;
0b0101;
y) printf("Hi!");
101 ECP
Slide 75
Operadores
Evaluacin de Operadores lgicos y Circuitos
Cortos
expr1
0
0
1
1
expr2
X (0)
X (1)
0
1
101 ECP
Result
0
0
0
1
expr2 no se evala en
Operadores
Desplazamiento
Operator
Operation
Example
Result
x << y
x = 5;
y = x << 2;
// x = 0b00000101 = 5
// y = 0b00010100 = 20
101 ECP
Slide 77
Operadores
Desplazamientos Casos Especiales
x = 250;
y = x >> 2;
// x = 0b11111010 = 250
// y = 0b00111110 = 62
x = -6;
y = x >> 2;
2007 Microchip Technology Incorporated. All Rights Reserved.
// x = 0b11111010 = -6
// y = 0b11111110 = -2
101 ECP
Slide 78
Operadores
Potencia de 2 Divididos vs. Desplazamiento derecho
y = x >> n
y = x / 2n
0 0 0 0 1 0 1 0
>>
0 0 0 0 0 1 0 1
Right Shift
1010
510
Trabajos con enteros o puntos flotantes
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 79
Operadores
Enteros divididos en potencias de 2 vs.
Desplazamientos en MPLAB C30
Example: Divide by 2
int
int
y =
10:
00288
0028A
0028C
0028E
00290
x = 20;
y;
x / 2;
804000
200022
090011
D80002
884010
int
int
y =
yy==10
10
y = x / 2;
mov.w 0x0800,0x0000
mov.w #0x2,0x0004
repeat #17
div.sw 0x0000,0x0004
mov.w 0x0000,0x0802
9:
00282
00284
00286
101 ECP
x = 20;
y;
x >> 1;
804000
DE8042
884010
yy==10
10
y = x >> 1;
mov.w 0x0800,0x0000
asr 0x0000,#1,0x0000
mov.w 0x0000,0x0802
Slide 80
Operadores
El Operador Condicional
Sintaxis
int x = 5;
(x % 2 != 0) ?
printf("%d es impar\n", x) :
printf("%d es par\n", x);
Resultado:
55 es
es impar
impar
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 81
Operadores
El operador condicional
El operador condicional puede ser usado para
condicionar asignar un valor a una variable
Ejemplo 1 (el mas usado comunmente)
x = (condicion) ? a : b;
Ejemplo 2 (el menos usado)
101 ECP
Slide 82
Operadores
Los Operadores explcitos de formato
Anteriormente, sacamos un literal para mecanografiar el
float entrndolo en como: 4.0f
Podemos cambiar la variable en lugar de otro usando al
operador del :
(type)variable
int x = 10;
float y;
int x = 10;
float y;
y = x / 4;
y = (float)x / 4;
yy==2.2.0000000
00000
Porque:
Porque:int
int/ /int
int
int
int
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 83
Lab 04
Operadores
Sobre el CD
\ARG_C\Lab04\Lab04.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 84
Seccin 8
Tomar Decisiones
Delcaracin if
Syntax
Declaracin if (expresin)
expresin es evaluada para declaraciones TRUE (0) o
FALSE (=0)
Si TRUE, entonces declaracin es ejecutada
Note
Siempre que usted vea statement
en una gua de sintaxis, puede ser
substituido por una declaracin
compuesta (del bloque). Recuerde: los
espacios y las nuevas lneas no son
significativos.
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
if (expression)
{
statement1
statement2
}
Slide 86
Declaracin if
Diagrama de Flujo
Syntax
if (expression) statement
expression 0
TRUE
FALSE
expression = 0
101 ECP
Slide 87
Declaracin if
Example
int x = 5;
Si x es TRUE (no-cero)
if (x)
{
printf("x = %d\n", x); entonces imprime el valor de x.
}
while (1);
Si x = -82?
Si x = 65536?
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 88
Declaracin if
Testeando para TRUE
if (x) vs. if (x == 1)
if (x) necesita solamente testear para no igual a 0
if (x == 1) necesita probar para la igualdad con 1
Recuerde: TRUE es definido como no-cero, FALSE es
definido como cero
Ejemplo: if (x)
Ejemplo: if (x ==1)
if (x)
8:
011B4
011B6
E208C2
320004
if (x == 1)
11:
011C0
011C2
011C4
if (x)
cp0.w 0x08c2
bra z, 0x0011c0
101 ECP
804610
500FE1
3A0004
if (x == 1)
mov.w 0x08c2,0x0000
sub.w 0x0000,#1,[0x001e]
bra nz, 0x0011ce
Slide 89
Anidando Declaraciones if
Example
101 ECP
Slide 90
Declaracin if-else
Syntax
if (expression) sentencia1
else entencia2
expression es evaluada por TRUE (0) o
FALSE (=0)
Si TRUE, entonces sentencia1 es ejecutada
Si FALSE, entonces sentencia2 es ejecutada
101 ECP
Slide 91
Declaracin if-else
Diagrama de flujo
Sintaxis
if (expression) statement1
else statement2
expresion 0
TRUE
FALSE
expresion = 0
101 ECP
Slide 92
Declaracin if-else
Example
{
float frequency = 146.52;
//frequency in MHz
101 ECP
Slide 93
if-else if Sentencia
Syntax
if (expression1) sentencia1
else if (expression2) sentencia2
else sentencia3
101 ECP
Slide 94
if-else if Sentencia
Diagrama de Flujo
Syntax
if (expresion1) sentencia1
else if (expresion2) sentencia2
else sentencia3
TRUE
FALSE
TRUE
FALSE
101 ECP
Slide 95
if-else if Sentencia
Example
101 ECP
Slide 96
Lab 05
Making Decisions (if)
On the CD
\101_ECP\Lab05\Lab05.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 97
Sentencias switch
Sintaxis
switch (expresion)
{
case const-expr1: sentencia1
101 ECP
Slide 98
Sentencia switch
Diagrama de flujo (default)
YES
NO
YES
Este es el
comportamiento
por defecto de la
sentencia switch
NO
YES
NO
101 ECP
Slide 99
Sentencia switch
YES
Adicionando una
sentencia break a
cada bloque de
sentencias permite
eliminar fracasos,
permitiendo
solamente un caso
de bloque de
clausulas de la
sentencias que se
ejecutar
NO
YES
NO
YES
NO
101 ECP
Slide 100
Sentencia switch
switch Ejemplo 1
switch(channel)
{
case 2: printf("WBBM Chicago\n"); break;
case 3: printf("DVD Player\n"); break;
case 4: printf("WTMJ Milwaukee\n"); break;
case 5: printf("WMAQ Chicago\n"); break;
case 6: printf("WITI Milwaukee\n"); break;
case 7: printf("WLS Chicago\n"); break;
case 9: printf("WGN Chicago\n"); break;
case 10: printf("WMVS Milwaukee\n"); break;
case 11: printf("WTTW Chicago\n"); break;
case 12: printf("WISN Milwaukee\n"); break;
default: printf("No Signal Available\n");
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 101
Sentencia switch
switch Ejemplo 2
switch(letter)
{
case 'a':
printf("Letter 'a' found.\n");
break;
case 'b':
printf("Letter 'b' found.\n");
break;
case 'c':
printf("Letter 'c' found.\n");
break;
default:
printf("Letter not in list.\n");
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 102
Sentencia switch
switch Ejemplo 3
switch(channel)
Apply this case to channel 4, 5,
{
6, and 7
case 4 ... 7:
printf("VHF Station\n"); break;
case 9 ... 12:
printf("VHF Station\n"); break;
case 3:
Case 3 and 8 are allowed to fall
case 8:
through to case 13
case 13:
printf("Weak Signal\n"); break;
case 14 ... 69:
printf("UHF Station\n"); break;
default:
printf("No Signal Available\n");
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 103
Lab 06
Tomando Decisiones
(switch)
Sobre el CD
\ARG_C\Lab06\Lab06.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 104
Seccin 9
Loops
Lazos for
Syntax
101 ECP
Slide 106
Lazos for
Diagrama de Flujo
Syntax
i = 0
Modifica la variable
del loop
i++
TRUE
i < n
FALSE
101 ECP
Slide 107
Lazos for
Example (Code Fragment)
int i;
for (i = 0; i < 5; i++)
{
printf("Loop iteration #%d\n", i);
}
Expected Output:
Loop
Loop iteration
iteration 00
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 108
Lazos for
Lo que sea deen las tres expresiones puede ser
blanquedo (los puntos y comas deben
permanecer)
Si expresion1 o expresion3 fallan , sus
acciones simplemente desaparecen
If expression2 falla, esta siempre se asume
como true
Note
Loops infinitos
for
(( ;; ;; ))
for
Un
loop
for
sin
cualquier
expresin {{
permite la ejecucin
Slide 109
Lazo while
Syntax
101 ECP
Slide 110
Lazos While
Diagrama de flujo
Syntax
TRUE
FALSE
101 ECP
Slide 111
Lazos While
Ejemplo
Ejemplo
int i = 0;
while (i < 5)
{
printf("Loop iteration #%d\n", i++);
}
Salida esperada:
Loop
Loop iteration
iteration 00
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 112
Lazos While
La expresion siempre debe estar all, es la
diferencia con un loop for
while se usa mas a menudo que for cuando se
implementan loops infinitos, aunque es
solamente una cuestin de gusto personal
Frecuentemente usada para un loop min en el
programa
Nota
Infinitos Loops
Un
loop
while
con
expression = 1 se ejecuta
indefinidamente (se ouede
abandonar
el
loop
via
sentenciabreak )
2007 Microchip Technology Incorporated. All Rights Reserved.
while
while ((11))
{{
}}
101 ECP
Slide 113
Loop do-while
Syntax
101 ECP
Slide 114
Loop do-while
Diagrama de flujo
Syntax
TRUE
FALSE
101 ECP
Slide 115
int i = 0;
Inicializa el contador
del loop fuera del loop
do
{
Loop
Loop iteration
iteration 00
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 116
Sentencia break
Syntax
break;
101 ECP
Slide 117
Sentencia break
break;
TRUE
FALSE
101 ECP
Slide 118
Sentencia break
Ejemplo
Ejemplo
int i = 0;
while (i < 10)
Existe en el loop si i = 5.
{
Iteraciones 6-9 no son ejecutadas.
i++;
if (i == 5) break;
printf("Loop iteration #%d\n", i);
}
Salida esperada:
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
101 ECP
Slide 119
Sentencia continue
Syntax
continue;
101 ECP
Slide 120
Sentencia continue
Diagrama de flujo con un loop while
Syntax
continue;
TRUE
FALSE
101 ECP
Slide 121
Sentencia continue
Ejemplo
Ejemplo
int i = 0;
while (i < 6)
Salta la iteracin remanente
cuando
{
i = 2. La iteracin 2 puede no
i++;
ejecutarse.
if (i == 2) continue;
printf("Loop iteration #%d\n", i);
}
Resultado esperado:
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
Loop
Loop iteration
iteration 55
2007 Microchip Technology Incorporated. All Rights Reserved.
Iteracin 2 No es ejecutada
101 ECP
Slide 122
Lab 07
Loops
Sobre el CD
\ARG_C\Lab07\Lab07.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 123
Seccin 10
Funciones
Funciones
Estructura un programa
main()
{
...
eat();
...
drink();
...
}
eat()
{
...
return;
}
drink()
{
...
be_merry();
return;
}
101 ECP
be_merry()
{
...
return;
}
Slide 125
Funciones
Qu es una funcin?
Definition
101 ECP
Slide 126
Funciones
Recuerda las clases de Algebra?
f(x) = x2 + 4x +3
Parmetro de la funcin
101 ECP
Slide 127
Funciones
Definiciones
Sintaxis
Parametro listado
(opcional)
Nombre
101 ECP
Slide 128
Funciones
Definicin de Funciones: Ejemplos de Errores de
Sintaxis
Ejemplo
z = (x >= y) ? x : y;
return z;
int maximum(int
{
return ((x >=
}
2007 Microchip Technology Incorporated. All Rights Reserved.
x, int y)
y) ? x : y);
101 ECP
Slide 129
Funciones
Definiciones de funciones: Retorna tipo de datos
sintaxis
101 ECP
Slide 130
Funciones
Definicin de Funciones: Tipo de datos retornado
101 ECP
Slide 131
Funciones
Definicin de Funciones: Tipo de datos retornado
El tipo de funcin es void si:
La sentencia return no tiene expression
La sentencia return no esta presente en todas
Esto a veces llama a una funcin de procedimiento
puesto que no se devuelve nada
Example
101 ECP
Slide 132
Funciones
Definicin de Funciones: Parmetros
101 ECP
Slide 133
Funciones
Definicin de funciones: Parmetros
int maximum(int
{
return ((x >=
}
x, int y)
y) ? x : y);
101 ECP
Slide 134
Funciones
Definicin de funciones: Parmetros
Ejemplo
type identifier(void)
{
declarations
statements
return expression;
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 135
Funciones
Como llamar o invocar una Funcion
Function Call Syntax
101 ECP
Slide 136
Funciones
Funcion Prototipos
Justificada como variables, una funcin debe ser
declarada antes de que pueda ser utilizada
La declaracin debe ocurrir antes de main () o de otras
funciones que la utilicen
Declaraciones pueden tener dos formas:
La definicin de funcin entera
Justificada como funcion prototype la definicin de
funcin en s mismo se puede entonces poner
dondequiera en el programa
101 ECP
Slide 137
Funciones
Funciones Prototipos
101 ECP
Slide 138
Funciones
Declaracion y Uso: Ejemplo 2
Example 2
int a = 5, b = 10, c;
int maximum(int x, int y);
int main(void)
{
c = maximum(a, b);
printf("The max is %d\n", c)
}
int maximum(int x, int y)
{
return ((x >= y) ? x : y);
}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Funcion es
declarada con
prototipo antes
de ser usada en
el main()
Funcion es
definida despues
de ser usada en el
main()
Slide 139
Funciones
Pasando Parametros por Valor
101 ECP
Slide 140
Funciones
Pasaje de parmetros por Valor
Ejemplo
int a, b, c;
int foo(int x, int y)
{
x = x + (++y);
return x;
El valor
}
int
{
a
b
c
}
main(void)
=
=
=
5;
10;
foo(a, b);
de a es copiado en x.
El valor de b es copiado en y.
La funcin no cambia el valor
de a o b.
101 ECP
Slide 141
Funciones y Alcances
Parametros
int n;
long int factorial(int n){}
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 142
Funciones y Alcances
Declaracin de variables
Las variables declaradas dentro de un bloque de
la funcin son locales a la funcin
Example
int x, y, z;
int foo(int n)
{
int a;
101 ECP
Slide 143
Lab 08
Funciones
Sobre el CD
\ARG_C\Lab08\Lab08.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.
101 ECP
Slide 144