TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: dogflu66 en 16 de Enero de 2012, 08:08:11

Título: Listas en Ccs y consultas varias.
Publicado por: dogflu66 en 16 de Enero de 2012, 08:08:11
No he encontrado librerías estándar para trabajar con listas.
Quisiera que me confirmaran que no existen.
Título: Re: LISTAS EN C
Publicado por: stk500 en 16 de Enero de 2012, 09:50:58
Te refiere a esta? http://www.ccsinfo.com/devices.php?page=exlist
 ;-)
Título: Re: LISTAS EN C
Publicado por: fabianjsm en 16 de Enero de 2012, 10:42:47
Hola dogflu66. Si te refieres específicamente al ANSI C, K&R especifica que no posee ningún tipo de dato contenedor, ni los más básicos como listas, pilas, colas. Hay librerías escritas en C estándar para trabajar con ellas, pero en la librería estándar tal vez lo mas próximo este en string.h.

Estimado stk500, le pasaste un enlace a una 'lista de ejemplos', no un 'ejemplo de lista'  :lol:
Título: Re: LISTAS EN C
Publicado por: dogflu66 en 16 de Enero de 2012, 11:46:31
Esa es la librería estándar para trabajar con cadenas (string) y yo lo que necesito es trabajar con vectores de cadenas o listas, ósea, un vector que contiene múltiples string completos (nodos), ojo no confundir con concatenación o suma de cadenas. Bueno, no hay problema, ya tengo las librerías escritas para otro lenguaje, es tan solo adaptarlas al nuevo. Lo que ocurre es que siempre me gusta trabajar en el estándar si es posible. Gracias.
Título: Re: LISTAS EN C
Publicado por: MerLiNz en 16 de Enero de 2012, 14:55:42
Si, yo tambien echo de menos las listas del C++, pero para un pic consumiria demasiados recursos, tanto de ram como rom
Título: Re: LISTAS EN C
Publicado por: fabianjsm en 17 de Enero de 2012, 08:30:20
Hola dogflu66. No te sugerí string.h para trabajar con listas, perdón si se entendió eso.
Lo que quise decir es que la librería nativa del ANSI C (libc) no brinda soporte para listas, pero hay muchas librerías (de terceros) escritas en C estándar para trabajar con ellas.
Por ejemplo SimCList; es una libreria para trabajar con listas enlazadas bien documentada, estable y ANSI C (mij.oltrelinux.com/devel/simclist). Es muy pequeña y fácil modificarla para que se adapte a tus necesidades. Necesitas para trabajar con PIC's o una aplicación para PC?
Título: Re: LISTAS EN C
Publicado por: dogflu66 en 17 de Enero de 2012, 19:22:32
No hay nada que perdonar.
Es para trabajar con Pic.
Totalmente de acuerdo trabajar con funciones para operar con cadenas y listas consume gran cantidad de ambas memorias, pero la comodidad que ofrecen es magnifica, todo está en poder elegir el microcontrolador adecuado.
Título: Re: LISTAS EN C
Publicado por: MerLiNz en 17 de Enero de 2012, 21:11:36
El problema seria que el mismo compilador no lo soporta, el compilador no soporta ningun operador de c++ (ya probe algun comando por si las moscas pero no lo reconoce), es decir si quisieras hacer un if(string1==string2) no lo podrias hacer ya que el mismo compilador no te admitiria crear una clase con operando '==', o el tipico string1=string2 + "hola" + string3; tampoco admitiria el operador '+'. Asi como todas las funciones del C++, sin embargo muchas otras cosas como string->push("lista"); o cosas asi si podrias hacerlo creando tu propia libreria o buscando alguna que ya la tenga, pero no mas alla de eso.
Título: Re: LISTAS EN C
Publicado por: dogflu66 en 19 de Enero de 2012, 09:31:07
Ok, ire probando a ver que sale. :)
Título: Re: LISTAS EN C
Publicado por: dogflu66 en 29 de Febrero de 2012, 21:21:23
La siguiente expresión es compilada en CCS sin errrores, pero no me funciona:

If (receive == "+") { .... }

Para que funcione hay que colocar directamente el valor del código ASCII:

If (receive == 43) { ... }

No tiene mucha importancia, mas bien aclaratoria. Solo quería saber si solo en CCS es donde no funciona.
Título: Re: LISTAS EN C
Publicado por: Suky en 29 de Febrero de 2012, 22:15:02
Debe ser '+'. Sino es un string
Título: Re: LISTAS EN C
Publicado por: Nocturno en 01 de Marzo de 2012, 01:52:39
¡Hombre, Don Carlos!, me alegro que hayas decidido dar el salto al lado oscuro del C desde el Basic. Un abrazo
Título: Re: LISTAS EN C
Publicado por: dogflu66 en 01 de Marzo de 2012, 20:54:26
Gracias Suky; ya lo he probado y si que funciona. De esta forma la función queda mucho más clara, porque busca string que comienzan por un determinado caracter, con una pequeña visual en la línea que contiene las comparaciones se identifica fácilmente a que comando hace referencia la línea.

¡Hombre, Don Carlos!, me alegro que hayas decidido dar el salto al lado oscuro del C desde el Basic. Un abrazo

Ja, ja, ja, estoy más ancho que pancho. Estoy que yo mismo me  ((:-)). Mi primer programita en C que ocupa 7k para el 18F2455. Todo funcionando a la primera, mis funciones de bases de tiempos basadas en el Timer1 con interrupciones, mi súper ringfuffer para la usart con interrupciones, las funcione de lectura del ADC, lectura de teclas, lcd, menús, uso de listas y muchas etcs más, ósea mis 50 paginas de código.

Un abrazo para ti tambien.
Título: Re: LISTAS EN C
Publicado por: dogflu66 en 05 de Marzo de 2012, 20:21:54
Para los que ya programamos en algún lenguaje distinto al C por un motivo u otro, y estudiamos C en tiempos remotos, dejo un enlace para la descarga de una lectura muy amena y completa sobre ANSI C que lo resume casi todo. Permitiendo un rápido refresco de la memoria.

<<<http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_c.pdf>>>
Título: Re: LISTAS EN C
Publicado por: fabianjsm en 05 de Marzo de 2012, 22:26:21
Muy bueno dogflu66. Me gustaría recordar la joyita que nos dejo DMR junto a Brian Kernighan, el clásico: El lenguaje de programación C.
Título: Re: LISTAS EN C
Publicado por: Nocturno en 06 de Marzo de 2012, 02:40:03
Buena recomendación, Carlos. Gracias
Título: Re: Listas en Ccs y consultas varias.
Publicado por: dogflu66 en 10 de Marzo de 2012, 22:11:23
Quisiera saber si estas dos funciones son equivalentes:

Código: C
  1. //******************************************************************************
  2. //Mascara tipo digito display 7 segmentos
  3. //xpos = digito a procesar (0 a 9)
  4. //_nmr7seg, retorna la mascara de los segmentos a activar
  5. int8 _nmr7seg(int8 xpos) {
  6.    static const int8 Lookup[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
  7.    return LooKup[xpos];
  8. }

Código: C
  1. //******************************************************************************
  2. //Mascara tipo digito display 7 segmentos
  3. //xpos = digito a procesar (0 a 9)
  4. //_nmr7seg, retorna la mascara de los segmentos a activar
  5. int8 _nmr7seg(int8 xpos) {
  6.    const int8 Lookup[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
  7.    return LooKup[xpos];
  8. }

Ósea, si static es redundante porque se usa const.

Y otra cosa, las const se guardan en flash o ram, me interesa que se alojen en flash.
Título: Re: Listas en Ccs y consultas varias.
Publicado por: dogflu66 en 10 de Marzo de 2012, 22:45:32
Me contesto yo mismo:

La herramienta "Call Tree" del editor del CCS me indica que los datos declarados con "Const" quedan alojados en la Flash, por lo que "Static" es redundante.
Título: Re: Listas en Ccs y consultas varias.
Publicado por: fabianjsm en 11 de Marzo de 2012, 18:48:50
Hola dogflu, en este caso particular es redundante, pero no siempre lo es.
Si el compilador puede generar el código que utiliza un const sin recurrir a su dirección de memoria, no la pondrá en memoria, será una constante en tiempo de compilación, pero si utilizas con el modificador static, siempre posee dirección de memoria, por más que nunca la requieras. Cuando indexas un array const, como en este caso, static es ignorado porque no se puede resolver en tiempo de compilación el elemento del array al que se hace referencia.

Título: Re: Listas en Ccs y consultas varias.
Publicado por: dogflu66 en 12 de Marzo de 2012, 21:01:41
Ok, gracias fabianjsm todo muy claro.