TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Thulsa Doom en 13 de Agosto de 2015, 06:18:21

Título: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 13 de Agosto de 2015, 06:18:21
Hola a todos, pues a medida que voy profundizando en la programación en C más dudas atacan mi mente.

A ver si me explico bien:

Estoy utilizando en compilador C18 y recientemente me he metido un poco con arduino y veo cosas que me dejan a si   :shock:

Creo que el lenguaje de arduino es C++ y el de c18 es ANSI C, ¿estoy en lo cierto?.

Es que el tema de las clases, contructor y todo eso me pierde, por lo cual pregunto, ¿en c18 también se puede construir ese tipo de objetos o se puede hacer algo parecido?

He leído que las estructuras son similares a las clases pero no sé si esto es solo en C++ ya que la mayoría de tutoriales que hay en la red siempre acaban en el lenguaje C++.

Otra cosa que no comprendo muy bien son las estructuras en C, ¿donde se deven de declarar?, ¿cómo se llama a un elemento de una estructura?, se que para llamar un elemento de una estructura por ejemplo.

Código: [Seleccionar]
struct prueba{
              int a;
              int b;
              char c;
        } myPrueba;

se hace de esta manera.
Código: [Seleccionar]
myPrueba.a = 10;
Pero tengo dudas de donde declararlas si en xx.c o en xx.h, es que he visto programas donde se declaran en el .h pero cuando yo hago algún ejemplo me da error, me dice que myPrueba tiene varios argumentos o algo de eso

Otra duda con las estructuras es que le leído que una función puede devolver una estructura ¿cómo es eso  :shock:?.

Más dudas con las estructuras, ¿cómo puedo usar los datos de una estructura dentro de una función ajena de esa estructura?, sé que en variables si las haces globales tienes que definir esas variables en la función, ejemplo, si declaro una variable global
Código: [Seleccionar]
int ab; en la función tengo que declararla así
Código: [Seleccionar]
extern int ab;, ¿cómo sería con las estructuras?

y seguro que me aparecerán más dudas...  :oops:

gracias por la ayuda de ante mano
Título: Re: Dudas sobre la programación en C
Publicado por: KILLERJC en 13 de Agosto de 2015, 09:27:50
Ufff, voy a intentar responder lo que se

Citar
Es que el tema de las clases, contructor y todo eso me pierde, por lo cual pregunto, ¿en c18 también se puede construir ese tipo de objetos o se puede hacer algo parecido?

No, El unico que posee Clases es C++, podes directamente hacer funciones, un ejemplo de un TFT declarado como clase:


Código: C++
  1. myTFT::Init()
  2. myTFT::DibujarRectangulo(x,y,x2,y2,fill);

Esto es que cada funcion, Init y Dibuja Rectangulo pertenenecen a myTFT, utilizan las variables de myTFT. Algunas como por ejemeplo este ejemplito:

Código: C
  1. class Rectangle {
  2.     int width, height;
  3.   public:
  4.     void set_values (int,int);
  5.     int area() {return width*height;}
  6. };
  7.  
  8. void Rectangle::set_values (int x, int y) {
  9.   width = x;
  10.   height = y;
  11. }
  12.  
  13. int main () {
  14.   Rectangle rect;
  15.   rect.set_values (3,4);
  16. }

Si te fijas en el main, hacen que "rect" tome como una copia de todas las variables y funciones definidas en la clase.
Es decir cuando lo definis, rect pasa a tener un rect.width , un rect.weigth , que si agrego otra y hago un Rectangle otravariable, esa nueva variable va a tener su "copia" de las variables anteriores entonces rect.width != otravariable.width. Todo esto se puede omitir para C.

Podes definir una estructura tal como hiciste y asignarle a cada una de tus variables esos valores.
Lo unico que no vas a encontrar comparacion es el uso del scope public y private, que en ANSI C el scope son 3 nomas: block (dentro de la funcion),file (static, osimplemente nad),global (extern).

Finalmente un "equivalente" en C seria directamente crear las 2 funciones como siempre lo hiciste, hacer una estructura con las variables width,heigth. Y listo definir las varaibles y llamar a las funciones.

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

Estructuras, en realidad seria algo mas asi:

Código: C
  1. struct prueba{               // Asi se declara una estructura , esto no ocupa espacio simplemente es la declaracion asi que esto podria ir en el xx.h
  2.               int a;
  3.               int b;
  4.               char c;
  5.               int *d;
  6. };
  7.  
  8. typedef prueba myPrueba;      // Esto es asignar un "tipo" asi como tenes int,long,etc al tag prueba, es decir que cuando te refieras a myPrueba estas apuntando a toda la estructura, este creo que no se puede poner en el .h ya que si se incluye varias veces estarias difiniendo muchas veces a myPrueba y resultaria en un error, al menos es lo que me paso a mi.
  9.  
  10. struct prueba Variable1;      // Caso de no usar typedef, para definir una variable
  11. myPrueba Variable;            // Principal uso de typedef, para no repetir por todos lados el "struct tag_name"
  12. Variable.a = 10;                // Finalmente accedemos al elemento de la Variable
  13.  
  14. struct prueba *punteroVar;
  15. punteroVar = &Variable
  16.  
  17. punteroVar->d=5;                 // Estas ultimas 2 son equivalentes, es para el caso de los punteros y queda mas facil de entender el de abajo. Para no agregar un "->" a la cabeza mas.
  18. (*punteroVar).d=5;

En mi poca experiencia me encontre con esos problemas, de no poder poner el typedef en el .h, especialmente cuando lo incluyo en varios lados a pesar que no use las estructuras de ahi.
La mayoria recomienda no usar el typedef para saber exactamente que se trata de una estructura y por otro tema de punteros. Pero por comodidad lo usas.

Tambien podes hacer TODO junto el typedef y la definicion de la estructura

Código: C
  1. typedef struct prueba{
  2.               int a;
  3.               int b;
  4.               char c;
  5.         } myPrueba;

Pero si va en el .h tendrias ese problema.
Algo interesante que me ocurrio, es que por ahi tenia que pasar algunas struct por alguna funcion, como lo tenia con el typedef no me dejaba entonces no me quedo otra que poner sus prototipos en el .c ( ya que no los usaba en el .h) y use el typedef antes de haber definido la estructura.

Citar
Otra duda con las estructuras es que le leído que una función puede devolver una estructura ¿cómo es eso ?.

Yo no se si devolveria una estructura, prefiero pasarle el puntero a esa estructura y ahi cambiar todo. Pero si aun asi queres devolver una estructura, dejo un ejemplo:

Código: C
  1. #include <stdio.h>
  2.  
  3. struct a {
  4.    int i;
  5. };
  6.  
  7. struct a f(struct a x)
  8. {
  9.    struct a r = x;
  10.    return r;
  11. }
  12.  
  13. int main(void)
  14. {
  15.    struct a x = { 12 };
  16.    struct a y = f(x);
  17.    printf("%d\n", y.i);
  18.    return 0;
  19. }

Y este ejemplo seria pasandolo como argumento:


Código: C
  1. struct a {
  2.    int i;
  3. };
  4.  
  5. void f(struct a *y)
  6. {
  7.    y->i=30;   // Es lo mismo que (*y).i
  8. }
  9.  
  10. int main(void)
  11. {
  12.    struct a x = { 12 };
  13.    f(&x);
  14.    printf("%d\n", x.i);
  15. }

Citar
Más dudas con las estructuras, ¿cómo puedo usar los datos de una estructura dentro de una función ajena de esa estructura?, sé que en variables si las haces globales tienes que definir esas variables en la función, ejemplo, si declaro una variable global
Si es global entonces no vas a tener problemas, sino vas a tener que pasarle el puntero a la estructura. Tal como el caso anterior

Dudas que te pueden salir tambien (que se me ocurrieron en el momento)

¿Puedo poner una funcion dentro de una estructura?
NO se puede poner funciones en las estructuras en C. Lo que si he visto y usado es un puntero a una funcion.

Código: C
  1. void Funcion1(x,i)
  2. {
  3.   x=10;
  4.   i=20;
  5. }
  6.  
  7. struct test {
  8.   int *punterofuncion;
  9.   int b;
  10.   char c;
  11. }
  12.  
  13. void main(){
  14.   struct test Variable;
  15.   Variable = {(int)&Funcion1,100,'a'};
  16.   Variable.(*punterofuncion)(2,10);   //Estoy con que deberia funcionar asi
  17. }
Título: Re: Dudas sobre la programación en C
Publicado por: juaperser1 en 13 de Agosto de 2015, 09:47:47
Me csgo en la leche, me he pasado media hora escribiendo explicando y no me lo ha publicado y le doy para atrás y me da error :(

Bueno total ya te lo ha explicado killer  :D
Título: Re: Dudas sobre la programación en C
Publicado por: KILLERJC en 13 de Agosto de 2015, 09:54:05
Me csgo en la leche, me he pasado media hora escribiendo explicando y no me lo ha publicado y le doy para atrás y me da error :(

Bueno total ya te lo ha explicado killer  :D

Me supo pasar... y encima recien le daba publicar y me ponia unos tag de code al principio, lo mande como 3 veces hasta que se me ocurrio moverlo a un bloc de notas y revisarlo ahi, para darme cuenta que me habia saltado un tag de code, entonces el foro lo agregaba solo xD

PD: Fijate si hay algo mal, que seguro lo hay, asi de paso se le dice bien a thulsa y aprendo de mi error.
Título: Re: Dudas sobre la programación en C
Publicado por: juaperser1 en 13 de Agosto de 2015, 12:49:40
Citar
Me supo pasar... y encima recien le daba publicar y me ponia unos tag de code al principio, lo mande como 3 veces hasta que se me ocurrio moverlo a un bloc de notas y revisarlo ahi, para darme cuenta que me habia saltado un tag de code, entonces el foro lo agregaba solo xD

PD: Fijate si hay algo mal, que seguro lo hay, asi de paso se le dice bien a thulsa y aprendo de mi error.

lo que dices es casi todo correcto, KILLERJC, pero en programación hay muchos puntos de vista, mi punto de vista es que creo que le estas hablando de algo bastante complicado a alguien que si no me equivoco esta aprendiendo y creo que tiene problemas de conceptos.

voy a exponer algunas cosas, simplemente para agrandar lo que te ha dicho KILLER no para corregir nada por que esta bien.


bueno, creo que lo que intentas aprender es C, por eso te daría como consejo que te olvides por completo de C++, olvidate de clases de objetos... de todo lo que sea C++ por que te vas a liar.
por otra parte si lo que quieres es aprender C para microcontroladores, No C18 no tiene C++, pero XC32 por ejemplo si te permite usarlo, pero como te digo yo me olvidaría de momento de eso.


Citar
Más dudas con las estructuras, ¿cómo puedo usar los datos de una estructura dentro de una función ajena de esa estructura?, sé que en variables si las haces globales tienes que definir esas variables en la función, ejemplo, si declaro una variable global
Código:
int ab;
en la función tengo que declararla así
Código:
extern int ab;
, ¿cómo sería con las estructuras?

esto concepto esta mal, si tu tienes una variables global, la puedes usar dentro de cualquier función del mismo fichero, y no tienes que definirla dentro de la funcion como extern

existen variables globales que se pueden usar en todo el .c  y las locales que las declaras, dentro de una función, y estas variables solo existen dentro de esta función. por ejemplo:

Código: [Seleccionar]
void funcion1(void)
{
    unsigned char variable1=0;
}

la "variable1" solo existe dentro de la "funcion1" y no podrás usarla dentro de ninguna otra función, esta variable se destruirá cada vez que se salga de la función. si no quieres que se pierda el valor cuando salga de la funcion deberas declararla como "static unsigned char variable1" de esta manera no se perderá el valor y cuando vuelva a entrar en la función mantendrá su valor.


lo mismo pasa con las estructuras, si la declaras global, esta disponible en todo el fichero .c, si solo la declaras en una función solo estará en esa función.

hasta aqui bien?

lo de "extern" el termino extern se utiliza cuando una variable globar esta declarada en otro fichero ejemplo:

imagina que tenemos un fichero que se llama main.c  y dentro es de esta manera de esta manera:

Código: [Seleccionar]
unsigned char global1=0;
void main(void)
{
   while(true){}
}

tenemos una variable global llamada "global1" disponible para todas las funciones de main.c

pero tenemos otro fichero llamado libreria.c que es asi:

Código: [Seleccionar]

extern unsigned char global1;

void funcion(void)
{
}

ahora la variable global de main.c esta tambien disponible en libreria.c pero la directiva extern le ha dicho que esta declarada en otro lado (fijate que no se inicializa, por que se estaria inicializando en dos sitios y eso no puede ser)

Citar
Pero tengo dudas de donde declararlas si en xx.c o en xx.h, es que he visto programas donde se declaran en el .h pero cuando yo hago algún ejemplo me da error, me dice que myPrueba tiene varios argumentos o algo de eso

esto seguramente has creado tu estructura en un .h y llamas al .h mas de una vez o algo por el estilo.

te recomiendo te bajes esto :

http://www.todopic.com.ar/foros/index.php?topic=44931.0

el archivo v0.9.zip, hay se hacen uso intensivo de estructuras definidas en .h se crean en otros ficheros, se llaman en funciones etc. tendrás casi todos los ejemplos posibles, incluso de vectores dentro de estructuras.

y así al menos este fichero le servirá a alguien por que no lo ha querido nadie hahaha.

parece que la base de creación de estructuras y tal lo tienes mas o menos claro pero fallas en algunos conceptos y esos creo que son tus problemas

lo de los punteros que te menciona KILLER es muy buena herramienta, de lo mejor que tiene C, pero no creo que hayas llegado a estudiarlos todavía.

repasate los conceptos de funciones y variables globales y locales creo que te vendrá bien.

un saludo
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 13 de Agosto de 2015, 13:51:49
Hoooola, gracias por emplear vuestro tiempo en explicarme todo esto, la verdad que el tema de las funciones, variables y todo eso si que lo domino más o menos, aveces cometo algún error porque se me escapa pero bueno como dicen... de los errores se aprende...oooo no  :D :D :D

La verdad que me dejan así  :shock:, yo pensaba que los punteros eran complicados pero cuando toque las estructuras y uniones flipé, esto tendré que ir asimilándolo poco a poco.
Me he metido con todo esto de las clases porque he de confesar que he robado algún código que otro de arduino y lo he estado adaptando a C18 y de momento funciona bien, pero quería profundizar más y hacer mi código más eficiente y profesional y al ver el tema de las clases y constructores me hizo pensar.

Bueno ya tengo claro muchas cosas ahora me toca fajarme y si sale alguna duda, con vuestro premiso os consultaré.

Graciassssssss  ((:-)) ((:-))
Título: Re: Dudas sobre la programación en C
Publicado por: juaperser1 en 13 de Agosto de 2015, 14:35:27
Thulsa doom ten en cuenta que arduinó es una cosa, que se podría atribuir mas al mundo de los informáticos que suelen saber menos de electrónica, si quieres aprender electrónica no te fijes mucho en arduino. Y si quieres portar código de lo que hace arduino, cuidado porque eso no se puede considerar C exactamente y te puedes liar además de que te extrae mucho mucho del hardware.

Un saludo.
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 13 de Agosto de 2015, 14:47:24
Lo tengo en cuenta, yo me construyo mis propias placas y eso si que no te lo cambio por nada.
Portando código me he dado cuenta de muchos errores que comenten al desarrollar un código como puede ser los delays que la peña lo utiliza mucho y a mi no me gusta un pelo, cuando veo un delay de esos lo sistutuyo por la rutina tickget() que utiliza el timer0 para contar tiempos.

Bueno lo que he portado son poca cosa como la lectura de termistores que incluía la formula para el calculo de la temperatura y la verdad que tira bien y pocas cosas más, alguna sonda, por lo demás como pueden ser memorias spi, protocolos tcpip y todo eso o lo desarrollo yo con el datasheet del fabricante a mano o utilizo las librerías que microchip tiene para sus productos.

Lo que a la hora de ver el código en arduino me despertó la curiosidad de intentar hacer el código más eficiente, agrupar y automatizar más mis códigos y como nunca he usado las estructuras pues surgió la duda y ahora las estoy estudiando porque veo que son muy potentes y flexibles.

Bueno... cosas de novatos jajajajajaja
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 14 de Agosto de 2015, 13:53:59
Hooooooola, pues después de batallar un poco, bueno un poco no, muucho  :) con este tema y creo que ya estoy empezando a dominarlo.
Expongo lo que tengo hasta ahora a ver si mis conceptos no están equivocados.

Hay varias maneras de crear un estructura y todas tiene el mismo resultado, está la forma más clásica y sencilla que es esta.
Código: [Seleccionar]
struct Nombre{
  int a;
  float b;
  char c[5];
};
luego tendremos que añadir un identificador a esa estructura para poder trabajar con ella, de esta manera:
Código: [Seleccionar]
struct nombre MYS_DATOS;
La segunda forma de crear la misma estructura:
Código: [Seleccionar]
struct Nombre{
   int a;
   float b;
  char c[5];
}MYS_DATOS;

De esta forma ya nos hemos ahorrado el paso de crear el identificador por separado, pero esto no queda ahí, podemos identificar la estructura con un nombre y así no tener que poner struct cada vez que queramos añadir un nuevo identificador, se puede hacer esto de dos formas.

Ampliando el primer ejemplo de esta manera:
Código: [Seleccionar]
struct Nombre{
  int a;
  float b;
  char c[5];
};

typedef struct nombre MYS_DATOS;

O haciéndolo todo de un golpe al crear la estructura
Código: [Seleccionar]
typedef struct Nombre{
  int a;
  float b;
  char c[5];
}MYS_DATOS;

Una vez creamos la estructura tendremos que asignarle una variable para poder trabajar con ella, la forma es la siguiente (utilizando el último ejemplo de creación de estructuras)

Código: [Seleccionar]
MYS_DATOS  myDato;
Ahora para trabajar con cada mienbro de la estructura utilizaremos myDato para ello, por ejemplo para añadir un número a la variable (a).
Código: [Seleccionar]
myDato.a = 100;
Se pueden declarar las estructuras en los ficheros de cabecera .h pero no se puede declarare la variable, solo el nombre y el identificador, si declaramos la variable nos dará un error de definición de variable en las de un sitio, la forma es la siguiente.
Se crea la estructura en en .h por ejemplo esta:

Código: [Seleccionar]
typedef struct Nombre{
  int a;
  float b;
  char c[5];
}MYS_DATOS;

En el archivo fuente que corresponda esa estructura declaramos la variable por ejemplo así:
Código: [Seleccionar]
MYS_DATOS  myDato;y si utilizamos esa estructura en más de un fichero fuente tendremos que declarar la variable en la cabecera del archivo de esta manera.
Código: [Seleccionar]
extern MYS_DATOS  myDato;
Ojo todo esto si la estructura es global.

Si declaro la estructura en el fichero fuente (x.c) si intento utilizar esa estructura fuera de ese fichero no va, ni nombrando la variable externa

Si me falta algo o sobra algo o está mal algo ruego me corrijan  :D
Título: Re: Dudas sobre la programación en C
Publicado por: juaperser1 en 14 de Agosto de 2015, 16:24:15
Ahora si, perfecto  ;-) veo que has comprendido muy bien el uso de structuras y la manera de trabajar con ellas, enorabuena sigue asi ((:-))
Título: Re: Dudas sobre la programación en C
Publicado por: Picuino en 14 de Agosto de 2015, 17:54:52
Me he metido con todo esto de las clases porque he de confesar que he robado algún código que otro de arduino y lo he estado adaptando a C18 y de momento funciona bien, pero quería profundizar más y hacer mi código más eficiente y profesional y al ver el tema de las clases y constructores me hizo pensar.

Arduino utiliza GNU C++
Los PIC utilizan C.
El C++ es mas amplio que el C. C++ añade programación orientada a objetos (clases y cosas así) que no se pueden programar en C.

Saludos.
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 15 de Agosto de 2015, 06:33:17
Ahora si, perfecto  ;-) veo que has comprendido muy bien el uso de structuras y la manera de trabajar con ellas, enorabuena sigue asi ((:-))

Gracias a vosotros pos la ayuda, sin ello lo entendería pero seguramente muuuuuuuuuucho más tarde  :D

Gracias Picuino, la verdad que no sabía bien la diferencia entre C y C++, sabía que era orientada a objetos pero no lo entendía
Título: Re: Dudas sobre la programación en C
Publicado por: Nocturno en 15 de Agosto de 2015, 06:46:30
Y por si fuera poco, también existe C#
https://es.wikipedia.org/wiki/C_Sharp

Es una variante de Microsoft que también fue aprobado como estándar.
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 15 de Agosto de 2015, 07:36:43
Y por si fuera poco, también existe C#
https://es.wikipedia.org/wiki/C_Sharp

Es una variante de Microsoft que también fue aprobado como estándar.

Tooomalo, :shock:   no tenía ni idea, es más yo pensaba que el lenguaje c era el C y el C++ y ya está y todos los demás como java, pithon y todos esos son variantes del C++, y también pensaba o creía que para referirse al C era como C# jajajaja que ignorante soy y que complejo es este mundo.

Muchas gracias
Título: Re: Dudas sobre la programación en C
Publicado por: juaperser1 en 15 de Agosto de 2015, 09:47:15
Pues anda que no hay lenguajes Haha una infinidad, unos son la base de otros, otros son completamente diferentes, unos son compilados, otros interpretados, unos secuenciales, otros programación objeto, todos con sus ventajas e inconvenientes, unos mas utilizados y otros menos, pero todos importantes en algún campo, y si no contamos los lenguajes de FPGA.

Por cierto si quieres después de aprender C y quieres aprender objeto, yo por ejemplo soy muy bueno en C# es un lenguaje muy facilito,  si quieres aprender, aunque te recomiendo mas C++ con QT para la programación objeto.

Pero saber C estándar te ayudara a comprender mucho mejor los otros. Y tienen muchas cosas en común.

Un saludo.
Título: Re: Dudas sobre la programación en C
Publicado por: Picuino en 16 de Agosto de 2015, 06:08:33
Luego está bien conocer que hay lenguajes con los que aprendes a programar y otros con los que se puede desaprender.

El C no es un buen lenguaje para aprender a programar. Para eso es francamente malo.
En C se puede hacer de todo... y lo más fácil es programar mal. Es mejor aprender con lenguajes que te guían para programar bien y luego pasarte al C, con el que puedes hacer de todo sabiendo los peligros que eso tiene.

Por ejemplo un puntero de c "void *p;" es una bomba en potencia. Tienes acceso a toda la memoria sin restricciones.

Saludos.
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 16 de Agosto de 2015, 08:18:27
 :shock: vaya,la verdad que me queda camino que jode  :D :D :D :D.
¿que lenguaje es el recomendado para programar bien?
Título: Re: Dudas sobre la programación en C
Publicado por: juaperser1 en 16 de Agosto de 2015, 09:02:17
Citar
Insertar Cita
 Shocked vaya,la verdad que me queda camino que jode  lol lol lol lol.
¿que lenguaje es el recomendado para programar bien?

No es eso exactamente, en todos los lenguajes se puede programar bien, y en todos se puede programar mal, eso te lo dará la experiencia, yo creo que vas bien, lo único que te hace falta es seguir aprendiendo, probando, cagarla y volverla a cagar no te preocupes de cual es el mejor lenguaje porque cada uno te dirá uno distinto, para gustos los colores y para cada aplicación muchas veces si es uno mejor que otro, pero no te preocupes que todo llegara.

Por ejemplo, los lenguajes para PLC limitan muchísimo a un programador porque son maquinas que no se pueden permitir un software malo, y aun así, se pueden programar como el culo, y luego se ven las cosas que se ven.

Todos te dirán que c18 o cx18 es mejor para programar un pic que CCS porque te es mas control, y es cierto pero si no sabes usar ese control (como dice picuino) pues uno que haga un buen software en CCS pues te da mil vueltas, porque tu has usado mal el c18.

Debes de aprender a programar correctamente independientemente del lenguaje.

Por ejemplo, hay gente que usa los delay para cualquier retraso, mal, hay gente que actualiza el WDT, en cada while, mal.
Un buen código no debe tener bucles donde se pueda quedar pillado el código con zonas muertas, ni quedarse pillado al no recibir un dato,  si pasa cualquier imprevisto el micro debe de saber reponerse y no quedarse pillado, y mil ejemplos mas...
Todas esas cosas son las que hacen un buen software, sea el lenguaje que sea.

Un saludo.
Título: Re: Dudas sobre la programación en C
Publicado por: KILLERJC en 16 de Agosto de 2015, 11:45:25
En fin, AGUANTE ASM!  :D

LLeva mucho tiempo sino seria muy lindo. Pero coincido con juaperser.

Citar
Por ejemplo un puntero de c "void *p;" es una bomba en potencia. Tienes acceso a toda la memoria sin restricciones.

Y no lo es cualquier puntero ? xD
El mayor problema de eso es que hay que tener especial cuidado por como se usa. Y estoy MAS que seguro que si se usa mal (al menos en un micro ARM, en los PICs no deberia haber tanto problema, ya que tendrias un valor erroneo a no ser ciertas partes de la memoria) tendrias una excepcion por un acceso que no esta alineado a la memoria. Pero con las consideraciones y especial cuidado que tenes que tener si es que usas un void pointer no habria problemas, sino lo deja de lado y sigue usando los otros punteros.
Título: Re: Dudas sobre la programación en C
Publicado por: Thulsa Doom en 16 de Agosto de 2015, 14:26:07
Pues entendido y lo dicho anteriormente,.... cuanto más profundizo en el lenguaje de programación más me sorprende por la dificultad que puede llegar a alcanzar
Título: Re: Dudas sobre la programación en C
Publicado por: Picuino en 16 de Agosto de 2015, 17:17:36
Ese es uno de los problemas del C para empezar a programar. Es bastante complicado, por lo que puede desanimar.
Un buen lenguaje para aprender debería tener una curva de aprendizaje más suave.

De todas formas, ya que estás con el C te animo a seguir con él. Es prácticamente el único que existe para microcontroladores (el assembler es de bajo nivel, casi código máquina y no me parece recomendable más que para pequeños fragmentos de código)

Para no aprender malos vicios con el C te recomiendo que a la vez aprendas buenas prácticas de programación.
También te recomiendo que aprendas Python. Te resultará fácil y util. Aquí un buen libro gratuito:
Aprenda a pensar como un programador (con Python) (http://www.cmat.edu.uy/cmat/cursos/licenciatura/cursos/computacion/documentos/Think%20Python-esp.pdf)

Te cuento como ejemplo una buena práctica de programación: los espacios de nombres.
Se utilizan en los lenguajes orientados a objetos. Nombrar funciones y variables es todo un arte y una de las dificultades a la hora de hacer un buen programa.
Yo hace tiempo que he tomado la práctica de nombrar igual que en Python con espacios de nombres, pero adaptado al C. Por ejemplo:

Código: [Seleccionar]
int math_x
int math_y
int math_suma(int, int);
char led_a;
char led_b;
void led_on(void);
void led_off(void);
void buzz_on(void);
void buzz_off(void);

Todos los datos y todas las funciones de un archivo *.c comienzan por la misma palabra. A continuación coloco una linea baja '_' y después el nombre que corresponde a lo que hace la función o el significado del dato.
Este segundo nombre se puede (y se debe) repetir en varios archivos. Por ejemplo _on() _offf() _init()
De esta forma es mucho más sencillo nombrar y acordarse del nombre de la función o del dato.
En los lenguajes orientados a objetos las dos palabras suelen separarse con el caracter '.'

En realidad, todos los datos que puedo los meto en estructuras. De esta forma también se puede utilizar el caracter punto:

Código: [Seleccionar]
leds.a
leds.b
leds.c
leds.temporizador


Un saludo.