Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
07/09/2010
Sistemas Embebidos
C para Embebidos ARM
http://laboratorios.fi.uba.ar/lse/
seminario-embebidos@googlegroups.com
07/09/2010
Temario
15 de Septiembre de 2011
07/09/2010
15 de Septiembre de 2011
07/09/2010
15 de Septiembre de 2011
07/09/2010
15 de Septiembre de 2011
07/09/2010
15 de Septiembre de 2011
07/09/2010
int id;
int * const ptr = &id;
15 de Septiembre de 2011
07/09/2010
const int id = 4;
const int * const p
ptr = &id;;
15 de Septiembre de 2011
07/09/2010
15 de Septiembre de 2011
07/09/2010
15 de Septiembre de 2011
10
10
07/09/2010
Representar perifricos
mediante structs
15 de Septiembre de 2011
11
11
07/09/2010
Representar perifricos
mediante structs
15 de Septiembre de 2011
12
12
07/09/2010
Representar perifricos
mediante structs
ptr_Port0
ptr
Port0 es un puntero constante a una variable del tipo GPIO (estructura
que contiene 4 variables que representan puertos de I/O), apunta a la direccin
baja de la estructura (del puerto de I/O mapeado en memoria), la conversin a
puntero tipo GPIO es necesario para mantener la consistencia
Podemos
d
usar ell puntero para acceder
d all port0 de
d GPIO
O como:
15 de Septiembre de 2011
13
13
07/09/2010
15 de Septiembre de 2011
14
14
07/09/2010
15 de Septiembre de 2011
15
15
07/09/2010
Consideraciones de Lazos
15 de Septiembre de 2011
16
16
07/09/2010
Asignacin de Registros y
Alias de Punteros
15 de Septiembre de 2011
17
17
07/09/2010
Asignacin de Registros y
Alias de Punteros
15 de Septiembre de 2011
18
18
07/09/2010
Tipos de Datos y
Alineacin Natural en ARM
15 de Septiembre de 2011
19
19
07/09/2010
Tipos de Datos y
Alineacin Natural en ARM
Por lo que toda variable char & short se deber convertir despus de cada
operacin para comprobar si ha sobrepasado su lmite, siendo mucho ms
eficiente
fi i t usar int
i t para variables
i bl locales
l
l y convertir
ti ell valor
l retornado
t
d de
d ser
necesario (el uso de ints reduce tamao de cdigo y aumenta el rendimiento)
15 de Septiembre de 2011
20
20
07/09/2010
Tipos de Datos y
Alineacin Natural en ARM
posible para
p
evitar las conversiones de shorts & chars.
Use enteros cuando sea p
Como cada regla tiene excepciones puede haber un balance entre el tamao del
cdigo y del espacio variables
15 de Septiembre de 2011
21
21
07/09/2010
15 de Septiembre de 2011
22
22
07/09/2010
15 de Septiembre de 2011
23
23
07/09/2010
15 de Septiembre de 2011
24
24
07/09/2010
Alineamiento de estructuras
y Uso de Memoria
15 de Septiembre de 2011
25
25
07/09/2010
Typedef
yp
_p
packed struct { char c;; int i;; short s;; char d;}
;}
15 de Septiembre de 2011
26
26
07/09/2010
Por ejemplo:
15 de Septiembre de 2011
27
27
07/09/2010
Mapa de memoria
a)) Read
R d Only
O l Memory
M
(ROM fl
(ROM,
flash):
h) para cdigo
di
15 de Septiembre de 2011
28
28
07/09/2010
Mapa de memoria
a)) Read
R d Only
O l Memory
M
(ROM fl
(ROM,
flash):
h) para cdigo
di
15 de Septiembre de 2011
29
29
07/09/2010
Mapa de memoria
a)) Bloque
Bl
de
d Booteo
B t de
d 8K ubicado
bi d en 2GB,
2GB maneja
j los
l eventos
t de
d resett
del sistema e incluye un programa monitor de depuracin en tiempo real (al
tope de memoria interna para que no cambie de derivado en derivado)
b) Los vectores de la Interrupcin son re-mapeados
re mapeados luego del booteo para
ser invocado una vez verificado que el cdigo del usuario existe y es vlido
(checksum); sino el boot loader intenta cargar un programa en flash
c) La distribucin de memoria se presenta al linker va un archivo especial
llamado scatter load (permite poner en memoria zonas complejas y ser
invocado por el compilador mediante directivas de assembler)
El diseo de mapa
p de memoria se mantiene entre derivados permitiendo
p
el
re-uso de software. La ubicacin de las rutinas de servicio de interrupcin y
las convenciones de la interrupcin se mantienen tanto como sea posible
15 de Septiembre de 2011
30
30
07/09/2010
Mapa de memoria
15 de Septiembre de 2011
31
31
07/09/2010
Distribucin de carga
a)) Slo-Lectura
Sl L t
(RO)
(RO): Cdigo
Cdi y datos
d t que slo
l sern
ledos,
l d
no modificados
difi d
b) Lectura-Escritura (RW); Cdigo y datos que pueden leerse y reescribirse
c) Cero-Inicializado (ZI): Datos inicializados en Cero
15 de Septiembre de 2011
32
32
07/09/2010
Distribucin de carga
El archivo
hi contiene
ti
nombres
b
de
d las
l zonas, atributos,
t ib t
direcciones
di
i
de
d
comienzo y opcionalmente longitudes
Dentro de cada zona, pueden disponerse que reas o secciones de
programas vengan primero (o ltimo)
Pueden alocarse secciones en direcciones fijas para poder encontrar ciertos
tipos de informacin a una direccin dada del microcontrollador
(informacin de fabricacin)
15 de Septiembre de 2011
33
33
07/09/2010
Distribucin de carga
FLASH_IMAGE 0X00000000
{ FLASH_Code_Data 0X00000000 0x10000
{ vectors.o (Vect, +FIRST)
; Interrupt & Exception Vectors
* (+RO)
; All Read-Only Code and Data
}
RAM_Code_Data 0X40000000 0x4000
{ * (+RW
(+RW, +ZI)
; All Read-Write
Read Write Code and Data
}
}
Este archivo posiciona la imagen del cdigo en cero absoluto, especifica que la
interrupcin y vectores de la excepcin se carguen primero y a continuacin el
cdigo y datos Read Only (ROM, Flash)
Los datos de lectura-escritura (RAM) se posiciona en 0X40000000 y se
especifica que todos ellos (lectura-escritura y cero-inicializado) se cargue all
15 de Septiembre de 2011
34
34
07/09/2010
Consideraciones adicionales y
conclusiones
15 de Septiembre de 2011
35
35
07/09/2010
Referencias
http://ing.de.soft1.googlepages.com/
C para MCS-51
MCS 51 J.
J M.
M Cruz
C
15 de Septiembre de 2011
36
36