TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: electroipod en 13 de Junio de 2020, 21:40:59
-
Buen dia para todos tengo una duda y como aca estan los monstruos en programacion estoy seguro que me podran ayudar, mi problema es el siguiente:
void func(long);
int main(int argc, char** argv) {
func(5000);
return (EXIT_SUCCESS);
}
func(long frec) {
if (frec >1500)
#error "El parametro es muy grande ingrese un valor menor"
}
Entonces como puedo hacer para que me mande un error en tiempo de compilacion segun el valor de la variable frec.
Espero me puedan ayudar, muchas gracias.
-
Lo que estas buscando es crear un Static Assert:
http://www.pixelbeat.org/programming/gcc/static_assert.html
Algunos con mensajes..
https://riptutorial.com/c/example/1842/static-assertion
https://stackoverflow.com/questions/54357949/static-assert-for-c90-on-gcc
-
Lo que estas buscando es crear un Static Assert:
http://www.pixelbeat.org/programming/gcc/static_assert.html
Algunos con mensajes..
https://riptutorial.com/c/example/1842/static-assertion
https://stackoverflow.com/questions/54357949/static-assert-for-c90-on-gcc
Gracias por tu ayuda pero lo que quiero es verificar esa variable en tiempo de compilacion no en tiempo de ejecucion, habra alguna forma?, yo veo que en Mikroc c lo hace.
-
Este es el codigo hecho en MIkroc que quiero hacer hacerlo en Mplabx
unsigned short current_duty;
void InitMain() {
ANSEL = 0; // Configure AN pins as digital
PORTA = 255;
TRISA = 255; // configure PORTA pins as input
PORTB = 0; // set PORTB to 0
TRISB = 0; // designate PORTB pins as output
PWM1_Init(1); // Initialize PWM1 module at 5KHz ---------------------->Linea en donde Mikroc detecta el error
}
void main() {
InitMain();
current_duty = 128; // initial value for current_duty
PWM1_Start(); // start PWM1
PWM1_Set_Duty(current_duty); // Set current duty for PWM1
while (1) { // endless loop
if (RA0_bit) { // button on RA0 pressed
Delay_ms(40);
current_duty++; // increment current_duty
PWM1_Set_Duty(current_duty);
}
if (RA1_bit) { // button on RA1 pressed
Delay_ms(40);
current_duty--; // decrement current_duty
PWM1_Set_Duty(current_duty);
}
Delay_ms(5); // slow down change pace a little
}
}
Y este es el error que me sale cuando pongo una frecuencia muy baja
Argument is out of range PWM_SETUP.c
Argument is out of range PWM_SETUP.c
Quiero hacer lo mismo pero en Mplabx, como creen que lo hace Mikroc, muchas gracias por sus respuestas
-
Gracias por tu ayuda pero lo que quiero es verificar esa variable en tiempo de compilacion no en tiempo de ejecucion, habra alguna forma?, yo veo que en Mikroc c lo hace.
Por eso mismo, lo que te acabo de pasar es para ese momento, por eso es STATIC assert, es mas sacando un pedacito de texto apenas comienza el articulo del segundo link dice:
Static assertions are used to check if a condition is true when the code is compiled.
assert() es para el tiempo de ejecucion.
XC8 posee una directiva de pre procesamiento #assert que evalúa a 0. Es decir, si no quiero que tal valor sea 4, entonces:
#assert VALOR == 4 // Esto implica que no sea 4.
Aunque nunca la probé, y no se si es lo que estas buscando o te sirve..
Usando el mismo codigo que te pase, uno preguntando por XC8 en el foro de microchip:
https://www.microchip.com/forums/m1126290.aspx
Ya que si no se cumple lo que presentas, intenta crear un enum con un valor inicial 1/0, lo cual es imposible y por eso el error.
-
No he podido generar un error en tiempo de compilacion, ya probe las macros que me dieron pero no funcionan para los pic, buscando encontre una macro que no he podido hallar su utilidad, les dejo la pagina por si a alguien le sirve
https://microchipdeveloper.com/c:assert-your-success
Siempre me quedara la duda de como lo hicieron en Mikroc, muchas gracias por su ayuda.