Publicado el 25 de Abril del 2019
1.383 visualizaciones desde el 25 de Abril del 2019
1,2 MB
17 paginas
Creado hace 6a (17/10/2017)
Desarrollo en C/C++ para la RPi
2017/10/16
Àngel Perles
Contenido
● Objetivo
●
Introducción
● El desarrollo “cruzado”
● Herramientas GNU C compiler (GCC)
●
Instalar
● Primer programa
● Bibliotecas
● Actividades
“Activity 1”
“Activity 2”
●
●
armpower.blogs.upv.es
2
Objetivo
● Comprender el concepto de desarrollo cruzado
● Trasladar conocimientos de C a la plataforma RPi
● Aprender a usar bibliotecas externas
C/C++
armpower.blogs.upv.es
3
Introducción
while (1) {
● C/C++ es “clásico”, nativo, portable, modular, bla, bla ... asumimos
que lo sabéis
“El lenguaje” universal del mundo embebido y no embebido
●
●
cualquier “cacharro” dispone siempre de ensamblador y de C/C++
● de bajo/medio nivel --> ideal para la programación de periféricos
● Pegas
● poco expresivo, retorcido, mal tipado, traga aberraciones, muy susceptible a
errores de programación, ... durillo para novatos, ...
●
¡Puñeta!, ¿y por qué todo esto está hecho en C?
●
●
freno ABS de tu coche, bomba de insulina, marcapasos, ...
satélite artíficial, GPS, ...
} // end while
armpower.blogs.upv.es
4
Introducción
● Se asume la imposibilidad de escapar de C/C++
●
(Hay una notable falta mundial de ingenieros formados en este área)
● Soluciones/paliativos a los defectos de C
● Restringir las construcciones C/C++ a usar, i.e. MISRA C
● Usar generadores automáticos de código
●
... pero escapa del ámbito del curso
●
¡Quiero usar C/C++ en la RPi!
●
●
“Profesional”: usar desarrollo cruzado
“De ir por casa”: instalar todas las herramientas en la propia SD
Este curso
armpower.blogs.upv.es
5
El desarrollo “cruzado”
● La plataforma de desarrollo (“host”) es distinta a la plataforma destino
(“target”)
● Facilita enormemente el desarrollo
● Pero poner a punto el entorno suele ser complicado
● Descartada por que hay que explicar muuuchas cosas.
● No sirve para un introducción a Linux embebido y a RPi
armpower.blogs.upv.es
6
Herramientas GNU C compiler (GCC)
● GNU C Compiler
● Conjunto de herramientas de programación para desarrollo nativo en muchas
plataformas (de micros a supercomputadores)
Incluye, entre otros, copilador, enlazador, ensamblador, depurador, etc.
●
● De código abierto, libre y gratuito.
● Es la base de muchas herramientas comerciales (de pago y libres)
Instalar
● Lo instalamos en la RPi y trabajamos en ella directamente
●
$ sudo apt-get install gcc
● Comprueba realmente qué se ha instalado
$ which gcc
$ ls -l (pon aquí el resultado de antes)
NOTA: Parece que se ha instalado GCC, pero es una falacia.
En realidad, se ha instalado arm-linux-gnueabihf-gcc-X
armpower.blogs.upv.es
7
Herramientas GNU C compiler (GCC)
● Vamos a usar el compilador “a pelo”:
● pi$ cd
● pi$ mkdir test
● pi$ cd test
● pi$ leafpad primer_programa.c & (suponemos terminal dentro X o entubado X)
● pi$ gcc -o prueba primer_programa.c
● pi$ ./prueba
armpower.blogs.upv.es
8
Herramientas GNU C compiler (GCC)
● ¿Funciona? ¿Se capta?
● Rasquemos un poco ...
● pi$ ldd ./prueba
● Usa “man” para saber qué es “ldd”
● Mira el tamaño del ejecutable y prueba ahora
● pi$ gcc -o prueba primer_programa.c
● Mira de nuevo tamaño y prueba “ldd”
armpower.blogs.upv.es
9
Bibliotecas
● Lo bueno de Linux y de C es la cantidad de bibliotecas disponibles
● Echa un vistazo en /lib y /usr/lib … bufff, menudo berenjenal
armpower.blogs.upv.es
10
Bibliotecas
● Dos tipos principales de archivo (todos empiezan por lib)
● Terminados en .so* → shared object (equivalente a .dll en MWindows)
● Terminado en .a → para enlazado estático
● Y suelen estare acompañados de numeritos y enlaces para indicar la
versión
● Actividad:
● Piensa en algo que se pueda hacer con un computador y trata de localizar una
biblioteca que lo haga
armpower.blogs.upv.es
11
Bibliotecas
● Ejemplo: GCC + bibliotecas + WiringPi
● Son unas bibliotecas. ¡¡¡¡¡ Podemos usarlas !!!!!
● Construircon enlazado a la biblioteca libwiringPi*.so*
● $ gcc -o blink blink.c -lwiringPi
armpower.blogs.upv.es
12
Bibliotecas
● Probando
● $ ./blink
● Upsss! No va!!! … hay que “exportar el pin” para dejarlo accesible
● $ gpio export 17 out
● $ ./blink
armpower.blogs.upv.es
13
GCC: “Activity 1”
● Crea el módulo valve.c partiendo de la siguiente cabecera valve.h
● You are not alone in the world
●
If you are an engineer, then you
should use english for developing software
armpower.blogs.upv.es
14
GCC: “Activity 1”
● Ejemplo de programa principal que usa el módulo
● Construir y probar el ejemplo
● gcc -c valve.c
● gcc -o test_valve test_valve.c valve.o -lwiringPi
●
./test_valve
armpower.blogs.upv.es
15
GCC: “Activity 2”
● Crea el módulo doorlock_rpi_wiring.c partiendo de la cabecera doorlock.h
que os acabo de entregar
● Crear la aplicación opendoor que active el ¿pistón? del ¿resbalón?
durante 2 segundos
armpower.blogs.upv.es
16
armpower.blogs.upv.es
17
Comentarios de: Desarrollo en C/C++ para la RPi (0)
No hay comentarios