Página 1 de 1

Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 12 Feb 2010, 13:21
por gokuhs
Hola a todos, os comento.

Haciendo pruebas ayer mismo me tome con un problema que me daba un homebrew que había creado hace ya bastante tiempo y no me había dado por probarlo en el 5.50 GEN D3.

El caso que el programa se ejecuta bien, asta que me dio por mirar una animación cutre que tenia echa pero que para que no se viera lenta ajustaba el clock de la CPU a 333Mhz, y luego volvía a 222Mhz. El caso que descubro que de repente se veía lento. Me pongo a retocar un poco el código dejándolo de la siguiente manera:

Código: Seleccionar todo

if (scePowerSetClockFrequency(333, 266,111) != 0)
printf("Error al establecer el clock");
if(scePowerGetCpuClockFrequency() < 333)
printf("La velocidad del Clock no esta a 333Mhz");


Lo raro en todo esto que el primer error no salta (por lo que se supone que scePowerSetClockFrequency ha devuelto 0 y no ha habido errores) pero el segundo mensaje al comprobar a que velocidad de proceso va, si salta, por lo que no está a la velocidad que buscaba.

¿alguien sabe por qué puede ser?

Gracias

Re: Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 12 Feb 2010, 22:09
por soulless
Por que no simplemente imprimes la velocidad del procesador??? puede ser que la velocidad no se ponga exactamente a 333 sino que la funcion la deja en un numero aproximado, recuerda que 332 < 333 y si suponemos que podria quedar en un numero aproximado pues aun asi te saltaria el mensaje de que no esta a 333. Esto lo digo porque recuerdo que antes probe poniendo el procesador en velocidades mas bajas y nunca se ponia exactamente en la velocidad que yo queria, por ejemplo yo intentaba ponerlo a 120 Mhz, pero se ponia en 118 Mhz o 119 Mhz.

Re: Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 17 Feb 2010, 14:15
por m0skit0
Eso depende del multiplicador que se aplique a la frecuencia del reloj que alimenta la CPU.

Re: Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 18 Feb 2010, 12:46
por gokuhs
Perdonad, no me había olvidado no he tenido bastante tiempo libre para hacer pruebas.

Os cuento, hice lo que me recomendaste soulless, comprobé la velocidad a la que se ponía la consola y comprobé que se ponía a 265Mhz, en vez de lo que yo quería.

m0skit0 lamento decirte que no he entendido lo que me has querido decir con lo del multiplicador. Me lo podrías explicar??

Gracias :oki:

Re: Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 18 Feb 2010, 13:03
por m0skit0
gokuhs escribió:m0skit0 lamento decirte que no he entendido lo que me has querido decir con lo del multiplicador. Me lo podrías explicar??

La CPU tiene una entrada llamada entrada de reloj (CLK), que ese la que le da el pulso a la CPU, y con eso la CPU trabaja: a cada impulso de reloj, la CPU realiza un ciclo -que no es lo mismo que ejecutar una instrucción, ya que para una instrucción son necesarios generalmente varios ciclos-. Generalmente el reloj es un cristal de cuarzo que vibra a una determinada frecuencia. Sin embargo, hacer que el cristal cambie su frecuencia es un proceso costoso en batería y además peligra la integridad del cuarzo. Por tanto, la solución más práctica es utilizar un multiplicador (o un divisor), que es simplemente un circuito que multiplica (o divide) por N la frecuencia que sale del reloj. Por tanto la frecuencia que se aplica a la CPU no puede ser cualquier número, sino simplemente un múltiplo (o fracción) de la frecuencia del cristal de cuarzo. Y scePowerSetClockFrequency() precisamente configura este circuito multiplicador.

En todo caso, tu problema no radica ahí, porque la diferencia es muy grande entre 333 y 265. Simplemente radica en que estás usando mal la función scePowerSetClockFrequency(). Según la documentación del PSPSDK:

Código: Seleccionar todo

int scePowerSetClockFrequency (   int pllfreq, int cpufreq, int   busfreq)          

Set Clock Frequencies.

Parameters:
       pllfreq    - pll frequency, valid from 19-333
       cpufreq    - cpu frequency, valid from 1-333
       busfreq    - bus frequency, valid from 1-167

and:

cpufreq <= pllfreq busfreq*2 <= pllfreq

Por tanto, la frecuencia de CPU se debe asignar al SEGUNDO parámetro, no al primero. Ojo con cpufreq <= pllfreq y busfreq*2 <= pllfreq.

Un saludo, ya me cuentas qué tal

PD: para más información acerca de los cristales de cuarzo como generadores de frecuencia: http://en.wikipedia.org/wiki/Quartz_clock

Re: Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 18 Feb 2010, 20:19
por gokuhs
Gracias m0skit0, valla metedura de pata, tenias razón es precisamente por haber confundido los parámetros, simplemente he utilizado scePowerSetClockFrequency(333, 333,167); y listo. Madre mía que fallo mas Noob :? :oops:

En fin tendré mas en cuenta la documentación a la hora de leerla para próximas veces.

Muy buena la explicación de cómo funciona el reloj interno de la CPU, es muy curioso y ahora me leeré el artículo de la Wikipedia que me pones.

Gracias de nuevo por la ayuda, podéis cerrar el Hilo ;)

Re: Cambio de la velocidad del Clock en 5.50 GEN-D3

Publicado: 19 Feb 2010, 05:29
por m0skit0
No te preocupes, eso nos pasa a todos :mrgreen: