Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

64
LPCXpresso Repaso de Lenguaje C Repositorio de c´odigo Actividades Introducci´on a LPCXpresso y repaso del lenguaje C Seminario de Sistemas Embebidos - FIUBA Alan Kharsansky Agosto - 2011 Alan Kharsansky Introducci´ on a LPCXpresso y repaso del lenguaje C 1 / 64

Transcript of Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

Page 1: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Introduccion a LPCXpresso y repaso del lenguaje CSeminario de Sistemas Embebidos - FIUBA

Alan Kharsansky

Agosto - 2011

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 1 / 64

Page 2: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Indice1 LPCXpresso

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

2 Repaso de Lenguaje CIntroduccionProceso de creacion de software en CPasando del Assembly al C

3 Repositorio de codigoVCSTopologıaVCSs popularesHerramientas para el cursoMercurial

4 ActividadesActividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 2 / 64

Page 3: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Introduccion

El LPCXpresso es un toolchain completo para evaluacion ydesarrollo con microcontroladores de NXP.

Esta compuesto por:

LPCXpresso IDE y ”developmenttools”

IDE basado en Eclipsecompiler y linker GNUGDB debugger

LPCXpresso target board (stick)

BaseBoard o hardware adicional(opcional)

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 3 / 64

Page 4: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso target board

El target board es un una herramienta de desarrollo que incluye

Un uC de las familiasLPC1100, LPC1300 oLPC1700 junto coneletronica mınima necesariapara su funcionamiento

Un programador y debuggerJTAG

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 4 / 64

Page 5: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso target board

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 5 / 64

Page 6: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso target board

Del lado del target este incluye algunos perifericos basicos y secomercializan con diferentes micrcontroladores. Por el momento seencuentran disponibles:

LPC1114: ARM Cortex-M0, 32KB flash, 4/8KB SRAM, 50Mhz.

LPC1343: ARM Cortex-M3, 32KB flash, 8K SRAM, USB, 72Mhz.

LPC1769: ARM Cortex-M3, 512KB flash, 64KB SRAM,Ethernet, USB On the go, 120 Mhz.

Nota: En su primera version existio el LPC1768, muy similar al LPC1769

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 6 / 64

Page 7: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso target board

En este curso vamos a utilizar el target que viene con elLPC1768/9.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 7 / 64

Page 8: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso BaseBoard

El BeseBoard fue disenado por Embedded Artists Junto con NXP.Permite conectarle un MBed o un LPCXpresso Target.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 8 / 64

Page 9: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso BaseBoard

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 9 / 64

Page 10: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso BaseBoard

La placa contiene perifericos para desarrollo y experimentacion:

Generales:

Socket for LPCXpresso and mbed module

50 pin expansion dual row pin/header listconnector

Battery powering (small coin battery)

USB interface

Reset pushbutton

Digitales:

RGB-LED (can be PWM controlled)

5-key joystick switch

2 pushbuttons, one for activating bootloader

Rotary switch with quadrature encoding (timercapture)

Temperature sensor with PWM output (timercapture)

Analogicos:

Trimming potentiometer input (analog input)

PWM to analog LP-filtering (PWM output andanalog input)

Speaker output (PWM output)

Oscilloscope probe inout stage

Serial - UART:

USB-to-serial bridge, with automatic ISPactivation

RS422/485 interface

Interface socket for XBee RF-module

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 10 / 64

Page 11: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso BaseBoard

Continuacion:

Serial - SPI:

Shift register driving 7-segment LED

SD/MMC memory card interface

Dataflash SPI-NOR flash

Serial - I2C:

PCA9532 port expander connected to 16 LEDs

8kbit E2PROM

MMA7455L accelerometer with I2C interface

Light sensor

Serial - I2C/SPI

SC16IS752 - I2C/SPI to 2xUART bridge;connected to RS232 full-modem interface andone expansion UART

96x64 pixel white OLED (alternative I2C/SPIinterface)

Extras

CAN bus interface (can be simulated withLPCXpresso LPC1114/LPC1343)

Ethernet RJ45 connector with integratedmagnetic

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 11 / 64

Page 12: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Informacion adicional

Se recomienda revisar los siguientes documentos:

LPC1768 User Manual Ver

LPC1768 Datasheet Ver

LPCXpresso 1768 Target board: Esquematicos Ver

LPCXpresso BaseBoard: Guıa de usuario Ver

LPCXpresso BaseBoard: Esquematicos Ver

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 12 / 64

Page 13: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

LPCXpresso IDE (Eclipse)

El LPCXpresso IDE fue desarrollado por CodeRed junto a NXP. Elmismo incluye un entorno de Eclipse especıficamente adaptadopara interactuar con el target board.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 13 / 64

Page 14: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Conceptos basicos

Eclipse utiliza algunos conceptos que no siempre son comunes aotros entornos de desarrollo por lo que vamos a ver algunos deellos.

Workspace Es el contenedor de nuestros proyectos. Estos proyectos pueden seraplicaciones y/o bibliotecas. Tambien almacena todas lasconfiguraciones del entorno por lo que se puede mover muy facilmente decomputadora en computadora.

Proyecto Este puede ser de dos tipos. Biblioteca estatica o una aplicacionejecutable. Contiene archivos de codigo fuente (.c), encabezados (.h) ycualquier otro archivo que se desee.

En general utilizaremos el workspace para intercambiar proyectos (en el sentido

convencional de la palabra) ya que el mismo incluıra todas las bibliotecas

necesarias.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 14 / 64

Page 15: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Tipos de proyectos

Los proyectos pueden ser de dos tipos:

Aplicaciones: Se compilan y se pueden descargar directamente altarget.

Bibliotecas estaticas: Se pueden compilar, pero para usarlas, unproyecto de tipo aplicacion debe hacer llamadas a las funciones queeste contiene. Es decir, no puede tener un main(). Este tipo deproyectos no se puede descargar por si solo al microcontrolador.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 15 / 64

Page 16: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Tipos de proyectos - Ejemplo

Para ejemplificar pensemos en un ejemplo de un sistema embebido:un reproductor de MP3. Este podrıa estar compuesto por unamemoria SD, una pantalla tactil y un decodificaro de MP3. Todosestos perifericos estan controlados por un microcontrolador, porejemplo un LPC1768.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 16 / 64

Page 17: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Tipos de proyectos - Ejemplo

Las bibliotecas estaticas que podrıamos tener son:

Para el manejo de una memoria SD

Para el manejo del display

Para el manejo del touchscreen

Para el manejo del decodificador

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 17 / 64

Page 18: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionLPCXpresso Target boardBaseBoardLPCXpresso IDE

Tipos de proyectos - Ejemplo

Nuestra aplicacion en sı serıa la que tendra el programa principal ydesde donde se ejecutara nuestro programa. Pero las bibliotecasnos proveen funciones para el manejo de estos perifericos. Puededarse el caso en el que el fabricante nos provea de estas bibliotecasya compiladas. En ese caso solo debemos conocer los prototiposde las funciones.

Estos prototipos se agregan a los archivos fuente utilizando ladirectiva #include y generalmente de archivos con extension .h.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 18 / 64

Page 19: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Repaso de lenguaje C

Tenemos que recordar que vamos a estar programando en ellenguaje C estandar y que nuestra plataforma donde se ejecutara elcodigo es distinta a donde lo compilaremos. Es por eso quedecimos que estamos usando un:

Cross Compiler

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 19 / 64

Page 20: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Proceso de creacion de software en C

Al programar en C, generalmente el proceso que se sigue es elsiguiente:

Edicion Compilacion Linkeo Descarga Depuracion

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 20 / 64

Page 21: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Edicion de codigo

En C tenemos dos tipos de archivos,

.c Archivos compilables. Solo puede haber uno por ejecutableque contenga un main. Cada programa puede utilizar tantoscomo se requiera.

.h Archivos no compilables. Suelen incluirse en los .c para usardefiniciones y prototipos.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 21 / 64

Page 22: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Edicion de codigo - un ejemplo

#i n c l u d e ” l e d s . h”#i n c l u d e ” d e l a y . h”

i n t main ( v o i d ){i n t a , b ;a = 10000;b = 2∗a ;

w h i l e ( 1 ){ledOn ( 0 , 2 2 ) ;d e l a y ( b ) ;l e d O f f ( 0 , 2 2 ) ;d e l a y ( b ) ;}

r e t u r n 1 ;}

app.c

v o i d d e l a y ( i n t t ){i n t i ;f o r ( i =0; i<t ∗10000; i ++){//No hago nada}}

delay.c

v o i d d e l a y ( i n t t ) ;

delay.h

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 22 / 64

Page 23: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Compilacion

Al querer generar un programa ejecutable. Primero necesitaremosejecutar el compilador. Este antes de empezar a compilar, ejecutael pre-procesador.

Algunas de las tareas que este realiza son:

Inclusion de archivos.

Compilacion condicional.

Interpretacion de macros y definiciones.

Comprobacion de errores de sintaxis.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 23 / 64

Page 24: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Compilacion

Ahora el compilador es quien se encarga de generar codigo objeto.

Incluir archivos .h (o prototipos de funciones) en el archivo .c leindican al compilador que las funciones existen, tienen un prototipodeterminada y en algun momento seran linkeadas. Es decir que elcodigo tendra llamadas a las funciones pero no su implementacion.

En nuestro ejemplo, se debera entonces ejecutar el compilador paracompilar leds.c y app.c El resultado del mismo son archivos .o:

leds.o

app.o

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 24 / 64

Page 25: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Linkeo

Cuando se tienen todos los archivos .o, se puede proceder al linkeoo union de los archivos para generar un archivo ejecutable. Lasalida generalmente es un archivo .axf o .elf que contienen elcodigo ejecutable. Luego se puede pasar a un archivo .hex

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 25 / 64

Page 26: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Zonas de memoria

Es importante tener en cuenta en donde se va a ubicar cada partedel codigo generado. Se tienen los sectores de memoria:

.text Codigo ejecutable

.data Variables globales read-only y read-write inicializadas

.bss Variables sin inicializar (son inicializadas en 0automticamente)

Notas: Es comun en microcontroladores utilizar el segmento text para

guardar variables const. Las variables locales de una funcion se alojan en

el stack. La memoria dinamica, en el heap.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 26 / 64

Page 27: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Linkeo - Linker Script

El linker script es un archivo de configuracion que le indica al linker(ld) donde ubicar cada segmento de memoria.Por defaut, en el IDE de LPCXpresso los segmentos .data y .bss sealojan en el primer banco de RAM aunque es posible ubicarlos enuno diferente.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 27 / 64

Page 28: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Resumen

Cuando utilizamos Eclipse (en este caso el CodeRed) podemos,entonces, tener diferentes proyectos dentro de un workspace yluego linkearlos para producir una salida final.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 28 / 64

Page 29: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Resumen

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 29 / 64

Page 30: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Resumen

Mini Tutorial para realizar proyectos con CodeRedDescargar

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 30 / 64

Page 31: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Diferencias

Al programar un microcontrolador tendremos que tener algunasconsideraciones. Al no tener control (preciso) de las lineas deAssembly ni de donde se ubicara nuestro codigo en memoria,debemos usar nombres de funciones que el compilador luegoubicara en lugares especiales.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 31 / 64

Page 32: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Punto de entrada

El punto de entrada que antes lo asociabamos a una posicion dememoria, por ejemplo 0x0000, ahora lo debemos utilizar con unnombre de funcion especifico.

Para el LPCXpresso esta funcion se llama Reset Handler().

Tambien existen otros para diferentes interrupciones y handlers

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 32 / 64

Page 33: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Punto de salida

A diferencia de un programa decomputadora, los programas delos microcontroladores no puedenretornar del main. Esto se debe aque no fue llamado por ningunsistema operativo (por ejemplo).Por eso generalmente utilizamosla siguiente estructura:

i n t main ( v o i d ){// De c l a r a c i o n de v a r i a b l e s// Rut i na s de i n i c i a l i z a c i o n

w h i l e ( 1 ){// Programa p r i n c i p a l// . . . . . . .// . . . . . . .}

r e t u r n 0 ;}

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 33 / 64

Page 34: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

IntroduccionProceso de creacion de software en CPasando del Assembly al C

Interrupciones

Las interrupciones en elmicrocontrolador, al igual que elmain, se asocian a una posicionde memoria. Solamenteutilizamos su nombre. Porejemplo:

v o i d main ( v o i d ){// De c l a r a c i o n de v a r i a b l e s// Rut i na s de i n i c i a l i z a c i o n

w h i l e ( 1 ){// Programa p r i n c i p a l// . . . . . . .// . . . . . . .}

}

v o i d IRQ Handler ( v o i d ){// S e r v i c i o de i n t e r r u p c i o n}

El compilador y/o el microcontrolador se encargan de poner el codigo necesariopara guardar y devolver el contexto.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 34 / 64

Page 35: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

Sistema de control de versiones (VCS)

Un sistema de control de versiones es una herramienta que permiteadministrar un codigo que va evolucionando, que debe sercompartido por mas de una persona y que esta sujeto a constantesmodificaciones por parte de los programadores de manera eficiente.

No mas:main final final superfinal8 elposta.c

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 35 / 64

Page 36: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

VCSs distribuido vs centralizado

Hay dos topologıas de sistemas de control de versiones:

Centralizado: existe un repositorio central de codigo. Todoslos usuarios se conectan a este para trabajar sobre el proyecto.

Distribuido: No existe un repositorio central de codigo.Todos los usuarios manejan copias locales del repositoriocompleto.

A veces se suele usar un sistema hıbrido.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 36 / 64

Page 37: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

VCSs populares

Hoy en dia los mas populares son:

Centralizado: Subversion

Distribuido: Mercurial (Hg) y Git

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 37 / 64

Page 38: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

Herramientas para VCS

Durante el transcurso del seminario utilizaremos Mercurial comosistema de control de versiones y un repositorio central enBitBucket.org.Para utilizar el VCS dentro de nuestro entorno de trabajo,utilizaremos un plugin para eclipse llamado MercurialEclipse quenos permitira integrar esta tecnologıa directamente en el entornodel LPCXpresso.

HgInit.com es un muy buen tutorial para comenzar Ver

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 38 / 64

Page 39: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

Mercurial

Mercurial es un sistema distribuido muy simple de usar. Losconceptos mas importantes que tenemos que saber para comenzarson:

Clone

Push

Pull

Commit

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 39 / 64

Page 40: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

Commit

Cuando queremos utilizar Mercurial debemos crear un repositorioen alguna carpeta. Luego agregar los archivos que queremosadministrar (lo ideal: la mayorıa).

Un commit es la manera de guardar los cambios que se hicieron.Estos son incrementales por lo que no se copia cada version sinosolo las modificaciones. Estos son SIEMPRE en el repositorio local.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 40 / 64

Page 41: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

VCSTopologıaVCSs popularesHerramientas para el cursoMercurial

Clone, push y pull

El comando clone permite clonar un repositorio existente. Porejemplo el central en bitBucket.org a mi computadora local.

El comando pull permite descargar los cambios de un repositorioya clonado

El comando push permite guardar los cambios en un repositorioque no es el local.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 41 / 64

Page 42: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Actividad Nro 1 - Blinky Led

Blinky Led

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 42 / 64

Page 43: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Objetivo

Familiarizarse con el entorno y lograr hace nuestro primer:

Hello World!

En microcontroladores, esto equivale a hacer parpadear un LEDconectado a algun pin de I/O del microcontrolador.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 43 / 64

Page 44: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 1

Debemos clonar el repositorio de la materia. Este nos descargaraun workspace que contiene bibliotecas estaticas y recursosadicionales:

Lib CMSIS and Drivers CMSIS provisto por NXP y Driversbasicos para perifericos

FreeRTOS-Library Kernel del FreeRTOS

Documentacion

Ejemplos

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 44 / 64

Page 45: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 1

Crearemos un nuevo proyecto. Elegir que el target es un NXPLPC17XX C project. Poner un nombre, por ejemplo: ”Blinky” yelegir el microcontrolador LPC1768/9. Luego presionar finish.

Debemos configurar al proyecto para que sepa los paths con losque trabajaremos. Tambien debemos definir el macro global

USE CMSIS

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 45 / 64

Page 46: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 2

Ahora que ya tenemos configurado el proyecto, podemos empezara escribir nuestro codigo. Para ello lo primero que debemos haceres configurar el pin como salida digital. Esto se debe a que cadapin del LPC1768 puede ser utilizado para diferentes funciones.

Por ahora para poder configurar perifericos, accederemos a travesde los registros especiales. El Led que utilizaremos esta ubicado enel stick y conectado al puerto 0 y pin 22 (GPIO0 22).

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 46 / 64

Page 47: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 2

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 47 / 64

Page 48: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 2

Para poder acceder a estos registros, NXP nos provee de archivospara cada uC con definiciones y estructuras en las que se incluyentodos los registros de cada periferico. En este caso como usamos elpuerto 0, la estructura que utilizaremos sera:

LPC GPIO0

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 48 / 64

Page 49: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 2

La estructura LPC GPIO0 esta formado por los siguientes registros:

FIODIR: Permite establecer la direccion del pin. 1 para salida,0 para entrada

FIOSET: Permite poner un 1 logico en un pin.

FIOCLEAR: Permite poner un 0 logico en un pin.

FIOPIN: Permite leer el estado de los pines

FIOMAS: Establece una mascara para las acciones de PIN,SET o CLEAR

FIO: Fast I/O

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 49 / 64

Page 50: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Paso 2

Para setear la direccion de un pin utilizamos el siguiente codigo:

LPC GPIO0−>FIODIR |= (1<<22);

Para setear el bit o borrarlo, podemos hacer:

LPC GPIO0−>FIOSET = (1<<22);LPC GPIO0−>FIOCLR = (1<<22);

Notar que SET y CLEAR no se usan con mascaras, ¿Por que?

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 50 / 64

Page 51: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Ejercicio completo

El codigo completo queda entonces:

#i f d e f USE CMSIS#i n c l u d e ”LPC17xx . h”#e n d i f

i n t main ( v o i d ) {

LPC GPIO0−>FIODIR |= (1<<22); // D i r e c c i o n

w h i l e ( 1 ) {LPC GPIO0−>FIOSET = (1<<22); // PrendoLPC GPIO0−>FIOCLR = (1<<22); // Apago

}

r e t u r n 0 ;}

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 51 / 64

Page 52: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Adicional

El ejemplo anterior solo es visible si se debuggea el programa, ¿Porque?

Como podrıamos implementar un ”delay” en nuestro codigo quenos permita ver parpadear el led (sin utilizar Timers).

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 52 / 64

Page 53: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Actividad Nro 2 - RGB Led

RGB Led driver para el BaseBoard

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 53 / 64

Page 54: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Objetivo

El objetivo de este ejercicio es poder crear una biblioteca estaticade funciones y poder vincularla con nuestro proyecto. La mismadebera tener funciones para poder cambiar los colores del led RGBque incluye el BaseBoard.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 54 / 64

Page 55: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Consigna

Se debera crear una biblioteca estatica que permita manejar el LedRGB que trae el BaseBoard. El mismo se controla mediante 3pines de salida:

RED: GPIO2, pin 0

GREEN: GPIO2, pin 1

BLUE: GPIO0, 26

Ojo con los jumpers del BaseBoard. Chequear que esten conectados.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 55 / 64

Page 56: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Consigna

Las funciones que debera tener esta biblioteca son:

Inicializar el hardware

Apagar todos los leds

Prender los leds independientemente para mostrar los coloresprimarios

Opcional: Hacer funciones para generar colores a partir de losprimarios.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 56 / 64

Page 57: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Consigna

La intencion es lograr unabiblioteca (o driver)totalmente separado denuestro codigo para luegotener un main que seasimilar al siguiente:

#i n c l u d e ”RGBLed . h”

i n t main ( v o i d ) {

l e d s I n i t ( ) ;

w h i l e ( 1 ) {redLedOn ( ) ;l e d s O f f ( ) ;greenLedOn ( ) ;l e d s O f f ( ) ;blueLedOn ( ) ;

}r e t u r n 0 ;

}

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 57 / 64

Page 58: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Actividad Nro 3 - Fading Led (PWM)

Fading LED

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 58 / 64

Page 59: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Consigna

El objetivo de esta actividad es hacer un programa que permitavariar la intensidad de brillo de un Led. Para ello solamentepodremos usar las funciones basicas C y las de entrada y salidavistas en la actividad Nro 1.

Se debera disenar entonces un programa que permita variar elperiodo de actividad de un pulso cuadrado (PWM) por software.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 59 / 64

Page 60: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Actividad Nro 3 - Fading Led (PWM)

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 60 / 64

Page 61: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Resumen

Los temas que vimos hoy fueron:

LPCxpresso y su toolchain: target, BaseBoard, IDE

Proceso de desarrollo de software: edicion, compilacion,linkeo, descarga y depuracion

Sistemas de control de versiones

Repaso de C: punteros, estructuras, operadores de bits ymascaras.

Ejemplos basicos: manejos de I/O y estructuras repetitivas.

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 61 / 64

Page 62: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Resumen

Practicamos sobre la herramienta LPCXPresso:

Descargar un repositorio

Escribir un programa nuevo

Compilarlo y descargarlo

Debuggear paso por paso nuestra aplicacion

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 62 / 64

Page 63: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Resumen

¿Dudas? ¿Consultas?

Cualquier comentario o consulta lo pueden hacer a la lista delgrupo:

[email protected]

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 63 / 64

Page 64: Sistemas Embebidos-2011 2doC-Intro a LPCXpresso y Repaso Lenguaje C-Kharsansky

LPCXpressoRepaso de Lenguaje CRepositorio de codigo

Actividades

Actividad Nro 1 - Blinky LedActividad Nro 2 - RGB LedActividad Nro 3 - Fading Led

Resumen

Muchas gracias

Alan Kharsansky Introduccion a LPCXpresso y repaso del lenguaje C 64 / 64