Programación Específica > Microcontroladores MOTOROLA
Problemilla Con Código
infrarrojo:
Hola lalo_Soft, gracias por tu respuesta, te comento algunas cosas.
"Se hace asi:
if (tecla[0] > 25 && tecla[0] <63)
{
comando[13] = comandoOn[13];
}"
Así es como tenía el código al principio, pero me da un error al compilarlo. Te lo detallo a continuación:
Link Error : L1102: Out of allocation space in segment RAM at address 0XD6
Buscando el error, cambié ese igual por un doble igual y ya no salía ese error, así que por eso lo dejé así, pero veo que está mal hecho.
"Otra cosa, por que eliges el elemento [13] del arreglo lo que tambien te dara errores de ejecucion ya que un arreglo tipo bool xxx[13] tiene un rango de elementos que va de xxx[0]- xxx[12]"
Esto sí lo he tenido en cuenta, el código consta de doce bits, por eso pongo 13 elementos, porque debe acabar con un cero añadido, así que eso sí está bien creo.
"ademas que en el fondo cada elemento que asignas como Bool en la practica para el compilador es un byte y lo trata como tal, asi que estas gastando mas memoria ram del micro y haciendo el codigo mas pesado de lo que crees."
Aquí me has creado una duda, por lo que dices podría enumerar los bits de la trama como si fueran tipo entero y así ocuparía menos, y es posible que el error que me da ya no salga no? Es cierto que debería repasar algunos aspectos de C, porque yo aprendí a programar en otro lenguaje (fortran 90) y creía que programar en C me resultaría fácil y estoy comprobando que no lo es. Gracias de nuevo por tu respuesta, seguiré trabajando a ver si logro sacar ésto.
lalo_soft:
--- Citar ---Link Error : L1102: Out of allocation space in segment RAM at address 0XD6
--- Fin de la cita ---
esta claro que el compilador te esta avisando que estas fuera del arreglo
por lo que deverias corregi a:
if (tecla[0] > 25 && tecla[0] <63)
{
comando[12] = comandoOn[12];
}"
--- Citar ---Esto sí lo he tenido en cuenta, el código consta de doce bits, por eso pongo 13 elementos, porque debe acabar con un cero añadido, así que eso sí está bien creo.
--- Fin de la cita ---
te repito el elemento 13 de arreglo no existe (el trece que tu colocas es el tamaño total que le asignas al arreglo que se cuenta de xxx[0]--xxx[12] ahi esta los 13 elementos que le asignaste pero te repito el xxx[13] no existe) si quieres accesar el elenmento 13 tu arreglo devera ser definido como un array de 14 eJ: bool xxx[14]
--- Citar ---Aquí me has creado una duda, por lo que dices podría enumerar los bits de la trama como si fueran tipo entero y así ocuparía menos, y es posible que el error que me da ya no salga no? Es cierto que debería repasar algunos aspectos de C, porque yo aprendí a programar en otro lenguaje (fortran 90) y creía que programar en C me resultaría fácil y estoy comprobando que no lo es. Gracias de nuevo por tu respuesta, seguiré trabajando a ver si logro sacar ésto
--- Fin de la cita ---
En primer lugar, el hacer comparaciones entre lenguajes aprendidos simpre traera erroes ya que cada lenguaje hace las cosas en forma diferente.
Estando claro en eso te sugiero que si lo que pretendes es trabajar con bits estos deben ir empaquetados por la cantidad de bits que pretendes manejar con dos bytes
tendras de sobra.
infrarrojo:
"te repito el elemento 13 de arreglo no existe (el trece que tu colocas es el tamaño total que le asignas al arreglo que se cuenta de xxx[0]--xxx[12] ahi esta los 13 elementos que le asignaste pero te repito el xxx[13] no existe) si quieres accesar el elenmento 13 tu arreglo devera ser definido como un array de 14 eJ: bool xxx[14]"
Vamos a ver, no sé si yo estoy equivocado o es que estás suponiendo que el código son 13 elementos. La cadena de bits que emite el mando original son 12 elementos, así que si miras por ejemplo la trama de la tecla On es ésta:
1,0,1,0,1,0,0,1,0,0,0,0 como ves son doce, ahora, para definir comandoOn, le añado un cero porque así lo indica un manual que tengo de C++ y queda así:
bool comandoOn[13] = {1,0,1,0,1,0,0,1,0,0,0,0,0}; el último cero lo he añadido yo porque sé que el elemento 13 del arreglo no lo va a direccionar, así que ahora mismo sólo tiene en cuenta los 12 primeros que son los que forman parte de la trama. Si estoy en un error comunícamelo pero creo que está correcto, ya que la primera vez puse bool comandoOn[12]={1,0,1,0,1,0,0,1,0,0,0,0} y el último cero se lo comía, por eso le añado un cero más y queda comandoOn[13]. Saludos y gracias de nuevo por tu respuesta y tu tiempo.
lalo_soft:
--- Citar ---o es que estás suponiendo que el código son 13 elementos.
--- Fin de la cita ---
Yo no supongo nada solo me vaso en mis conocimientos de C y en los datos que tu mismo me das.
Esto seria asi
defino el arreglo al comienzo
bool comandoOn[13];
esto dara un arreglo en memoria de:
comandoOn[0] //primer miembro del arreglo
comandoOn[1]
comandoOn[2]
comandoOn[3]
comandoOn[4]
comandoOn[5]
comandoOn[6]
comandoOn[7]
comandoOn[8]
comandoOn[9]
comandoOn[10]
comandoOn[11]
comandoOn[12] //ultimo miembro
esto es un arreglo con 13 miembros y dentro de ese rango deveras moverte para accesar a los valores ahi guardados, no puede estar mas claro <_<
dicho de otra manera si tuvieras que recorrer el arreglo esto seria asi
char index;
char dato;
bool comandoOn[13];
for(index = 0;index < 13;index++)
{
dato = comandoOn[index];
}
otra forma
for(index = 0;index < sizeof(comandoOn);index++)
{
dato = comandoOn[index];
}
infrarrojo:
Entonces, tal y como lo tenía, si pongo comando[12] = comandoOn[12]; que me está copiando en la variable comando un sólo bit de toda la trama? Si eso es cierto, entonces que debo hacer, accesar todos los valores de la trama y luego pasarlos a la variable comando? ¿No hay una forma más simple de pasar todos los bits? Gracias de nuevo por tu respuesta me he dado cuenta de que tenía un grave error de concepto.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa