Hola, estaba pensando en implementar un "humilde" sistema operativo, por llamarlo de alguna forma, dentro del PIC que me permita configurar y realizar tareas mediante el envio de comandos a traves del puerto RS-232, sin necesidad de programar el PIC cada vez que tengo que modificar alguna variable. En la pantalla del monitor del puerto serie esto se pareceria mucho a DOS(Salvando las diferencias) ya que se manejaria por comandos especificos y luego el PIC devuelve en forma de texto las respuestas, en caso de ser necesarias.
Basicamente, el envio de texto a traves de RS232 lo hago con el archifamoso PRINTF y la recepcion de los comandos que yo envio, detectadas a traves de la interrupcion RDA, con la funcion GETS().
La cuestión radica fundamentalmente en identificar cada comando (que seria para el pic una string o matriz de char) y que el pic compare la cadena recibida con cada uno de los comandos, realizando un tarea en particular cuando me reconoce un comando válido. Estuve pensando en utilizar la función STRCMP(char *s1, char *s2) de la libreria string.h que devuelve un cero cuando reconoce que las cadenas son iguales. La cadena S1 seria el resultado de la funcion GETS() y la otra cadena S2 seria cada uno de los comandos validos.
Bueno, toda esa tediosa explicacion me trae la siguiente pregunta, ¿Como hago para guardar en el PIC todos los comandos validos? Habia pensado en crear una matriz constante de cadenas (es decir una matriz de matrices de caracteres) donde cada cadena corresponderia a cada comando. Para reconocer si una cadena recibida por RS232 es valida lo unico que tendria que hacer es crear un bucle que compare cada uno de los elementos de la matriz con la cadena recibida y cuando identifica alguna que me devuelva el indice de ese elemento en la matriz. Quiero guardar la matriz de comandos dentro de la ROM pues estos son constantes y no necesitan ser modificados. La sintaxis que uso seria:
const char Comandos[3] [len] = {
"Comando1",
"Comando2",
"Comando3"
};
donde len es la longitud del comando mas largo + 1 (el caracter null). Esto trae aparejado un codigo ineficiente, como muchos podran decirme, ya que se desperdicia memoria y ademas el CCS no soporta la utilizacion de punteros con constantes. He probado muchas modificaciones para declarar la matriz y utilizarla pero nada funciona bien. En la web no he encontrado mucho tampoco.
¿Como puedo definir una matriz de strings constantes que ocupe la menor cantidad posible de memoria y como la utilizo luego en el código? Se manejar algo de punteros pero no tanto, y creo que el tema pasa por esa cuestión por que he visto como se definen matrices de puntero y esas cosas, asi que agradezo cualquier ayuda que puedan darme. Yo ire posteando los avances que vaya haciendo por mi cuenta.
Saludos, GONZA.
Ah, Utilizo CCS C en la versión 3.249 y un uC 16F877A.