Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Embebidos
Aplicado sobre la Plataforma de diseño Codewarrior
// declaraciones
double **a, *x, *y;
void prod(int , double **, double *, double *);
...
// reserva de memoria para el vector de punteros a[]
a = calloc(N, sizeof(double *));
// reserva de memoria para toda la matriz a[][]
a[0] = calloc(N*N, sizeof(double));
// asignación de valor para los elementos del vector de punteros a[]
for (i=1; i<N; i++)
a[i] = a[i-1]+N;
// el resto del programa sería idéntico
...
void
datacopy3(UINT8 * dataPtr) PSHX 1 2
{ PULH 1 2
buffer[0] = dataPtr[0]; TAX 1 1
buffer[1] = dataPtr[1]; LDA ,X 1 2
buffer[2] = dataPtr[2]; STA buffer 3 4
buffer[3] = dataPtr[3]; LDA 1,X 2 3
} STA buffer:0x1 3 4
//10 bytes menos de ROM LDA 2,X 2 3
//144 ciclos menos de CPU STA buffer:0x2 3 4
LDA 3,X 2 3
STA buffer:0x3 3 4
RTS 1 4
Cátedra de CDM – Facultad de Ingiería
12/11/2012 23
UNLP
Programación C Eficiente
Ejemplo –bucle con decremento
Código C Código Ensamblador Bytes Ciclos
Void
loop1(void) PSHH 1 2
{ LDA #0x04 2 2
UINT8 i; TSX 1 2
for(i=4; i!=0; i--) STA ,X 1 2
{ TSX 1 2
/* code */ DBNZ ,X,*-offset 2 4
} PULH 1 2
} RTS 1 4
La ventana de
proyecto
contiene una
lista de archivos
pertenecientes
al proyecto.
MCUinit.c es un archivo
automáticamente generado por el
IDE y contiene
Cátedra de CDM – Facultad de Ingiería toda la secuencia de
12/11/2012 45
UNLP
inicialización de la CPU
Codewarrior
Ventana de Proyecto
LDA Cconst;
………………
LDA CData