Академический Документы
Профессиональный Документы
Культура Документы
Sistemas Embebidos
1 de 33
Estndares de C
K&R C (1978)
C99 (1999)
Entrada/Salida
Optimizacin de la utilizacin de memoria
Rutinas en Assembly embebidas
17:30
Es un tema polmico.
17:30
3 de 33
4 de 33
typedef
5 de 33
Conversin Automtica de
Tipos
Ejemplo:
unsigned char a = 200;
int b = -20;
a = a+b;
6 de 33
Conversin Automtica de
Tipos
Ejemplo:
unsigned int a = 200;
int b = -20;
a = a+b;
17:30 17:30
7 de 33
Conversin Automtica de
Tipos
Recomendacines:
1.
2.
17:30 17:30
Ejemplo:
unsigned char a = 200;
int b = -20;
a = a+b;
8 de 33
0xC8 = 11001000b
0xC8 = 11001000b
Operadores de a bits:
Desplazamiento: << n y
17:30 17:30
>> n
9 de 33
Punto Flotante
Rango amplio
Error de representacin bajo en trminos relativos
Parte fraccionaria (no entera)
Sin que se necesiten muchos bits para representarlos
Punto Flotante
nmero = mantisa
base
exponente
Ej:
11 de 33
Punto Flotante
12 de 33
1.
Simple precisin
Normalmente es el tpico tipo float de lenguaje C
Usa 32 bits en total para cada nmero:
1 para el signo
23 para la mantisa (sin contar el 1 implcito)
8 para el exponente (en lugar de ser signado tiene un bias de 127)
2.
Doble precisin
Normalmente es el tipo double de lenguaje C
Usa 64 bits:
1 para el signo
52 para la mantisa (sin contar el 1 implcito)
11 para el exponente (con bias igual a 1023)
13 de 33
Punto Flotante
14 de 33
15 de 33
Punto Fijo
(Granularidad de int16_t: 1)
Granularidad de nuestro sistema: 1/2048 0,0005
17:30 17:30
16 de 33
int32_t
fxp24_8_t;
a;
x,y;
y = x * a;
x /= a; //es igual que x=x/a
x,y,z;
x += y;
z = x y;
17:30 17:30
17 de 33
x;
y = x + (a<<8);
17:30 17:30
18 de 33
y para redondear:
a = (x+128) >> 8;
20 de 33
B.
C.
D.
= a
= 10.5
= foo + bar/3
round(foo)
21 de 33
Declaracin de Punteros
22 de 33
const
const y Punteros
Ejemplo
Nmeros Mgicos
26 de 33
Asignacin de Memoria
stack frame de
a()
stack frame de
a()
Stack frame de
b()
Stack al principio
Se llama a a()
17:30 17:30
Se llama a b()
Se vuelve de b()
Se vuelve de a()
27 de 33
Asignacin de Memoria
variables estticas
stack
heap
Memoria
28 de 33
static
return ++foo;
29 de 33
volatile
volatile
clock;
foo = clock;
while (clock < foo+10) { };
Si clock no fuera declarada como volatile, el compilador
podra asumir que la condicin del while ocurre siempre
MISRA C
Artculo introductorio:
http://www.eetimes.com/discussion/other/4023981/Introduction-to
-MISRA-C
17:30 17:30
31 de 33
Reglas de MISRA C
Ejemplos:
http://computing.unn.ac.uk /staff/cgam1/teaching/0703/misra%20rules.pdf
17:30 17:30
32 de 33
Conclusiones
33 de 33