compilador c ccs_p1

29
DTO. INGENIERIA ELECTRICA-ELECTRÓNICA TEMA Compilador C para PIC CCS C

Upload: felipe-acosta

Post on 12-Apr-2016

32 views

Category:

Documents


1 download

DESCRIPTION

ccs

TRANSCRIPT

Page 1: Compilador C CCS_p1

DTO. INGENIERIA ELECTRICA-ELECTRÓNICA

TEM

A

Compilador C para PICCCS C

Page 2: Compilador C CCS_p1

2

Compilador C para PICCCS PIC COMPILER• Un compilador convierte un lenguaje de alto nivel a instrucciones en código máquina.

Varios compiladores C tienen como procesador objetos los PICmicro tal es el caso de MicroChip y CCS.

• Los programas son editados y compilados a instrucciones máquina en el PC.

• El código es ejecutado en el PIC y puede ser depurado.

Page 3: Compilador C CCS_p1

3

CCS PIC COMPILER• Los elementos básicos de un programa en C

– Directivas de preprocesado• Indican al compilador cómo debe generar el código máquina.

– Programas• Bloques de programa.• Siempre debe incluirse una llamada main().

– Sentencias• Instrucciones que definen lo que hace el programa y la secuencia de ejecución del mismo.

– Comentarios• Imprescindibles como documentación del código fuente.

Page 4: Compilador C CCS_p1

4

VARIABLES

•Una variable es un nombre asignado a una o varias posiciones de memoria RAM.

•En C es necesario declarar todas las variables antes de poder utilizarlas, indicando el nombre asignado y el tipo de datos que en ella se van a almacenar (opcionalmente también el valor inicial asignado).

tipo nombre_variable [=valor]; p.e.:int i;

•Los tipos de datos aceptados en C estándar son cinco:char (carácter) int (entero)float (coma flotante en 32 bits) double (coma flotante en 64b)void (sin valor)

•Las variables pueden ser locales o globales. Las variables locales sólo pueden ser usadas en la función en que se declaran, mientras que las variables globales son compartidas por todas las funciones del programa (deben declararse fuera de cualquier función y antes de ser utilizadas).

Page 5: Compilador C CCS_p1

5

VARIABLES

• El compilador de CCS acepta los siguiente tipos de variable.

Especificación Significado Especificación Significado Tamaño Rango Tamaño Rangochar carácter 8 bits 0 a 255 (sin signo)int entero 8 bits 0 a 255 (sin signo)float coma flotante 32 bits 6 bits de precisiónvoid sin valor nulo ningunoint1 entero de 1 bit 1 bit 0 a 1int8 entero de 8 bits 8 bits 0 a 255 (sin signo)int16 entero de 16 bits 16 bits 0 a 65535 (sin signo)int32 entero de 32 bits 32 bits 0 a (232-1)short entero de 1 bit 1 bit 0 a 1long entero de 16 bits 16 bits 0 a 65535 (sin signo)

•Los tipos de variable short y long pueden tener detrás la palabra int sin efecto alguno.

Page 6: Compilador C CCS_p1

6

VARIABLES

•Todos los tipos de datos son por defecto sin signo (unsigned) salvo los de tipo float. •Para almacenar datos con signo, hay que introducir el modificador signed delante del tipo. El efecto que se consigue es el recogido en la siguiente tabla. Especificación Significado Especificación Significado Tamaño Tamaño Rango Rango signed char carácter con signo 8 bits -128 a 127 signed int16 entero con signo 16 bits -16384 a 16383 signed long coma flotante 16 bits -32768 a 32767

•Los números negativos se codifican en complemento a 2.

•Cuando se opera con distintos grupos de datos en una misma expresión, se aplican una serie de reglas para resolver las diferencias.

Page 7: Compilador C CCS_p1

7

FUNCIONES

•Las funciones son los bloques constructivos fundamentales en C. Todas las sentencias deben encontrarse dentro de funciones.•Las funciones deben ser definidas antes de ser utilizadas.•Formato general de definición de una función:

tipo_dato_return nombre_func (tipo param1 , tipo param2 , … )

{cuerpo de la función (sentencias);}

•Las funciones pueden devolver un valor a la sentencia que las llama. El tipo de dato devuelto se indica mediante tipo_dato (char, int16, long). Si no se indica nada, se entiende que devuelve un entero. Si no devuelve nada, debe incluirse una especificación tipo void.

Page 8: Compilador C CCS_p1

8

FUNCIONES

•La manera que tiene una función para devolver un valor es mediante la sentencia return.

return (expresión); return expresión;

•La expresión debe proporcionar el mismo tipo de dato que el especificado en la función. Si no debe devolver nada, se finaliza con return;

•Cuando una función se encuentra con una sentencia return se vuelve a la rutina de llamada inmediatamente y las sentencias posteriores a return no se ejecutan.

•Además con la sentencia return, las funciones terminan su ejecución y vuelven al lugar desde donde se les llamó cuando alcanzan la llave de cierre de función } tras ejecutar la última sentencia de la misma.

Page 9: Compilador C CCS_p1

9

FUNCIONES

•Además de devolver valores, una función también puede recibir parámetros (denominados argumentos) según se indicó en su definición.

int suma (int a , int b) Parámetros formales { return (a+b); } main() { int c; c = suma (10 , 23); Argumentos de llamada }

•Los argumentos se pueden pasar a las funciones por valor o por referencia.

• La llamada por valor copia el argumento de llamada en el parámetro formal de la función (No modifica su valor en la función de partida).• La llamada por referencia usa la dirección de la variable que se pasa a la función (se consigue usando punteros o arrays).

Page 10: Compilador C CCS_p1

10

OPERADORES

•El lenguaje C define numerosos operadores mediante los cuales se construyen las expresiones (combinación de operadores y operandos).

•De asignación

•Aritméticos

Page 11: Compilador C CCS_p1

11

•Relacionales

•Lógicos

•De bits

OPERADORES

Page 12: Compilador C CCS_p1

12

•In/decremento

•Desplazamiento bit

•Dirección/indirección

En lenguaje C “profesional” es muy frecuente usar abreviaturas.Así, por ejemplo, es más habitual ver a += b; que a = a + b;

OPERADORES

Page 13: Compilador C CCS_p1

13

OPERADORES

Page 14: Compilador C CCS_p1

14

DECLARACIONES

Page 15: Compilador C CCS_p1

15

Sentencias de control de programa–Sentencia ifSentencia if

• Se ejecuta una sentencia o bloque de código si la expresión que acompaña al if tiene un valor distinto a cero (verdadero). Si es cero (falso) continúa sin ejecutar la sentencia o bloque de sentencias.

if (expresión) sentencia { sentencia 1; sentencia 2; ... } –Sentencia if-elseSentencia if-else

• Se evalúa una expresión y, si es cierta, se ejecuta el primer bloque de código (o sentencia 1). Si es falsa, se ejecuta el segundo.}

if (expresión) sentencia 1; (expresión) ? (sentencia 1) : (sentencia); Else sentencia 2;

Page 16: Compilador C CCS_p1

16

Sentencias de control de programa–Sentencia if-if/elseSentencia if-if/else If (P1 !=0)

c=20;else c=0;

If (a>b) { If (a>d) c = 15; else c=0; }

If (a>b) { If (a>d) c = 15; }else c=0;

Page 17: Compilador C CCS_p1

17

Sentencias de control de programa– Sentencia switchSentencia switch• Substituye a if-else cuando se realiza una selección múltiple que

compara una expresión con una lista de constantes enteras o caracteres. Cuando se da una coincidencia, el cuerpo de sentencias asociadas a esa constante se ejecuta hasta que aparezca break.

switch (expresión) {

case constante 1:grupo 1 de sentencias;break; case constante 2:grupo 2 de sentencias;break;... default: grupo n de sentencias;}

default es opcional y el bloque asociado se ejecuta sólo si no hay ninguna coincidencia con las constantes especificadas.

break es opcional. Si no aparece se sigue con el case siguiente.

No puede haber constantes iguales en dos case de la misma sentencia switch.

Page 18: Compilador C CCS_p1

18

Sentencias de control de programa– Sentencia switchSentencia switch

Switch (k) { case 0: x=1; break; case 2: c=6; b=15; break; case 3: x=12; break;default: break;}

Page 19: Compilador C CCS_p1

19

Sentencias de control de programa– Sentencia de bucle forSentencia de bucle for

• Se emplea para repetir una sentencia o bloque de sentencias.

for (inicialización ; condición ; incremento){sentencia(s);}

• En la inicialización se le asigna un valor inicial a una variable que se emplea para el control de la repetición del bucle.

• La condición se evalúa antes de ejecutar la sentencia. Si es cierta, se ejecuta el bucle. Si no, se sale del mismo.

• El incremento establece cómo cambia la variable de control cada vez que se repite el bucle.

• Es posible anidar bucles for para modificar dos o más variables de control.

Page 20: Compilador C CCS_p1

20

Sentencias de control de programa– Sentencia de bucle forSentencia de bucle for

For (i=1;i<=100;i++) { delay_ms(33); px=px+3;}

For (y=1;y<=99;y=y+3) { delay_ms(33); px=y;}

Page 21: Compilador C CCS_p1

21

Sentencias de control de programaSentencias de control de programa– Sentencia de bucle whileSentencia de bucle while

• La repetición se lleva a cabo mientras sea cierta una expresión.

while (expresión){ sentencia(s);}

• La expresión se evalúa antes de cualquier iteración. Si es falsa, ya no se ejecuta la sentencia o bloque de sentencias.

– Sentencia de bucle do-whileSentencia de bucle do-while

do {sentencia(s); } while (expresión)

• Las sentencias se ejecutan antes de que se evalúe la expresión, por lo que el bucle se ejecuta siempre al menos una vez.

Page 22: Compilador C CCS_p1

22

Sentencias de control de programaSentencias de control de programa– Sentencia de bucle do-while/while

while (x>0 && y<5) { a=1; b=45; x=p1;}

do { a=1; b=45; x=p1;} while (x>0 && y>5);

Page 23: Compilador C CCS_p1

23

Comentarios– Los comentarios se incluyen en el código fuente para explicar el

sentido y la intención del código al que acompañan. Son ignorados por el compilador y no afectan a la longitud ni rapidez de ejecución del código final.

– Un comentario se puede colocan en cualquier lugar del programa y pueden tener la longitud y el número de líneas que se quiera.

– Hay dos formatos posibles para los comentarios.Formato 1. Empiezan por // y finalizan con el final de la línea.Formato 1. Empiezan por // y finalizan con el final de la línea.

// Esto es un comentario.

Formato 2. Empiezan por /* y finalizan por */. No es posible Formato 2. Empiezan por /* y finalizan por */. No es posible anidar comentarios con este formato.anidar comentarios con este formato.

/* Esto también esun comentario *//* Pero esto que /* parece un comentario válido*/ no lo es */

Page 24: Compilador C CCS_p1

C específico para los PIC– Las principales diferencias entre compiladores residen en las

directivas (pre-processor commands) y en las funciones integradas (built-in functions).

– Al final de esta sección se incluyen listas con las directivas y las funciones integradas correspondientes al compilador de CCS.

Directivas de preprocesado más habituales:Directivas de preprocesado más habituales:#ASM Las líneas entre estas dos directivas deben ser

instrucciones #ENDASM ensamblador que se insertan tal y como aparecen.

#BIT id=x.y Se crea una variable tipo bit correspondiente al bit y del byte x en memoria.

#BYTE id=x Se crea una variable y se sitúa en el byte x en memoria. Si ya existía esa variable, se coloca físicamente en la posición especificada.

24

Page 25: Compilador C CCS_p1

C específico para los PIC

#DEFINE id texto El identificador se sustituye por el texto adjunto.

#DEVICE chip Define el micro para el que se escribe el código.

#FUSES options Define la palabra de configuración para la grabación del microcontrolador.

#INCLUDE <fichero> Se incluye el texto del fichero especificado en el

#INCLUDE “fichero” directorio o fuera de él.

#INLINE La función que sigue a esta directiva se copia en memoria de programa cada vez que se le llame. Puede servir para mejorar la velocidad.

#SEPARATE La función que sigue a esta directiva se implementa de manera separada (no INLINE). De esta manera se ahorra ROM

25

Page 26: Compilador C CCS_p1

C específico para los PIC

#ORG start Sitúa el código a partir de una determinada posición de la memoria de programa

#INT_xxxx Indica que la función que sigue es un programa de

tratamiento de la interrupción xxxx.#INT_GLOBAL Indica que la función que sigue es un

programa genérico de tratamiento de interrupción. No se incluye código de salvaguarda de registros ni de recuperación como cuando se usa #INT_xxxx.

#PRIORITY ints Establece un orden de prioridad en las interrupciones.

#USE DELAY (clock = frecuencia en Hz)Define la frecuencia del oscilador que se va a utilizar, que se emplea para realizar los cálculos para funciones integradas de retardo.

26

Page 27: Compilador C CCS_p1

27

Compilador C para PICpre-processor commands

Page 28: Compilador C CCS_p1

28

Compilador C para PICbuilt-in functions

Page 29: Compilador C CCS_p1

29

Compilador C para PICbuilt-in functions