Autor Tema: La pregunta tonta de la tarde (ciclo de instruccion)  (Leído 2846 veces)

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

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
La pregunta tonta de la tarde (ciclo de instruccion)
« en: 31 de Enero de 2019, 13:40:41 »
Trabajando con un pic a 64 Mhz se supone que tenemos una frecuencia de instruccion de 16Mhz, esto es, que el micro puede ejecutar 16 millones de instrucciones por segundo.

  Si yo escribo un valor en un registro de un puerto, por ejemplo, pongo el valor 170 en el puerto B y el puerto B quedará en 10101010.  ¿ Ese proceso demora 2 ciclos de instrucción?.

  ¿ Significa eso que en un micro a 64 Mhz yo podría sacar 16 millones de bytes por segundo por el puerto B ??

  La prueba la hecho en C, y claro, sé que esto mejor en assembler, pero en C haciendo:

Código: C
  1. while(1) {
  2.               output_b(0b10101010);
  3.               output_b(0b01010101);
  4.               output_b(0b10101010);
  5.               output_b(0b01010101);
  6.  
  7. }

 Lo he puesto 4 veces seguidas para ver los tiempos entre cambios de estados de función a función sin tener en cuenta que el while en si ocupa otros dos ciclos por lo menos.
 
   Esto visto en el osciloscopio me da 8 millones de cambios de estado por segundo y no los 16 que esperaba.

  ¿ es correcto?, Algo se me escapa.

« Última modificación: 31 de Enero de 2019, 13:43:07 por remi04 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:La pregunta tonta de la tarde (ciclo de instruccion)
« Respuesta #1 en: 31 de Enero de 2019, 14:20:23 »

Citar
Trabajando con un pic a 64 Mhz se supone que tenemos una frecuencia de instruccion de 16Mhz

Si tenes un PIC que tiene una frec. instruccion de Fosc/4, si tenes 16Mhz en frecuencia de instruccion como decis... Y Si ocupa solo 1 instruccion, quiere decir que tu pin estara alternando y cambiando en un frecuencia de 8Mhz (Recorda que la "frecuencia" que vas a medir es el pulso alto y el bajo), y si serian 16 MBps, pero es un caso muy particular este.... Ya que solo requiere 1 sola instruccion ( complemento) y se supone que llenas la ROM completa con lo mismo...

Si luego de esto consideras el salto que son 2 ciclos de instruccion mas te das cuenta que se vuelve un poco menos real, y si consideras un valor un poco mas complejo ya deja de ser 1 instruccion a 2 minimo o mas...

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:La pregunta tonta de la tarde (ciclo de instruccion)
« Respuesta #2 en: 31 de Enero de 2019, 14:21:26 »
....
   Esto visto en el osciloscopio me da 8 millones de cambios de estado por segundo y no los 16 que esperaba.

  ¿ es correcto?, Algo se me escapa.

100% correcto.   Se te escapa que el hecho que en C sea una instrucción, en Assembler no tiene por qué y en general no lo es.

En CCS   output_b(xx)   se compila como dos instrucciones    MOVLW  xx ;  MOVWF  06

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:La pregunta tonta de la tarde (ciclo de instruccion)
« Respuesta #3 en: 31 de Enero de 2019, 15:36:00 »
Perfecto, pues dudas resueltas.

 Es que tengo un display de 800 x 480 pixeles y quería saber cuantos frames por segundo es capaz de enviar un micro de estos. En este display cada pixel necesita 3 bytes, uno para el rojo, otro para el azul y otro para el verde y se envían de forma secuencial.

  Había calculado 800 x 480 x 3 = 1.152.000, como el micro puede enviar 8 millones de bytes por segundo dividiendo me sale casi 7 frames por segundo.

  Pero claro o le meto los datos en la rom así, una a una o hago un array con todos los valores y luego los paso con un ciclo for (No hay memoria para eso pero imaginar que la hubiese). Aunque con el for supongo que va a dar mucho menos, por que va a enviar 1 dato (2 instrucciones) y luego consume otra para evaluar el for, luego otro dato, y así sucesivamente... 

  Esto del display es por experimentar. Está claro que el display mejor meter las imágenes y los objetos en su propia flash que para eso la tiene y trabajar mediante comandos. Pero quería saber cuanto de rápido sería el micro capaz de escribir una imagen completa en display.

  Saludos,.
« Última modificación: 31 de Enero de 2019, 15:40:07 por remi04 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:La pregunta tonta de la tarde (ciclo de instruccion)
« Respuesta #4 en: 31 de Enero de 2019, 15:56:27 »
Eso si vas a reproducir algo... sino pensa que en 140ms aprox tendrias actualizado TODA la pantalla con lo que modifiques...

Ademas estamos suponiendo que actualizas TODA la pantalla, lo cual lo único que haces es actualizar solo una parte de la misma. Si tenes el overhead de las posiciones de memoria, pero se hace mucho mas rapido :P


 

anything