jueves, 29 de marzo de 2012

Clase de controladores y "Sesión 7".

Hemos tenido la clase de controladores con nuestro tutor esta mañana.
Básicamente hay dos opciones para programar un micro:
1-"Desnudo", es decir, tocando directamente los registros necesarios y programando sin nada mas "debajo".
2-Utilizando un sistema operativo y programando lo necesario: drivers (en nuestro caso de ADC, interrupciones, y GPIO (in/out)) y la aplicación en sí.
La placa tiene instalado un sistema Linux básico sobre el que pretendemos cargar los driver que creemos.
La verdad es que es meterse en un mundo más difícil, pero nos parece bastante interesante entender como funcionan y relacionar todas las capas de un sistema.
Es posible que nos quite tiempo para hacer una practica con más "extras" pero creemos que merece la pena. Ha sido una clase con muchos conceptos y aún no hemos asimilado todos: un nuevo Makefile, cargar y registrar controladores, funciones del controlador, mensajes del kernel, como implementar con aplicaciones de usuario, etc... Tendremos que dedicarle tiempo.
Os dejo un par de capturas para ilustrar en que "nivel" se encuentran los controladores (basicamente entre el kernel y la plataforma):


Después de la clase, hemos ido al laboratorio y conseguido cargar un controlador de prueba.
Además también hemos descubierto que aún no podemos probar el ADC ni las interrupciones(que ya tenemos hechos) ya que hay que acceder a registros a los que solo tiene acceso el kernel (es decir, tendremos que acceder mediante los drivers) y por eso en la sesión anterior nos daba un "segmentation fault" al intentar ejecutar el programa en la placa.

Esperemos que merezca la pena la elección, por ahora estamos un poco perdidos con esto de los driver, pero todo es ponerse.

martes, 27 de marzo de 2012

Reunión y Sesión 6

Hoy hemos tenido por un lado una reunión con nuestro tutor y la otra pareja que hace esta práctica, y por otro lado hemos estado 3 horas en el laboratorio.

En la reunión nos hemos dividido un poco el trabajo "básico" para avanzar más rápido y tener más tiempo para mejoras.
A nosotros nos ha tocado desarrollar el ADC, interrupciones y LEDs.
También nos ha comentado el tutor que en vez de hacer la memoria, podríamos hacer los "tutoriales" de cada parte del micro (parecidos a los que existen para el ColdFire) y hemos aceptado.
Así mismo también hemos decidido "mejorar" el sistema  programando sobre un sistema operativo (es decir, con drivers) en vez de programar sobre el "micro desnudo".
Hemos quedado las dos parejas mañana con nuestro tutor para que nos de una clase de 1h de lo que tenemos que saber sobre drivers. ha sido decisión nuestra el hacerlo con drivers para aprender más (pues ya nos hemos estado pegando con el "micro desnudo" hasta ahora, y lo hemos entendido bastante bien).
Espero que esta decisión no sea un lastre a lo largo del resto del semestre.
Por último, también hemos definido unos hitos más concretos para cada pareja.

Después hemos estado en el laboratorio unas 3 horas. Hemos completado el archivo relacionado con el ADC (ADC.c) y hemos investigado un poco acerca de como implementar lo relacionado con los LEDs (mediante los pins del GPIO (entrada/salida)).
Sin embargo hemos tenido 2 problemas:
1.- A la hora de compilar el problema completo nos ha dado un error en un punto en el que antes no nos lo daba (al llamar al método "lectura_adc()" como rutina de atención a la interrupción).
2.-Habiendo omitido el error anteriormente nombrado (poniendo le linea que daba error como comentario) hemos cargado el ejecutable en el micro, y al intentar ejecutarlo nos ha dado "segmentation fail".

Vamos a intentar subsanar estos errores en los días sucesivos, y mañana comentaremos como ha ido la clase de drivers.

Edit: El segmentation fail era por intentar acceder con aplicaciones de usuario a registros a los que solo tiene acceso el kernel. Tendremos que acceder a ellos con drivers.

jueves, 22 de marzo de 2012

Nota (Sesión 4 y 5)

Al final hemos conseguido que compile con ayuda de alvaro.
Habia que cambiar algunas cosas de programación que no sabiamos.

Sesión 4 y 5

Esta semana hemos venido 2 dias la laboratorio y hemos estado entendiendo y configurando las interrupciones y los timer.
La verdad es que nos ha costado entender como funcionaba todo.
Nos hemos ayudado de parte de un código para interrupciones  que aparecía en un foro de ARM.
La mayoría del tiempo hemos estado intentando entender el cógido y pensando como escribir el nuestro.
También nos ha quitado bastante tiempo buscar y entender los registros de configuración.

A día de hoy hemos conseguido aclarar casi todas las dudas que teníamos y hemos dejado el programa bastante estructurado (aun que nos sigue dando algún error de compilación y por tanto no hemos probado aún que funcione).
La verdad es que esta semana le hemos dedicado mucho tiempo a la asignatura, pero espero que la fluidez que hemos cogido en configurar (y buscar en la documentación) registros y programar nos ayude a ir mas rápido en los días sucesivos.


jueves, 15 de marzo de 2012

Sesión 2-3

Esta semana hemos venido dos días al laboratorio del departamento:

El primer día nos centramos en comprender la comunicación con la placa, en saber manejar la terminal para compilar cruzado(utilizar el Makefile, comandos, etc...) y en estructurar el programa para hacer en casa los .c y los .h necesarios (implementando las funciones solo con un printf).
La verdad es que perdimos bastante tiempo en "tonterias" por ser la primera vez y tuvimos que recurrir a nuestro tutor (Álvaro Araujo) varias veces, por ejemplo: no teníamos permisos para ejecutar el programa "minicom" y estuvimos un rato intentando abrirlo de diversas formas hasta que Álvaro nos dijo que era por eso.
Otro ejemplo es que no sabíamos que para enviar datos a la placa no sólo había que seleccionar "Send Files" (comando del minicom) sino que además antes había que ejecutar el comando "lrz".
También nos dio tiempo a pensar un poco como estructurar el programa (hablando de .c y .h)  y a hacer un par de .c
En resumen, un día en el que no hicimos mucho pero aprendimos bastante.
Durante esta semana hemos elaborado en casa los .c y .h restantes.

Hoy, (segundo día) hemos comprobado que nos compilaba el programa (creando un ejecutable llamado main).
Por alguna razón que desconocemos, al intentar ejecutar el minicom, nos vuelve a dar el mismo error que el primer día, pero el manos hoy no nos hace falta.

Por último, como Álvaro nos ha comentado que esta práctica está orientada a que otros alumnos la hagan otros años, hemos de decir que se necesita una "clase tutorial" para aprender:
-Los comandos básicos de la terminal (Linux).
-Cómo establecer la conexión con la placa.
-Cómo estructurar un programa en C (esquema general de .c y .h)

Os adjuntamos un esquema que hemos pensado para el programa, aun que estará sujeto a cambios, pero nos servirá para irlo desarrollando de forma ordenada.
Así mismo también adjuntamos un diagrama de las funciones de la placa sacado del manual:
(pulsar para ampliar)





domingo, 11 de marzo de 2012

Desarrollo del hito 1

Buenas tardes y bienvenidos al blog de Pino y Julio. En él vamos a hablar del desarrollo de nuestra práctica especial, tratándose en este caso, de la misma práctica que la normal pero utilizando otro micro. En este caso vamos a utilizar el ARM9.
Antes de nada hemos de comentar que nos decidimos por hacer esta práctica la semana pasada, con lo cual ya teníamos hecha la parte del "Menú". O eso creemos.
Nuestro hito consiste en elaborar un "esqueleto" del programa (crear los archivos .c y .h necesarios así como definir las funciones que contengan, pero sin desarrollarlas), un flujograma y este blog.
A día de hoy, hemos estado repasando un poco sobre C para saber cómo estructurar el programa.
Aún nos queda por investigar, pero pretendemos dejar hoy bastante hecho.

Aquí os dejamos una foto de la placa y algo del hardware externo que vamos a emplear: