Autor Tema: DUDA: PROBLEMA CON FRECUENCIMETRO  (Leído 4078 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:DUDA: PROBLEMA CON FRECUENCIMETRO
« Respuesta #15 en: 15 de Mayo de 2022, 17:44:49 »
....
Si ésto es como dices. Entonces depende del tipo de compilador.

Por supuesto, además del tipo de compilador, del nivel de optimización seleccionado.

Por ejemplo, en un código como éste:
Código: [Seleccionar]
char testeo(void) {
char  t    ;
char  x=5  ;
char  y    ;

    y=2*5+1 ;
   
    t=x ;
    x=y*y+4 ;
    y=t ;

    return x;
}             

void main(void){
    testeo() ;
    while(1);
}


Ahí CCS solo te toca la línea con y=2*5+1 ;  ,  donde optimiza  asignando directamente 11 a y.

Pero como se puede ver, hay mucho código inútil, asignaciones que se pierden por ser variables locales y un valor de retorno no se usa.   
Eso compilado con gcc para AVR te elimina casi todo (activando las optimizaciones por supuesto).   En la función elimina todo y devuelve 125 y en main ni siquiera llama la función.

Este es nada mas un ejemplo, porque la utilidad real de reemplazarte una operación es que se vea de donde sale el número y el cálculo te lo haga el compilador.

« Última modificación: 15 de Mayo de 2022, 17:50:11 por Eduardo2 »

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:DUDA: PROBLEMA CON FRECUENCIMETRO
« Respuesta #16 en: 15 de Mayo de 2022, 22:41:50 »
Gracias por eso dato Eduardo, realmente NO lo sabía.

Desconectado RedOni12

  • PIC10
  • *
  • Mensajes: 6
Re:DUDA: PROBLEMA CON FRECUENCIMETRO
« Respuesta #17 en: 18 de Mayo de 2022, 02:48:53 »
T=4*8.0/20000000.0
Ésta línea debería calcularse sólo una vez. Ya que desperdicias mucho tiempo en cálculo! Considerando que es un número float.
Por lo que veo, T no cambia de valor durante todo el proceso.
Lo puedes declarar como constante.

No creo que esté calculando ha cada instante esa línea de código el procesador, un buen compilador , y me imagino que si lo es el CCS, convierte esa línea en una constante.


Lo que si se puede ver que esa forma de programar el código está algo, digamos desordenada.

Respecto al problema que tiene, me inclino a pensar que está mal configurado la frecuencia de sistema (que es función del cristal o el oscilador interno) y en el simulador toma por defecto otro valor. Por eso ahí le funciona.

Cordial saludo
Efectivamente, sospecho que de alguna manera no está trabajando a la frecuencia indicada :/ pero no sé como comprobarlo
Saludos.

 Pon un while con dos delay que cambien de estado un puerto y lo miras con el osciloscopio.  Ya sabras con eso si el oscilador es o no correcto.
Cordial saludo, efectivamente realicé el montaje con el pic16f877A y funciona correctamente el código, realizaré las verificaciones como mencionas a ver como está trabajando el PIC18F4550


 

anything