Bueno tenes un gran problema o muchisimos problemas pequeños. tal ves es por tener muchas variables, o por no organizarte un poco mas. Dejo una recopilación de todo lo que encontre mirandolo, no esta en orden, simplemente lo primero que encontraba escribia aca.
No entiendo como puede compilar eso.
El tema de redefinir las variables parece que es cierto. Si te compila y ya no te da mas error, entonces en algun otro lado lo estas haciendo, tal ves en algun include, o en alguna libreria...
Ejemplo
my_D = -1 ;
if (D < 0){
my_D= 0 ;
}
Lo curioso es que no tenemos D, pero aun asi "compila" como si existiera realmente pero de otro lado, si fuera my_D ese codigo simplemente no tiene sentido.
Tambien my_D es tipo int, lo cual implicitamente es "unsigned" o sin signo asi que cargar un -1 es cargarle 2^16 - 1
Mas problemas
if (pid ==2){
my_p=-0.1 ;
if (P < 0){
my_P= 0 ;
}
C es case-sensitive asi que my_P no es lo mismo que my_p, serian 2 variables totalmente distintas, pero vos unicamente definiste my_P, P y my_p no estan definidas, aca si o si deberia darte un error. Tambien my_p es un entero, y estas intentandole poner un -0.1.
----------------
No tiene sentido hacer esto:
char text [4] ;
char text1 [6] ;
char text2 [6] ;
char text3 [6] ;
char text4 [5] ;
Solo necesitas 1, convertis el que necesitas y mostras, asi de simple.
---------------------------------
Radc no tiene sentido de ser float, si int.
----------------------------------
NUNCA pongas un delay en una interrupcion, ni tampoco funciones que tarden demasiado o innecesarias, como el floattostr().
----------------------------------
if (Button(&PORTD, 0,50, 1)) {
pid = +1 ;
if (pid ==5) {
pid = 0 ;
}
pid siempre va a ser igual a 1.
-----------------------------
Este error
No enought RAM for call stack
Es por que el PIC tiene una memoria limitada de "llamadas" a funcion, cada vez que el PIC llama a una funcion guarda su direccion, otros micros usan la RAM para esto lo cual lo unico que lo limita es la cantidad de RAM, el PIC posee un espacio propio, lo cual no permite demasiadas llamadas, Te doy un ejemplo aunque los nombres de las funciones no son reales.
Estoy en el main, del main uso Lcd_out, Lcd_out llama a Lcd_putc que pone caracter a caracter, Lcd_putc llama a otra funcion que es el envio de datos Lcd_dataout.
En este momento en el stack ese tengo las direcciones de Lcd_putc, Lcd_out y main.
Ocurre una interrupcion, ocupo otro lugar del stack.
En la interrupcion llamo a floattostr, esta funcion llama a uno que divide por 10 supongamos f_div10 , y esa llama a una que hace un BCD_to_ASCII.
Genial ahora tenemos f_div10 y floattostr en el stack ademas de lo anterior.
En un ratito y sin complicarnos tenemos ya 7 llamadas que deben ser guardadas. Y hay micros con incluso 8 lugares nomas o menos. Entonces el compilador te avisa que "no hay mas lugar" O que tenes que tener demasiado en cuenta que podes excederte, si estas MUY seguro no deberia darte problemas.