Autor Tema: Pasar Constante String por parametro CCS  (Leído 13751 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar Constante String por parametro CCS
« Respuesta #15 en: 25 de Enero de 2008, 12:45:39 »
pense en declarar una estructura, o quiza enumeracion de mensajes para mostrar en pantalla, y luego segun un indice, pasarlos por parametro

Bueno, lo que te comento de C es también para PC.  De todas formas en C es simple hacer un arreglo y luego pasarlo por referencia.  Es cierto, programar para micros grandes y/o PC puede generar ciertas costumbres que son perjudiciales para un microcontrolador.  De la misma forma hacer códigos que ejecuten rápido en un microcontrolador puede llevarte a hacer cosas que en una pc no harías como por ejemplo evitar el uso de variables locales.  Las variables locales (si no son estáticas) generan trabajo de stack con la consecuente importante pérdida de velocidad. 

Pero para no irnos por las ramas, sii es un string que será fijo, se declara como una constante en rom y la envías también como parámetro por referencia y en la rutina lo procesas hasta encontrar un #0.

En el caso de los vectores debes indicarle cuantos caracteres procesar, algo así como


void mirutina(char * mibuffer, unsigned char count)


Donde count indicará precisamente cuantos datos se procesaran y/o enviarán por la usart , lcd o lo que estés usando.  Esto es ya que en un vector está permitido que haya un #0 en cambio en el string es el fin de la cadena, de allí la diferencia.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Pasar Constante String por parametro CCS
« Respuesta #16 en: 25 de Enero de 2008, 12:57:57 »
tal cual, uno de mis problemas es que, el pic no permite que para lo que tu definiste


void mirutina(char * mibuffer, unsigned char count)


el utilizarlo en algo asi como:
Código: [Seleccionar]
<otros comandos>;
mirutina("Prueba1",sizeof("Prueba 1"));
<otros comandos>;

pues yo deseo generar unos #includes en los cuales, un tercer usuario, los incluya en su main, y con algunas definiciones mas que él tenga que hacer, utilizando funciones y procedimientos que yo generé, realice su propio programa, sin tener que meterse en las profundidades de la comunicacion y otros

es decir, quiero crear "cajas negras" o "built in"s que deje para que un programador solo  dé unos parametros y realice todo el resto de cosas...  tal como yo hago en los puntos de venta....

¡Que problemita con el stack!  debe haber una manera...  por ahora hago pruebas con un PIC 16F877A pero se qe en algun momento me tengo que cambiar a uno con mas capacidad, como un 18F4550 o algo asi


Gracias por los excelentes consejos...
saludos!!!
« Última modificación: 25 de Enero de 2008, 13:02:33 por Dancrazy »
Daniel 
Caracas, Venezuela 

-----------------

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar Constante String por parametro CCS
« Respuesta #17 en: 25 de Enero de 2008, 13:32:40 »
Dancrazy la verdad no uso CCS pero en C18 por ejemplo puedes hacer esto


const rom char mystr[] = "hola mundo";


void mifuncion(const rom char *data)
{
// Tu codigo acá
// trabajarás con *data hasta que sea igual a 0
}


Un esquema así no te sirve?

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Pasar Constante String por parametro CCS
« Respuesta #18 en: 25 de Enero de 2008, 14:02:14 »
ajá

C18, es HI-TECH? si, alguien me  presto el HI-TECH V8
(la licencia cuesta caro ¿no?  tengo que estar muy seguro para comprarlo :mrgreen:)

es menos automático y quizas algo mas parecido a ANSI C puro, pero no trae los procedimientos getch y putch para RS232 pre-contruidos...  hice unos que encontre en una carpeta "\samples\serial\bitbanging" y tuve algunos problemas,

dado la premura que tengo, regrese al CCS que es mas automatico...

pero ahora que me habeis guiado por los caminos de la sabiduria y me indicaron que el problema puede ser el stack, puedo tratar de dilucidar como arreglarlo... tengo el fin de semana

sé que en CCS existe algo como
#device PASS_STRINGS=IN_RAM
#device ANSI
voy a investigar cómo se hace...

y cuando termine este proyecto, voy a hacer (con ayuda de ustedes, gracias!!!) un auto-curso de HI-TECH y de Pic Basic para tener varias visiones de cómo programar un PIC. Te vas a reir de mi, pero no se programarlo en Asembler, lo unico que programé en asembler fue un Intel 8051, y no quede con mas ganas de volverlo a hacer..

si logro sacar algo en claro, les cuento para que no le vaya a pasar a otro....
sospecho que el strcpy() y el memcpy() puede tener algo que ver

veremos

de verdad gracias por todas las ideas...
Daniel 
Caracas, Venezuela 

-----------------

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar Constante String por parametro CCS
« Respuesta #19 en: 25 de Enero de 2008, 14:23:28 »
ajá

C18, es HI-TECH? si, alguien me  presto el HI-TECH V8
(la licencia cuesta caro ¿no?  tengo que estar muy seguro para comprarlo :mrgreen:)
C18 es de microchip (solo para la familia 18F y es gratuito en su versión estudiante). 
El de Hi-tech es el PICC.  Ya está por la version 9.6x para los 16F.
Cuesta unos 1000 dolares por familia, lo cual lo hace caro pero a mi modo de verlo es bastante mejor que el CCS incluso mejor que el C18 en algunos aspectos.


es menos automático y quizas algo mas parecido a ANSI C puro, pero no trae los procedimientos getch y putch para RS232 pre-contruidos...  hice unos que encontre en una carpeta "\samples\serial\bitbanging" y tuve algunos problemas,
Si, es bastante menos automático, lo cual a mi hace que me guste el C18 y el Hitech y "no me guste" el CCS.  Pero sobre gustos... :)


y cuando termine este proyecto, voy a hacer (con ayuda de ustedes, gracias!!!) un auto-curso de HI-TECH y de Pic Basic para tener varias visiones de cómo programar un PIC. Te vas a reir de mi, pero no se programarlo en Asembler, lo unico que programé en asembler fue un Intel 8051, y no quede con mas ganas de volverlo a hacer..
Nadie se te va a reír porque no hayas programado en assembly.  Es útil saberlo pero no obligación.  Lo más importante es que conozcas bien la arquitectura y cómo funciona el pic, el assembly ayuda a conocer bien eso.

si logro sacar algo en claro, les cuento para que no le vaya a pasar a otro....
sospecho que el strcpy() y el memcpy() puede tener algo que ver
Fíjate si tienes alguna función que copie de ROM a RAM, eso te ayudaría a guardar tus strings en rom y luego usarlas en la ram para trabajar con ellas si es necesario

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Pasar Constante String por parametro CCS
« Respuesta #20 en: 25 de Enero de 2008, 14:32:50 »
ah, C18... ups... no sabia que era de Microchip
bueno, lo voy a buscar a ver
tengo el MPLAB, seguro se integra automaticamente

en cuanto a los gustos, lo entiendo perfectamente, de hecho en otro hilo de este foro, hablabamos de las "Cajas Negras" (y alguien me indico que se llamaban "built in") que son los codigos que hacen todo automaticamente.... y de como pueden jugarle malas pasadas a uno...

 voy a seguir explorando esos otros compiladores.... siempre es bueno saber mas de uno.

y Dios!!!  si es caro el PICC HI-TECH... pero como tu dices, si te va a resolver los problemas, vale la pena

gracias por todo
Daniel 
Caracas, Venezuela 

-----------------

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar Constante String por parametro CCS
« Respuesta #21 en: 25 de Enero de 2008, 17:40:03 »
ah, C18... ups... no sabia que era de Microchip
bueno, lo voy a buscar a ver
tengo el MPLAB, seguro se integra automaticamente
Así es, pero te repito es solo para la familia 18F.


en cuanto a los gustos, lo entiendo perfectamente, de hecho en otro hilo de este foro, hablabamos de las "Cajas Negras" (y alguien me indico que se llamaban "built in") que son los codigos que hacen todo automaticamente.... y de como pueden jugarle malas pasadas a uno...
Seguro que si... no tengas duda de eso.

voy a seguir explorando esos otros compiladores.... siempre es bueno saber mas de uno.
Si quieres alguna alternativa libre tienes el SDCC.  http://sdcc.sourceforge.net/

y Dios!!!  si es caro el PICC HI-TECH... pero como tu dices, si te va a resolver los problemas, vale la pena

Según varios, es caro pero el mejor.   :mrgreen:
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: Pasar Constante String por parametro CCS
« Respuesta #22 en: 26 de Enero de 2008, 06:54:13 »
No se como vas a usar los strings , pero si los diriges a rs23,lcd etc. una forma elegante podria ser asi .

Código: [Seleccionar]

#define string(x) printf(chr,x);

void chr(char ch){
  // <procesa un caracter>
}

void main(void){
string("hola amigo");

}


PD: otro ejemplo

Código: [Seleccionar]

#define string( linea , columna , texto) { procesa_posicion( linea , columna ); printf( chr , texto ); }

void procesa_posicion(int8 lin , int8 col){
// <procesa posicion>
}

void chr(char ch){
  // <procesa caracter>
}


void main(void){
string( 4 , 0 , "hola amigo" );
}


« Última modificación: 26 de Enero de 2008, 07:10:20 por Sispic »

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pasar Constante String por parametro CCS
« Respuesta #23 en: 17 de Febrero de 2010, 18:45:24 »
No se supone que desde la version 4.1xx del CCS ya se podria hacer punteros a constantes ???  =/