TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: camope en 06 de Marzo de 2009, 07:14:40
-
Hola a todos. Ultimamente me he estado planteando realizar mas tareas con los pic, el caso es que Yo siempre he sido rata de ensamblador, pero lo cierto es que mi último proyecto, un programador para el control de contactores con un reloj de "alta precisión", me ha llevado bastante tiempo, y puesto que no todos los programas van a necesitar un control de tiempos exahustivo, pues me he planteado pasarm a Picc para acortar el tiempo de desarrollo.
El caso es que en mi primer programa me he planteado realizar una función que me realice una pausa de x ms, como la delay.c pero más precisa. Mi problema radica en que si le paso argumentos a esa función, el código ensamblador no reconoce las variables:
----------------------------------------------------------------------------------------------
#include <pic.h>
#include <htc.h>
#define FOSC 4
void espera_ms(unsigned char intervalo);
void main(void)
{
.....
espera_ms(1);
}
void espera_ms(unsigned char intervalo){
#asm
decfsz _intervalo, F
....
#endasm
return;
}
----------------------------------------------------------------------------------------------
me da el error "Error [800] ; 0. undefined symbol "_intervalo"" tanto con guión bajo como sin él. La única forma de que el ensamblador reconozca la variable es declarándola como global (y no pasarla como parámetro), pero claro está, así ya pierde la gracia.
Además sería interesante, una vez funciones, hacer una librería para utilizarla desde cualquier programa.
Un saludo y os agradezco las sugerencias.
-
En asm no hay variables de tipo local por tanto no puedes hacerlo e esta manera. La referencia a esa variable desde asm es una contante... en C es un puntero, por tanto no casan. Tienes que cambiar la forma de pensar para cada entorno.
-
Muchas gracias por tu rápida respuesta, ahora me queda claro que lo que pretendo hacer no es posible, al menos no de esta manera. No obstante, en el manual de hi-tech viene reflejado que es posible definir una funcion en ensamblador en un fichero .as separado y realizar una llamada desde un programa en c e incluso pasarle parámetros, el caso es que no me queda totalmente claro como realizarlo.