TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juanez en 04 de Mayo de 2008, 16:10:21
-
Hola, ¿se puede crear en ccs una variable de texto?
Algo asi como a[1]="Hola"
a[2]="Adios"
Lo unico que consigo hasta ahora es que el lcd muestre la primera letra.
Saludos
-
Hola, no existe el tipo de variable string en CCS, lo que debes hacer es definir el texto a guardar como una matriz de caracteres o tipo de datos char. Un ejemplo:
char A[5]={"Hola"};
donde el tamaño de la matriz es igual al numero de caracteres +1 (porque hay que incluir el caracter de fin de linea "\0") Si quieres hacer una matriz de texto entonces deberás hacer crear una matriz de varias dimensiones N x M donde N es el numero de cadenas de texto y M el numero de caracteres +1 de la cadena mas larga. Por ejemplo:
char A[3][10]= {
"Hola",
"Adios",
"Nos vemos",
};
Como cualquiera podra suponer esto genera un enorme desperdicio porque generalmente no todas las cadenas tienen la misma longitud y quedan bit sin utilizar. Si uno tiene que almacenar mucho texto una matriz de estas puede llenarte la memoria en poco tiempo. Hay un metodo alternativo que es crear una matriz de punteros que indican matrices de caracteres, de esa forma puede crear una matriz de elementos de tamaño variable, pero su aplicación tiene limitaciones en CCS, sobre todo cuando quieres almacenarlas en la ROM como constantes, y hasta donde sabia solo las versiones nuevas soportan este tipo de código. Tal vez alguien mas informado te pueda ayudar un poco mejor en esta ultima alternativa.
Un saludo.
-
Puedes plantearlo asi:
char* A[5];
A[1]=(char*)malloc(3*sizeof(char));
A[2]=(char*)malloc(5*sizeof(char));
...
*A[1]="ALO";
*A[2]="MICRO";
La asignacion *A[1]="ALO"; no se si funciona del todo, pero siempre puedes hacer strcpy("ALO",&A[1]);
-
juanez, el indice del arreglo se refiere a cuantos lugares de memoria vas a reservar. Si queres mostrar un "hola" tenes q reservar 5 lugares... uno por cada letra, mas un "caracter nulo" q indica el final de la cadena. Por ej:
char[5]="hola"
si vas a declarar la variable al mismo tiempo q la inicializas, podes no indicar el tamaño de la misma, por ej:
char[]="hola, como te va?"
en este caso, el compilador solo se encarga de calcular el tamaño de la variable.
Te recomiendo leer un poco sobre arreglos en C, ya que una cadena no es mas q un arreglo de caracteres ;)
-
manex, has probado utilizar tu codigo con cadenas almacenadas en la ROM?, se que CCS no puede lidiar muy bien con los punteros de constantes, porque las trata como funciones, para las matrices de caracteres solo te deja hacer algunas cosas como utilizarlas en la funcion strcpy o printf. Segun dicen las nuevas versiones los punteros a constantes son soportados pero yo habia probado con la 4.057 y no te deja pasarlos.
Una lastima, es una de las unicas cosas que le envidio a Hitech.
Un saludo.