Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos.
Tenia una duda, detras de otra jej, y es que estoy aprendiendo C leyendo un libro, y a veces no me cuadra lo que pone. Aparece este codigo para configurar el reloj:
CLKPR = (1<<CLKPCE) ; // set clock preescaler change enable
// set preescaler = 8, internal RC 8Mhz/ 8 = 1 Mhz
CLKPR = (1<<CLKPS1) | (1<<CLKPS0) ;
No deberia ser la 2º expresion CLKPR |= ... ó CLKPR = CLKPR | ((1<<CLKPS1) | (1<<CLKPS0)) ; ??
porque si no, no se guardaria lo de la primera expresion no?
no se si se llama "expresion" a eso, es libro es en inglis y las paso putillas para entenderlo 😕
y ya puestos, no hay algun sitio donde vengan los ciclos que tarda cada instruccion?
por ejemplo si puedes usar una instruccion switch o una if, else if.. luego compiladas una queda mas larga que otra?
lo mismo con los operandos, por ej. una resta (x - y) es mas rapido para un micro cambiarla por esto (x & ~y)
bueno 1 saludo!
si, en esa pagina viene jejej.
akita muy buena tu aclaracion 😉
saludos
si, en esa pagina viene jejej.
Ok
Según este enlace: http://www.smileymicros.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=54 " onclick="window.open(this.href);return false; dice que en la página 123 la versión correcta es while ( !(TIFR2) & (1<<OCF2A)) );
aunque creo que le falta un paréntesis while ( !((TIFR2) & (1<<OCF2A)) );
tal y como puedes ver en estos enlaces:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=57183 " onclick="window.open(this.href);return false;
http://b3r1.googlecode.com/svn-history/r2/trunk/bbot_util.c " onclick="window.open(this.href);return false;
http://avr.15.forumer.com/a/the-incredible-shrinking-osccal-routine_post17-30.html " onclick="window.open(this.href);return false;
http://lists.gnu.org/archive/html/avr-gcc-list/2007-09/msg00070.html " onclick="window.open(this.href);return false;
Si te fijas en este otro enlace http://www.icqoso.com/data-OCF2A.html " onclick="window.open(this.href);return false; verás que OCF2A es un #define con un valor 1, por tanto al final el compilador traduce a while ( !(TIFR2 & 2) );
o lo que es lo mismo, no salgas del bucle while mientras que el segundo bit del registro TIFR2 sea 0.
ok, esa ultima es entonces parecida a lo que aparece en la pagina 143:
if (PORTD &= 1) ... lo mismo para el bit0, aunque nose porque pone el =
gracias por los links, habra que ir mirando ese de smileymicros
hay otra cosa que no me cuadra en otro programa: (empiezo a sentirme pesado jj)int parse_set (char s[] ) // recibe la cadena "Setxxx"
{ // xxx es cualquier numero de 0 a 256
char set[11];
unsigned char i=3, j=0;
while ( (s != '') && ( j<=11 ) )
{
if ( (s >= '0') && (s <= '9') )
{
set[j++] = s[i++]; //mientras sean numeros copia la cadena
}
else
{
...
return 0;
}
}
set[j] = ''; // aqui entiendo que si el tercer numero se guarda en set[2]
// el '' se guarda en set[3] , no??
if (j>4) // must be < 256
{
...manda señal de error
return 0;
}
else
...
if (j>4) no deberia ser (j>=4) ó (j>3) ?
ok, esa ultima es entonces parecida a lo que aparece en la pagina 143:
if (PORTD &= 1) ... lo mismo para el bit0, aunque nose porque pone el =
Deja todos los bits de PORTD a 0 excepto el primero que respeta su valor, entonces dependiendo si al final PORTD es distinto de 0 o no entrará en el if o no.
int parse_set (char s[] ) // recibe la cadena "Setxxx"
{ // xxx es cualquier numero de 0 a 256
char set[11];
unsigned char i=3, j=0;
while ( (s != '') && ( j<=11 ) )
{
if ( (s >= '0') && (s <= '9') )
{
set[j++] = s[i++]; //mientras sean numeros copia la cadena
}
else
{
...
return 0;
}
}
set[j] = ''; // aqui entiendo que si el tercer numero se guarda en set[2]
// el '' se guarda en set[3] , no??
if (j>4) // must be < 256
{
...manda señal de error
return 0;
}
else
...
if (j>4) no deberia ser (j>=4) ó (j>3) ?
Con respecto a '', efectivamente, cuando sale del bucle while j tiene un incremento más que cuando se metió el último número.
Y como bien dices el if debería ser (j > 3)
gracias por la ayuda sistemasorp!
ahora a practicar un poco con lo aprendido que si no aprendo lo nuevo y se me olvida lo anterior 😆