Que tal amigos de forosdeelectronica. Hoy les traigo un asunto que me tiene bastante alterado, ya que he intentado de todas las formas posibles de entender lo que sucede (o para que sirve) esta funcion de un programa escrito en C++ para un microcontrolador PIC. Necesitaría su ayuda para traducirlo aunque sea en forma de algoritmo escrito (nose si me explico).
Se que la funcion evalua lo que hay almacenado en SMCBUF[0] (que creo que es un byte), lo que no se es que es lo que evalua.... . Que se obtiene como salida en al funcion?
Hay un comentario : out 0=OK 1,2,3=Error. Por lo que entiendo, dice que de la funcion sale la variable mask como resultado, y esta puede ser 0, 1, 2 o 3. De todos modos no entiendo como obtiene esto la funcion
.
Como datos les puedo indicar que en SMCBUF[0] solo pueden variar los bits 0, 1 y 2, y que los 5 restantes bits se mantienen siempre en 0 (osea: %00000XXX). Me gustaria saber como queda SMCBUF[0] en los puntos donde puse *?* (eso se los agregue yo, no estaban en el programa original).
En resumen, les estaría muy agradecido si pueden ayudarme a entender esta funcion, ya que mi meta es poder escribirla en Basic (el cual domino mucho mejor q C).
Saludos.
Código:
/********** INT-RAM WORKING AREA **********/
unsigned char SMCBUF[8];
/********** BASIC FUNCTION **********/
unsigned char smcver (unsigned char p1,p2,p3) {
unsigned char mask,i; // out 0=OK 1,2,3=Error
mask = 1;
SMCBUF[0] = //Aca depende de lo que se quiera almacenar en SMCBUF[0],este comment se lo agregue yo
if (SMCBUF[0]>0) {
for (i=0;i<=2;i++) {
if (SMCBUF[0] & mask) break;
mask <<= 1;
}
SMCBUF[0] ^= mask; *?*
}
mask = 0;
for (i=0;i<=2;i++) {
if ((SMCBUF[0] & 0x01)==0) mask++;
SMCBUF[0] >>= 1;
}
return (mask); *?*
}
Se que la funcion evalua lo que hay almacenado en SMCBUF[0] (que creo que es un byte), lo que no se es que es lo que evalua.... . Que se obtiene como salida en al funcion?
Hay un comentario : out 0=OK 1,2,3=Error. Por lo que entiendo, dice que de la funcion sale la variable mask como resultado, y esta puede ser 0, 1, 2 o 3. De todos modos no entiendo como obtiene esto la funcion
Como datos les puedo indicar que en SMCBUF[0] solo pueden variar los bits 0, 1 y 2, y que los 5 restantes bits se mantienen siempre en 0 (osea: %00000XXX). Me gustaria saber como queda SMCBUF[0] en los puntos donde puse *?* (eso se los agregue yo, no estaban en el programa original).
En resumen, les estaría muy agradecido si pueden ayudarme a entender esta funcion, ya que mi meta es poder escribirla en Basic (el cual domino mucho mejor q C).
Saludos.