Sei sulla pagina 1di 40

FASE 3

DESARROLLO DE SOFTWARE
PARA SISTEMAS EMBEBIDOS

SISTEMAS EMBEBIDOS
208006_7

Alejandro Cano Mosquera


Cdigo: 16.375.904
Luis Humberto Morales Gonzlez
Cdigo: 6.115.356
Carlos Fernando Escalante Arciniegas
Cdigo 94.476.240
Gustavo A. Ziga p.
87.064.660
Hctor F. Valenzuela V.
14.477.623

Tutor:
Oscar Ivn Valderrama

Universidad Nacional Abierta y a Distancia (UNAD)


Programa de Ingeniera Electrnica
2015 1
1

INTRODUCCION

Mediante la estrategia de aprendizaje de trabajo colaborativo, se elabora la presente


actividad con el fin de crear un documento final que contenga los aportes, ideas y
discusiones de cada uno de los integrantes del grupo. Anexo a esto se realiza
interaccin grupal, para consolidar el espritu de compaerismo y colaboracin que es
una de las metas de la UNAD, para formarnos como profesionales ntegros
Despus de investigar acerca de la programacin en assembler y en lenguaje C se
desarrolla un pequeo manual, el lenguaje ensamblador es el sistema alfanumrico
para escribir cdigo mquina mediante expresiones abreviadas (mnemotcnicos). En
este la compilacin es ms complicada porque incluye la conversin de operaciones
matemticas complejas, comandos de lenguaje natural o tipos de comandos complejos.
Cada ordenador tiene su propio lenguaje ensamblador. Es usado principalmente
porque hay aplicaciones o programas que deben tratar directamente con los registros
de la mquina, la memoria, dispositivos de E/S, entre otros.
Se realiz la prctica correspondiente a esta fase del aprendizaje, la cual se hizo con el
software

CodeWarrior,

extrado

de:

sicort.cloudapp.net/CodeWarrior.rar,

se

siguieron los pasos que daba la gua, en la cual se presenta de manera resumida la
forma de crear, compilar y depurar un proyecto, con esto se adquieren los
conocimientos y competencias en uno de los lenguajes de programacin de medio y
bajo nivel de mayor utilizacin en la programacin de este tipo de dispositivos como lo
es el assembler, as como en el uso de las diferentes herramientas que pueden hacer
parte de un sistema de desarrollo enfocado a un determinado dispositivo, el cual fue el
MCU MC68HC908JL3.
El lenguaje C se conoce como un lenguaje de medio nivel, pues podramos situarlo
entre los lenguajes de bajo nivel o de mquina (ensamblador) y los de alto nivel como
el PASCAL, por ejemplo. Ofrece un conjunto bsico de sentencias de control y de
manipulacin de datos que nos permitir construir sentencias y estructuras de nivel
ms alto. En la actualidad existen numerosos compiladores de C.

TABLA DE CONTENIDO
Pg.

INTRODUCCION_________________________________________________ 3

FASE1. ASSEMBLER_____________________________________________ 4

Introduccin a la programacin en ensamblador______________________ 5

Fase 1. Assembler
3

Realice un pequeo manual de cmo programar microcontroladores y


microprocesadores en Assembler. Describa los diferentes ensambladores y
macroensambladores.
El lenguaje ensamblador marca un buen punto de partida para el estudiante puesto que
representa un estudio profundo de cualquier microcontrolador tanto en su estructura
como en su juego de instrucciones, brindando las bases suficientes para adentrarse en
el mundo de la programacin y desarrollo de aplicaciones con los microcontroladores.
Primero que todo debemos saber que el lenguaje ensamblador, o assembler (assembly
language en ingls), es un lenguaje de programacin de bajo nivel para los
computadores, microprocesadores, microcontroladores y otros circuitos integrados
programables. Es un lenguaje de bajo nivel ya que es la representacin ms directa de
los cdigos de instruccin mediante nemnicos, un nemnico es un vocablo que en
lenguaje ensamblador representa un cdigo de instruccin binario, los nemnicos se
emplean para facilitar el aprendizaje, por parte del programador, de los diferentes
cdigos que soporta un determinado dispositivo. Toda programacin realizada en
lenguaje ensamblador debe ser compilada o traducida a cdigo de mquina para que el
dispositivo pueda entenderla.

INTRODUCCIN A LA PROGRAMACIN EN ENSAMBLADOR


4

Desde que se concibe un programa hasta que se graba en la memoria del


microcontrolador, suceden una serie de operaciones que se muestran en la Figura 1.

Figura 1. Organigrama de la secuencia a seguir para el grabado del microcontrolador.


El primer paso de un diseo basado en microcontrolador consiste en escribir el cdigo
fuente del programa en el lenguaje seleccionado. Posteriormente, si el lenguaje usado

ha sido el ensamblador, se convierte a cdigo ejecutable mediante el uso de un


programa de ensamblador como el de la empresa Microchip, que se llama MPASM.
La depuracin y simulacin se realizarn mediante el simulador software MPSIM
(entorno DOS), MPLAB (entorno Windows), o como es nuestro caso Code Warrior
Development Studio.

ESCRITURA DEL CDIGO FUENTE


El cdigo fuente del lenguaje ensamblador est estructurado en columnas. Cualquier
texto que comience en la primera columna se considerar una etiqueta y ser parte del
campo de etiquetas. Las siguientes tres columnas contienen el campo de instrucciones,
el campo de datos y el campo de comentarios. Los comentarios deben empezar con
punto y coma (;) y pueden ir tambin en la primera columna.
Campo de etiquetas
Las etiquetas son nombres de subrutinas o secciones de cdigo fuente. Dando
nombres a partes del programa, se posibilita que las instrucciones puedan saltar o
hacer referencia a esas partes sin necesidad de recordar las direcciones fsicas donde
estn ubicadas. El ensamblador MPASM permite etiquetas de hasta 32 caracteres. Una
etiqueta puede ir seguida de dos puntos (:), espacios, tabuladores o RETURN. Deben
empezar por un carcter alfanumrico o de subrayado (_) y pueden contener cualquier
combinacin de caracteres alfanumricos.
Campo de instrucciones
La segunda columna corresponde al campo de instrucciones. Puede ser una
instruccin del microcontrolador o una instruccin para el ensamblador, llamada
directiva.

Campo de datos
7

Contiene datos u operandos para las instrucciones. En los PICs, los datos pueden ser
un registro, un bit de un registro, una etiqueta o un nmero constante (llamado literal).
Algunas instrucciones no llevan datos. Si una instruccin necesita mltiples datos,
deben separarse por comas (,).
La especificacin de la base en la que se expresan los datos u operandos es opcional:
d65, b01000001,0x41, o101 y A son el mismo dato. El sufijo d o D se emplea para
expresar un valor en decimal. El sufijo b o B expresa un valor en binario.
Para expresar un valor en hexadecimal se emplea el sufijo 0x 0X. Un nmero en base
octal se representa mediante el sufijo o O. Finalmente, un valor se puede expresar
mediante un carcter ASCII si se encierra entre comillas simples como A.

Campo de comentarios
El ltimo campo es el del comentario, siempre que haya un punto y coma (;) como
primer carcter. Puede colocarse en cualquier lugar del cdigo fuente.
Los comentarios en ensamblador son muy importantes. Los comentarios deben
describir las tareas que realizan las instrucciones y/o subrutinas. Sin comentarios, es
muy difcil descifrar, algunos das despus, el cdigo fuente que uno mismo ha creado.
El listado que se presenta a continuacin en la Figura 2 presenta el aspecto del cdigo
fuente del programa EJEMPLO1.ASM con los campos de etiquetas, instrucciones,
datos y comentarios recuadrados para su clara distincin.

Figura 2. Listado del programa EJEMPLO1.ASM.


Convenciones en la escritura del cdigo fuente
Para hacer la tarea del programador ms grata, se usan algunas convenciones. Con
ellas, se facilita la revisin y comprensin de un programa.
Algunas de las convenciones ms utilizadas son:

Los ficheros de cdigo fuente llevarn la extensin *.ASM o *.SRC


Los ficheros de listado llevarn la extensin *.LST
Los ficheros de cdigo objeto llevarn la extensin *.OBJ
Los ficheros ejecutables llevarn la extensin *.HEX
Los ficheros de errores de ensamblado llevarn la extensin *.ERR
Los nemnicos escritos en maysculas hacen que el cdigo escrito sea
ms visible.
Comentarios explicando cada lnea de cdigo.
El espacio entre caracteres se escribe _. RB0_ES_1 es ms fcil de
leer que RB0ES1

El primer programa: EJEMPLO1.ASM

Vamos a ir examinando las distintas partes del programa EJEMPLO1.ASM y explicando


cada una de ellas.
Directivas Una directiva es un comando escrito en el cdigo fuente para realizar un
control directo o ahorrar tiempo a la hora de ensamblar. El resultado de incorporar
directivas se puede ver en el fichero *.LST despus de ensamblar el programa.
En el programa EJEMPLO1.ASM aparecen las siguientes directivas:

LIST permite elegir, entre otras cosas, el tipo de microcontrolador a utilizar (P),
nmero de caracteres por lnea (C), tamao de los tabuladores (B), base de

numeracin por defecto (R), niveles de mensajes de salida (W), etc.


EQU se utiliza para asignar valores a las etiquetas deseadas. As, Resultado,
tiene asignado el valor 0x10, y puede referirse a un registro de la memoria de

datos del PIC.


ORG indica al ensamblador dnde debe comenzar a colocar las instrucciones
en la memoria de programa. Es decir, es el Origen para todo el cdigo que
sigue. La direccin de comienzo (origen) es en la posicin 0, debido a que la
familia de microcontroladores PIC de gama media despus del encendido o
RESET siempre ejecutan la instruccin situada en la direccin0. Se denomina
Vector de Reset. La direccin 4 es el Vector de Interrupcin. Si se genera una
interrupcin el microcontrolador ejecuta la instruccin que se encuentre aqu. Es
una buena prctica dejar libre la direccin 4 por si ms adelante deseamos
aadir capacidad de interrupcin a nuestro programa. El programa salta por

encima del Vector de interrupcin y comienza en la direccin 5.


INCLUDE permite aadir listados de programas al listado del programa actual.
END indica al ensamblador el final del cdigo fuente, donde ha de finalizar el
proceso de ensamblado

Cdigo del programa

10

Las tres instrucciones que siguen a la etiqueta Inicio realizan la suma de dos nmeros
literales, 7 y 6, y guardan el resultado de la suma en la posicin de memoria 0x10
etiquetada como Resultado.

Figura 3. Detalle del listado del programa EJEMPLO1.ASM.


Por ltimo, nop es una instruccin que produce que el PIC no haga nada, significa no
operacin.
Entorno de desarrollo MPLAB-IDE
Para editar, compilar y depurar los programas fuente de los microcontroladores PIC
utilizaremos el entorno de desarrollo MPLAB IDE 6.40, basado en ventanas y que se
puede bajar gratis a travs de Internet. Adems es grfico, funcionando perfectamente
bajo Windows.
Desde MPLAB IDE es posible abrir un fichero en ensamblador (*.asm) (fichero fuente) y
ensamblarlo para poder obtener el fichero de entrada de un grabador (*.hex) (fichero
binario), pero tambin es posible el uso de proyectos que utilicen varios *.asm,
permitiendo as reutilizar cdigo con mayor facilidad, al ser este ms modular. Tambin
es posible elegir el tipo de microcontrolador sobre el que simular y activar el modo de
simulacin o depuracin (debugger) denominado MPLAB SIM.

11

Entorno de desarrollo MPLAB-IDE

Creando un proyecto nuevo.


Para generar el cdigo ejecutable de un microcontrolador, primero hay que generar el
fichero fuente (*.asm) donde se escribe el programa en lenguaje ensamblador; y luego
hay que ensamblarlo para obtener el fichero ejecutable o binario (*.hex) que ser el
utilizado por el grabador para volcarlo sobre la memoria de programa del dispositivo.
Desde MPLAB-IDE es posible escribir el programa fuente (*.asm), ensamblarlo para
obtener el fichero ejecutable o binario (*.hex), grabarlo a un dispositivo, simular su
funcionamiento y depurar el cdigo.

12

Creando el fichero fuente.


1. Seleccionad File>New .
Se abre una ventana en blanco sobre la que se escribe el cdigo de nuestro programa:

Listado del programa EJEMPLO1.ASM.

13

Creando el fichero fuente


2. Despus de copiar el cdigo anterior, seleccionar File>Save y guardar el fichero en
un directorio determinado con el nombre ejemplo1.asm.
Creando un proyecto.
El siguiente paso para desarrollar una aplicacin desde MPLAB-IDE es creando un
proyecto, la forma ms sencilla es utilizar la herramienta MPLAB Project Wizard.
1. Abrir la herramienta MPLAB Project Wizard seleccionando Project>Project
Wizard.
2. Elegir el modelo de microcontrolador PIC16F84.
3. Confirmar la localizacin de Microchip Toolsuite, y seleccionad MPASM
Assembler.
4. Introducir un nombre para denominar el proyecto (Proyecto1) y seleccionar el
directorio donde se desea guardar.
5. Aadir el fichero fuente creado anteriormente (ejemplo1.asm) al proyecto.
6. Pulsar el botn de Finalizar para salir del asistente.

Ensamblando el proyecto.

14

Una vez generado el proyecto, hay que ensamblarlo, para ello, Seleccionar
Project>Build all.
Si el proyecto no se ensambla correctamente, comprobar los mensajes de error
obtenidos y volver a ensamblar.
Al ensamblar con xito se genera el fichero ejecutable ejemplo1.hex.

Instrucciones
Estas son las todas las instrucciones que hay para poder programar el Pic 16c5x,
16c64, 16c71, 16c74, 16c84.

15

16

17

Las anteriores son algunas de las formas detalladas de las instrucciones.

TIPOS DE ENSAMBLADORES

Ensambladores cruzados: Se denominan as a los ensambladores que se utilizan en


una computadora que posee el procesador diferente al que tendrn las computadoras
donde se va a ejecutar el programa objeto producido. El empleo de este tipo permite
aprovechar el soporte de medios fsicos y de programacin que ofrecen las maquinas
potentes para desarrollar programas que luego los van a ejecutar

sistemas muy

especializados en determinados tipos de tareas


Ensambladores residentes: Son aquellas que permanecen en la memoria principal de
la computadora y cargar para su ejecucin al programa objeto producido. Este tipo de
ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa
sin necesidad de transportarlo de un lugar a otro, como se haca en crossassembler, y
sin necesidad de programas simuladores. Sin embargo, puede presentar problemas de
espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por
el programador.
Microensambladores: Al programa que indica al intrprete de instrucciones de la CPU
como debe actuar se le denomina microprograma. El programa que ayuda a realizar
18

este microprograma se llama micro ensamblador. Existen procesadores que permiten la


modificacin de sus microprogramas, para lo cual se utilizan Microensambladores.
Ensambladores de una fase: Leen una lnea y la traducen directamente para producir
una instruccin de lenguaje maquina o la ejecuta si se trata de una pseudosinstruccin.
Se construye la tabla de smbolos a medida que aparecen las definiciones de variables,
etiquetas, etc. Debido a su forma de traduccin estos ensambladores obligan a definir
los smbolos antes de ser empleados para que, cuando aparezca una referencia a un
determinado smbolo en una instruccin, se conozca la direccin de dicho smbolo y
se pueda traducir de forma correcta.

Ensambladores de dos fases: Realiza la traduccin en dos etapas: 1 Fase leen el


programa fuente y construyen la tabla de smbolos, 2 Fase vuelve a leer el programa
fuente y pueden ir traduciendo totalmente pues reconocen la totalidad de los smbolos.
Estos ensambladores son ms utilizados en la actualidad.
Macroensambladores:

Son

ensambladores

que

permiten

el

uso

de

macroinstrucciones. Debido a su potencia, normalmente son programas robustos que


no permanecen en memoria una vez generado el programa objeto. Puede variar la
complejidad de los mismos, dependiendo de las posibilidades de definicin y
manipulacin de las macroinstrucciones, pero normalmente son programas bastante
complejos.
Existen varios ensambladores disponibles para ambiente MS-DOS: el IBM Macro
Assembler, el Turbo Assembler de Borland, el Turbo Editassm de Speedware, por citar
algunos. Una breve descripcin de cada uno se proporciona a continuacin:
Macro

Ensamblador

IBM:

Est

integrado

por

un

ensamblador

un

macroensamblador. En gran medida su funcionamiento y forma de invocarlo es


sumamente similar al de Microsoft. Su forma de uso consiste en generar un archivo
fuente en cdigo ASCII, se procede a generar un programa objeto que es ligado y se
genera un programa .EXE. Opcionalmente puede recurrirse a la utilera EXE2BIN de
19

MS-DOS para transformarlo a .COM. Es capaz de generar un listado con informacin


del proceso de ensamble y referencias cruzadas.
Macro Ensamblador de Microsoft: Dependiendo de la versin, este ensamblador es
capaz de soportar el juego de instrucciones de distintos tipos de microprocesadores
Intel de la serie 80xx/80x86. En su versin 4.0 este soporta desde el 8086 al 80286 y
los coprocesadores 8087 y 80287. Requiere 128KB de memoria y sistema operativo
MS-DOS v2.0 o superior. Trabaja con un archivo de cdigo fuente creado a partir de un
editor y grabado en formato ASCII. Este archivo es usado para el proceso de ensamble
y generacin de cdigo objeto. Posteriormente, y con un ligador, es creado el cdigo
ejecutable en formato .EXE.
Turbo Editassm: Este es desarrollado por Speddware, Inc., y consiste de un ambiente
integrado que incluye un editor y utileras para el proceso de ensamble y depuracin.
Es capaz de realizar el ensamble lnea a lnea, conforme se introducen los
mnemnicos, y permite revisar listas de referencias cruzadas y contenido de los
registros. Este ensamblador trabaja con tablas en memoria, por lo que la generacin
del cdigo ejecutable no implica la invocacin explcita del ligador por parte del
programador. Adicionalmente permite la generacin de listados de mensajes e
informacin de cada etapa del proceso y la capacidad de creacin de archivos de
cdigo objeto.
Turbo Assembler: De Borland Intl., es muy superior al Turbo Editassm. Trabaja de la
misma forma, pero proporciona una interfaz mucho ms fcil de usar y un mayor
conjunto de utileras y servicios.
Realmente la diferencia entre los ensambladores radica en la forma de generar el
cdigo y en las directivas con que cuente, aunque estas diferencias son mnimas. El
cdigo ensamblador no cambia puesto que los microprocesadores con los que se va a
trabajar son comunes. As, todos los programas que se creen con un ensamblador en
particular podrn ser ensamblados en otro, cambiando las pseudo-operaciones no
reconocidas por el equivalente indicado en el manual de referencia del paquete
empleado.
20

Fase 2. Software CodeWarrior


Descargue e instale el software CodeWarrior y realice la prctica planteada en la
leccin 10 de la unidad 2. Desarrollo de software para sistemas embebidos,
captulo 5. Prcticas bsicas y aplicaciones del mdulo del curso el cual puede
descargar de http://datateca.unad.edu.co/contenidos/208006/208006.zip. Anexe
informe y capturas de pantalla del proceso realizado.

Despus de abrir el software le damos en crear un nuevo proyecto, seleccionamos el


dispositivo MC68HC908JL3 y en connections seleccionamos Full Chip Simulation,
despus click en siguiente.

21

Luego de guardar el proyecto y escoger el lenguaje de programacin Absolute


assembly le damos finalizar y aparece la ventana principal del IDE Code Warrior,
vamos a la carpeta main.asm, a partir de la carpeta llamada mainLoop escribimos el
cdigo utilizado para este ejemplo.

LOOP0
LOOP1

LDA #$FF
INCA

; A = $FF
; A= A+ 1
22

LOOP2

CMP #3
BNE LOOP1
LDA #$FF
LDHX #$1234
LDHX #$4321
LDHX #0
LDX #$FF
INCX
CPX #4
BNE LOOP2
JMP LOOP0

; A = 3?
; Salto a LOOP1 si A!=3.
; A = $FF = 255
; H:X = $1234
; H:X = $4321
; H:X = $0000
; X = $FF
;X=X+1
; X = 4?
; Salto a LOOP1 si A!=4.
; Salto a LOOP0 (Se Repite el Ciclo)

Compilamos y si no tiene errores le damos click en debug se abre una nueva ventana
llamada True-Time Simulator & Real-Time Debugger que ser empleada para simular la
ejecucin del programa compilado.

23

Ahora solo resta ejecutar las instrucciones durante la simulacin, En la barra de


Debug se observan los iconos encargados del control de esta.

Correr la aplicacin paso a paso

Correr una subrutina sin entrar en ella

24

Correr hasta salir de una subrutina en curso

Reiniciar

25

Para programar un dispositivo, de acuerdo a lo que nos indica la gua, solo debemos cambiar
el tipo de conexin dependiendo del tipo de POD de programacin que se vaya a utilizar; para
el caso del circuito descrito anteriormente se selecciona la opcin MON08 Interface en la
ventana principal del ambiente de desarrollo.

Al ejecutar el Debug se abre una ventana de opciones en la que se configuran


parmetros como la tasa de transferencia, puerto de comunicacin y otros parmetros
que deben ser configurados adecuadamente para la correcta comunicacin entre el PC
y el MCU.

26

Fase 3. Programacin en C
Realice un pequeo manual de cmo programar microcontroladores y
microprocesadores en C.
Durante el desarrollo de su trabajo comparta en el foro de la actividad sus juicios,
pensamientos con los cuales obtuvo la definicin de pertinencia del curso en el
programa

acadmico.

All

podr

enriquecer

sus

apreciaciones

para

la

construccin final del trabajo.


Lenguaje C
El lenguaje C dispone de todas las ventajas de un lenguaje de programacin de alto
nivel (anteriormente descritas) y le permite realizar algunas operaciones tanto sobre los
bytes como sobre los bits (operaciones lgicas, desplazamiento etc.). Las
caractersticas de C pueden ser muy tiles al programar los microcontroladores.
Adems, C est estandarizado (el estndar ANSI), es muy portable, as que el mismo
cdigo se puede utilizar muchas veces en diferentes proyectos. Lo que lo hace
accesible para cualquiera que conozca este lenguaje sin reparar en el propsito de uso
del microcontrolador. C es un lenguaje compilado, lo que significa que los archivos
27

fuentes que contienen el cdigo C se traducen a lenguaje mquina por el compilador.


Todas estas caractersticas hicieron al C uno de los lenguajes de programacin ms
populares.

La figura anterior es un ejemplo general de lo que sucede durante la compilacin de


programa de un lenguaje de programacin de alto nivel a bajo nivel.
Conceptos de programacin embebida en C:
El lenguaje de programacin C fue desarrollado por Denis Ritchie en la dcada de
1970, en los Laboratorios Bell AT&T en Murray Hill, Nueva Jersey. Los desarrolladores
de UNIX necesitaban un lenguaje pequeo y compacto para escribir su cdigo UNIX.
As, C fue escrito conjuntamente por Ken Thompson y Dennis Ritchie.
El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space
Travel. Haban estado jugando en el mainframe de su compaa, pero debido a su poca
capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no
tenan suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese
motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa
mquina no tena sistema operativo, as que decidieron escribir uno. Finalmente
decidieron portar el sistema operativo del PDP-11 que haba en su oficina, pero era
muy costoso, pues todo el cdigo estaba escrito en lenguaje ensamblador. Entonces
decidieron usar un lenguaje de alto nivel y porttil para que el sistema operativo se
pudiera portar fcilmente de un ordenador a otro. Consideraron usar B, pero careca de
28

las funcionalidades necesarias para aprovechar algunas caractersticas avanzadas del


PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.
La justificacin para obtener el ordenador original que se us para desarrollar Unix fue
crear un sistema que automatizase el archivo de patentes. La versin original de Unix
se desarroll en lenguaje ensamblador. Ms tarde, el lenguaje C se desarroll para
poder reescribir el sistema operativo.
En 1973, el lenguaje C se haba 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 ncleos de sistema operativo implementados en un lenguaje
distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito
en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en
1961).
El C de Kernighan y Ritchie es el subconjunto ms bsico del lenguaje que un
compilador debe de soportar. Durante muchos aos, incluso tras la introduccin del
ANSI C, fue considerado "el mnimo comn denominador" en el que los programadores
deban programar cuando deseaban que sus programas fueran transportables, pues no
todos los compiladores soportaban completamente ANSI, y el cdigo razonablemente
bien escrito en K&R C es tambin cdigo ANSI C vlido.
En las primeras versiones del lenguaje, la definicin de funciones se haca mediante un
'prototipo de funcin' (function prototype), el cual indicaba al compilador el tipo de
retorno de la funcin. Aunque este mtodo tiene una gran desventaja respecto al
nuevo, debido a que no comprueba el nmero ni el tipo en la lista de argumentos; en
otras palabras, es mucho ms fcil cometer errores al hacer una llamada a una funcin
con argumentos incorrectos.
Ventajas:

29

Lenguaje muy eficiente puesto que es posible utilizar sus caractersticas de bajo
nivel para realizar implementaciones ptimas.

A pesar de su bajo nivel es el lenguaje ms portado en existencia,


habiendo compiladores para casi todos los sistemas conocidos.

Proporciona facilidades para realizar programas modulares y/o utilizar cdigo o


bibliotecas existentes.
Proceso de compilacin:
La compilacin de un programa C se realiza en varias fases que normalmente son
automatizadas y ocultadas por los entornos de desarrollo:

Preprocesado consistente en modificar el cdigo fuente en C segn una serie de


instrucciones (denominadas directivas de preprocesado) simplificando de esta forma el
trabajo del compilador. Por ejemplo, una de las acciones ms importantes es la
modificacin de las inclusiones ( #include ) por las declaraciones reales existentes en el

archivo indicado.
Compilacin que genera el cdigo objeto a partir del cdigo ya preprocesado.
Enlazado que une los cdigos objeto de los distintos mdulos y bibliotecas externas
(como las bibliotecas del sistema) para generar el programa ejecutable final.

Compilador de funciones incorporadas


Algunos compiladores proporcionan incorporado en las versiones de muchas de las
funciones de la biblioteca estndar de C, es decir, las implementaciones de las
funciones que se escriben en el archivo objeto compilado, y el programa llama a la
funcin de las versiones en lugar de las funciones de la C biblioteca compartida fichero
objeto. Esto reduce la llamada a la funcin de arriba, sobre todo si las llamadas a
funciones son reemplazadas por las variantes en lnea, y permite otras formas de
optimizacin, pero puede causar confusin en la depuracin.

30

Sin embargo, las funciones integradas deben comportarse como funciones ordinarias,
de conformidad con la norma ISO C. La implicacin principal es que el programa debe
ser capaz de crear un puntero a estas funciones mediante la adopcin de su direccin,
e invocar a la funcin a travs de ese puntero. Si dos punteros a la misma funcin se
derivan en dos unidades de traduccin diferente en el programa, estos dos punteros
deben comparar igual, es decir, la direccin viene por la resolucin del nombre de la
funcin, que tiene enlazado externo.
Herramientas de Programacin:
Al programar en C, es habitual usar algunas herramientas de programacin de uso muy
extendido, sobre todo en entorno de tipo unix:

make: Herramienta para automatizar el proceso de compilacin, enlazado, etc.

lint: Herramienta utilizada para detectar cdigo sospechoso, confuso o


incompatible entre distintas arquitecturas

valgrind: Herramienta utilizada para detectar posibles fugas de memoria.

gdb : Debugger de GNU utilizado para seguir la ejecucin del programa.

dbx : Debugger que suele venir instalado con todos los UNIX.

ddd : Interfaz grfico para el depurador gdb o dbx.

Biblioteca C:
Una biblioteca de C es una coleccin de funciones utilizadas en el lenguaje de
programacin C. Las bibliotecas ms comunes son la biblioteca estndar de C y la
biblioteca del estndar, la cual provee las especificaciones de los estndares que son
ampliamente compartidas entre bibliotecas. La biblioteca ANSI C estndar, incluye
funciones para la entrada y salida de archivos, alojamiento de memoria y operaciones con
datos comunes: funciones matemticas, funciones de manejo de cadenas de texto y funciones
de hora y fecha.

31

Otras bibliotecas C son aquellas utilizadas para desarrollar sistemas Unix, las cuales proveen
interfaces hacia el ncleo. Estas funciones son detalladas en varios estndares tales
como POSIX y el Single UNIX Specification.
Ya que muchos programas han sido escritos en el lenguaje C existe una gran variedad de
bibliotecas disponibles. Muchas bibliotecas son escritas en C debido a que C genera
cdigo rpido; los programadores luego generan interfaces a la biblioteca para que las rutinas
puedan ser utilizadas desde lenguajes de mayor nivel, tales como Java, Perl y Python

Funciones y sentencias de control:


En C, cualquier expresin finalizada en un punto y coma; forma una sentencia.
De todos los tipos, las estructuras (o sentencias) de control son las que controlan la
ejecucin de las instrucciones de un programa.
La programacin estructurada se basa en la utilizacin de un reducido nmero de
estructuras que permiten hacer que un programa sea suficientemente legible,
reduciendo considerablemente el nmero de errores, y facilitando enormemente la
deteccin y solucin de estos.
La caracterstica fundamental de la programacin estructurada consiste en que todas
las estructuras tienen un nico punto de entrada y un nico punto de salida. Esto
permite descomponer fcilmente un problema en subproblemas, reduciendo la
complejidad y facilitando la programacin.
En C diferenciamos tres tipos de sentencias de control:

Sentencias condicionales o selectivas.


Sentencias de iteracin o repetitivas (bucles).
Sentencias de salto.

Sentencias condicionales;
Hay tres sentencias condicionales en C: if, else y switch

Sentencia if

32

La sentencia if nos permite elegir si se ejecuta o no un bloque de instrucciones. La


"expresin" del if es una expresin que debe ser evaluada: falsa si es cero y verdadera
si vale distinto de cero.

Sentencia else

Una sentencia if cuando incluye un else, permite ejecutar un bloque de cdigo si se


cumple la condicin y otro bloque diferente de cdigo si la condicin no se cumple.

Sentencia else colgante

Ejemplo:
#include<stdlib.h>
int main()
float nota:
printf ("Dame una nota: ")
scanf ("%f", &nota)
if (nota>9){
printf("Sobresaliente");}
else if(nota >=7){
printf("Notable);}
else if(nota >=5){
printf("Aprobado");}
else{
printf ("Suspenso);}
return

0;

Sentencia switch

Permite seleccionar entre mltiples alternativas posibles. La expresin del switch es


una variable int o char, que puede tomar los valores, entre otros, dados por "opcin 1",
"opcion 2", etc.
33

Sentencias de control Iteracin:


Las instrucciones de iteracin tambin llamados bucles, se ejecutan hasta que se
cumpla alguna condicin predeterminada en el bucle en el caso del for o tambin en
los casos del while y do-while. Podemos destacar los antes mencionados bucles que
son los bucles for, while y do-while.

Bucles for:

Tienen una gran potencia y flexibilidad, y tienen un esquema muy sencillo y definido.
Este esquema es as:
for(inicializacin del bucle; condicin; incremento).
Ahora vamos a proceder a definir cada una de las partes del esquema bsico,
inicializacin (exp1): es una asignacin que se utiliza para comenzar la variable del
bucle, esto es de la variable de la que parte el bucle. Condicin (exp2): es una
expresin relacional que hace que el bucle concluya cuando no se cumpla. Por ltimo
el incremento (exp3): es la parte que determina como cambia la variable hasta que el
bucle concluye. Es importante sealar que cada parte ha de ser separado por ; .Para
que deje de ejecutarse el bucle como antes hemos mencionado depende de la
condicin,

que

deber

de

ser

falsa

para

que

el

bucle

se

detenga.

Debemos tener en cuenta que a diferencia de otros bucles este no llegar a ejecutarse
si la condicin es falsa, ya que la condicin se comprueba antes de entrar en el bucle.

34

Una de las utilidades del bucle for es en el bucle infinito, que pese a que puede hacerse
con todos los bucles es el for con el que se usa. Estos bucles infinitos son usados para
que el bucle no concluya nunca hasta que en el cuerpo se encuentre un break. Por otro
lado la construccin de este bucle for es muy sencilla, for (; ;).

Bucles while:

Tiene cierta semejanza con el bucle for, as es en el uso de una inicializacin, una
condicin y un incremento. Otra de sus similitudes es el momento en el que analizan la
condicin que en ambos es antes de ejecutar el bucle. Sin embargo, en su esquema
bsico aunque parezcan diferentes, son el mismo:

35

Algunas de las veces podremos saber antes de empezar el bucle cuantas veces se va
a ejecutar.

Bucles do-while:

Este es el nico bucle que al menos se va a ejecutar una vez puesto que este bucle
examina la condicin una vez se ha ejecutado el bucle, esto es, al final del mismo
Este bucle es muy til por ejemplo en mens dado que el men debe de ejecutarse al
menos una vez.

36

Sentencias de salto:
Hay cuatro sentencias

de

salto

en

C:

break,

return,

goto

contine.

Suelen estar condicionadas (que solo las ejecute el programa en un determinado caso).
Se desaconseja la utilizacin de este tipo de sentencia de control, sobre todo el goto,
ya que su uso implica un aumento de la probabilidad de cometer errores, dificulta la
legibilidad del cdigo y es mucho ms difcil corregir errores y cambiar secuencias de
cdigo.
Sentencia break:
La instruccin de salto break se usa para interrumpir (romper) la ejecucin normal de
un bucle, es decir, la instruccin break finaliza la ejecucin de un bucle y, por tanto, el
control del programa se transfiere (salta) a la primera instruccin despus del bucle.
Sentencia return
La instruccin de salto return es utilizada en lenguaje C para devolver el control de
ejecucin desde la funcin que contiene el return a la rutina que la invoc y para indicar
el valor de retorno de una funcin.
Sentencia goto
La instruccin de salto goto se puede usar en un programa, para transferir
incondicionalmente el control del mismo a la primera instruccin despus de una
etiqueta, o dicho de otra forma, al ejecutar una instruccin goto, el control del programa
se transfiere (salta) a la primera instruccin despus de una etiqueta.
Sentencia contine
La instruccin de salto contine siempre se usa para interrumpir (romper) la ejecucin
normal de un bucle. Sin embargo, el control del programa no se transfiere a la primera
instruccin despus del bucle, como s hace la instruccin break, es decir, el bucle no
finaliza, sino que, finaliza la iteracin en curso, transfirindose el control del programa a
la condicin de incremento de contadores y despus a la condicin de salida del bucle,
para decidir si se debe realizar una nueva iteracin o no.
CONCLUSIONES

Se realizan investigaciones sobre distintos tipos de lenguajes para programar


microprocesadores y micro controladores, el lenguaje ensamblador o de mquina
37

considerada de bajo nivel es el sistema alfanumrico para escribir cdigo mquina


mediante expresiones abreviadas (mnemotcnicos). En este la compilacin es ms
complicada porque incluye la conversin de operaciones matemticas complejas,
comandos de lenguaje natural o tipos de comandos complejos. Cada ordenador tiene su
propio lenguaje ensamblador. Es usado principalmente porque hay aplicaciones o
programas que deben tratar directamente con los registros de la mquina, la memoria,
dispositivos de E/S, entre otros.
Se pudo realizar la parte prctica en lnea a travs del programa CodeWarrior, con el cual
tuvimos la oportunidad de adquirir conocimientos y experticia para la programacin de
micros controladores; estas bases son fundamentales para realizar trabajos posteriores
relacionados con el diseo y montaje de circuitos electrnicos para sistemas embebidos
o para otras reas del conocimiento.
Se realiza investigacin correspondiente al lenguaje de programacin en C, donde uno
de los objetivos de diseo del lenguaje C es que slo sean necesarias unas pocas
instrucciones en lenguaje mquina para traducir cada elemento del lenguaje, sin que
haga falta un soporte intenso en tiempo de ejecucin. Es muy posible escribir C a bajo
nivel de abstraccin; de hecho, C se us como intermediario entre diferentes lenguajes.
Dentro de las principales ventajas de programacin en C estn las siguientes:
Lenguaje muy eficiente puesto que es posible utilizar sus caractersticas de bajo nivel
para realizar implementaciones ptimas.
A pesar de su bajo nivel es el lenguaje ms portado en existencia, habiendo
compiladores para casi todos los sistemas conocidos.
Proporciona facilidades para realizar programas modulares y/o utilizar cdigo o
bibliotecas existentes.

38

BIBLIOGRAFA

Ignacio Angulo. Microcontroladores PIC la solucin completa en un CHIP. Ed.

Paraninfo.
Taub Herbert. Circuitos digitales y Microprocesadores. Ed. Mc Graw Hill
lvaro Prez Roldn, Programacin de un microprocesador con la ayuda de

lenguaje C, U. de A., 1997.


Microcontrolador PICI6F84, Desarrollo de proyectos. Enrique Palacios Municio,
Fernando Remiro Domnguez, Lucas J. Lpez Prez, Alfa omega. ISBN 84-

7897-600-0.
Tipos

de

ensambladores,

extrado

http://informatica4194.webnode.mx/contactanos/tipos-de-ensambladores/
39

de:

Hoja de Ruta - Aprendizaje Prctico Fase 3. Universidad Nacional Abierta y a


Distancia UNAD escuela de ciencias bsicas, tecnologa e ingeniera curso:
28006

SISTEMAS

EMBEBIDOS

Oscar Ivn Valderrama Arias.

Software CodeWarrior, descargado desde: sicort.cloudapp.net/CodeWarrior.rar


http://programacion1-teoria.wikispaces.com/C.+Sentencias+de+Control
http://www.zator.com/Cpp/E4_10.htm
http://centrodeartigo.com/articulos-informativos/article_62548.html
http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)

40

Potrebbero piacerti anche