Autor Tema: usando C++ en el compilador XC8  (Leído 4412 veces)

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

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
usando C++ en el compilador XC8
« en: 22 de Enero de 2016, 16:16:59 »
ola a todos, el problema que tengo es que no encuentro en ningun lugar como configurar el compilador XC8 para que funcione con C++ que es mucho mejor, es para poder crear unas cuantas clases como en arduino, para que el codigo quede mejor.

el compilador genero este codigo:
Código: [Seleccionar]
#ifndef MAIN_H
#define MAIN_H

#ifdef __cplusplus
extern "C" {
#endif


#ifdef __cplusplus
}
#endif

#endif /* MAIN_H */

pero ya le puse el #define __cplusplus y igual no sirve, no reconce el lenguaje c++ que ago para que sirba???

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #1 en: 22 de Enero de 2016, 17:42:30 »
Rodrigo Andrés xc8 no puede ejecutar c++, solo podrás hacerlo con xc32 y cogiendo la licencia especial d e xc32++, que te la dan ( sin optimización) al darte de alta en,la sección correspondiente de compiladores en la pagina de microchip.

Un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re:usando C++ en el compilador XC8
« Respuesta #2 en: 22 de Enero de 2016, 21:12:08 »
que no? me parece sumamente malo que mientras arduino que es gratis pueda soportar C++ y XC8 que vale un chorrero de plata, no tenga la capacidad de eso, y para colmo en la version "PRO" del XC8 la optimisacion sigue siendo realmente pobre, y mas en la version gratis que meten un monton de codigo basura aproposito para hacer mas lento el programa...

con esos compiladores no dan ganas de ponerse a escribir codigo, prefiero C++ que es mucho mejor que el C normal porque lo encuentro mucho mas estructurado y poderoso

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #3 en: 22 de Enero de 2016, 21:35:01 »
Citar
que no? me parece sumamente malo que mientras arduino que es gratis pueda soportar C++ y XC8 que vale un chorrero de plata, no tenga la capacidad de eso, y para colmo en la version "PRO" del XC8 la optimisacion sigue siendo realmente pobre, y mas en la version gratis que meten un monton de codigo basura aproposito para hacer mas lento el programa...

bueno,  quitando que arduino no me gusta estoy totalmente de acuerdo contigo en cuanto a los compiladores nuevos de microchip, pero si dejamos eso de lado, si quieres potencia en un código mientras mas bajo nivel de programación tenga el lenguaje mas eficiente y mas difícil y mientras mas alto mas fácil y menos eficiente. (no se si eficiencia es la palabra adecuada, pero es la que se me viene a la cabeza ahora mismo)

es decir si lo que quieres es sacarle todo el "jugo" al microcontrolador, debes irte por ejemplo a ensamblador, un lenguaje difícil pero tendrás mucho control y eficiencia en tu código.

si coges C++, tienes un lenguaje "sencillo" de alto nivel, y que puedes hacer cosas con mayor facilidad, incluso cosas que no haces con otros (en realidad si se puede, pero con muchísimo trabajo), pero a costa de eficiencia por así decirlo.

CUIDADO, no estoy diciendo que un lenguaje sea mejor que otro simplemente que cada uno tiene sus ventajas y desventajas, que luego se me echan encima.

por lo tanto decir esto:

Citar
prefiero C++ que es mucho mejor que el C normal porque lo encuentro mucho mas estructurado y poderoso

No es del todo correcto. Tu opinión y gusto por supuesto si, te gusta mas el C++ y no hay mas que hablar, pero afirmar que uno sea mejor que otro no es correcto.

el C es por asi decirlo un termino medio entre ensamblador y C++.

un saludo
« Última modificación: 22 de Enero de 2016, 21:43:05 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re:usando C++ en el compilador XC8
« Respuesta #4 en: 22 de Enero de 2016, 22:45:16 »
a mi lo que mas me gusta de arduino es que soporta C++, de resto creo que como viene por defecto es un desastre, hace como dos meses necesitaba escribir un codigo de bastante eficiencia en arduino, ya que tiene la ventaja de que se puede conectar con usb al computador y no son tan caros, al final tuve que acceder directamente a los registros, tambien toca desactivar toda esa plaga de micros() e interrupciones que trae por defecto que consume cpu. pero por lo demas el que soporte C++ lo considero como una gran ventaja, e visto librerias que hacen muy buen uso del lenguaje, el codigo que se puede escribir es poderoso sin dejar de ser limpio, portable y organizado.

ademas creo que el hecho de soportar C++ no es un limitante para la eficiencia del codigo, es pura cuestion del compilador que tenga la capacidad de interpretar bien el lenguaje para asi poder abstraer el codigo en C++ y convertirlo a de forma eficiente C y luego a assembler.


Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #5 en: 23 de Enero de 2016, 07:38:45 »
Arduino no es mas que una placa que tiene un atmel, y el compilador de arduino nunca será igual de bueno que el propio de atmel, eso de "eficiencia" y arduino en la misma frase es un engaño, el IDE de arduino en general, es para facilitar el uso del micro para que la gente que no sabe programar o mucho de electrónica use arduino, por eso es muy utilizado, es como el CCS para pic mucho más fácil de programar pero no mejor.

No estoy muy seguro pero creo que nisiquiera tiene un debug en condiciones.

La mayoría de compiladores y micros nuevos soportan C++, y la mayoría de programadores de micros, no usa c++. Por que crees que es? El C++ es un lenguaje de alto nivel. Te recomiendo que te informes y estudies un poco que son los lenguajes de bajo nivel y los de alto así como sus ventajas y desventajas.

Y un compilador, por muy bueno que sea nunca jamás convertirá un código a ensamblador de la misma manera que lo haría un buen programador, al igual que un generador de código o el autorutin o mil cosas mas.

Por cierto:

Citar
sin dejar de ser limpio, portable y organizado.

Eso son cualidades del que programa, no del lenguaje.

Te propongo una cosa:

Citar
ya que tiene la ventaja de que se puede conectar con usb al computador y no son tan caros, al final tuve que acceder directamente a los registros, tambien toca desactivar toda esa plaga de micros() e interrupciones que trae por defecto que consume cpu.

Comprate una discovery de ST, o una freedom de NXP. Que también soportan C++ tienen usb, y son mas baratas y potentes que un arduino.
Y programa ahí, veras como si vienes de arduino, te echas a llorar antes de hacerla andar, y por otra parte puedes aprender lo que es programar un microcontrolador de verdad y no programar como en arduino, utilizaras solo lo que necesites y no tendrás que desactivar nada por defecto, aprenderás a configurar el reloj, los pines,... a arrancar un micro sin que te lo den hecho.
« Última modificación: 23 de Enero de 2016, 07:57:30 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:usando C++ en el compilador XC8
« Respuesta #6 en: 23 de Enero de 2016, 08:16:09 »
Arduino no es mas que una placa que tiene un atmel, y el compilador de arduino nunca será igual de bueno que el propio de atmel

Perdona que te corrija, Juanjo.
El compilador es el mismo: GCC para AVR.

Arduino sólo añade ciertas librerías para hacer la vida más fácil al principiante. Es un añadido del que puedes prescindir si quieres.
Por lo demás es igual excepto en algún detalle (por ejemplo las opciones de compilación son fijas y si quieres cambiarlas tienes que toquetear el código Arduino, que no es fácil)

Saludos.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #7 en: 23 de Enero de 2016, 09:06:40 »
Citar
Perdona que te corrija, Juanjo.
El compilador es el mismo: GCC para AVR.

No lo sabia, entonces cambio mi propuesta, para que aprendas a programar de una manera mas "profesional":

utiliza la placa de arduino, pero no uses el IDE de arduino, prueba a programarlo desde 0 con el atmel studio, ya que tienes el hardware, (por que arduino si no me equivoco es open hardware), de esta manera no tendrás las librerías que te abstraen del hardware y podrás aprender a utilizar un microcontrolador de verdad, empezaras configurando el reloj, los pines,... todas las cosas básicas para arrancarlo pero tocando registros sin echar mano de una libreria en plan "reloj(8MHz)" (ni idea de como es en arduino), tendrás que acudir a la hoja de datos del avr y estudiarte las secciones correspondientes.

ademas ganaras, que con el IDE de atmel puedes debugear, algo esencial para hacer un depurar código, cosa que con el de arduino creo que no (salvo el típico printf),

un saludo

« Última modificación: 23 de Enero de 2016, 09:11:06 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:usando C++ en el compilador XC8
« Respuesta #8 en: 23 de Enero de 2016, 12:22:49 »
Yo llevo tiempo utilizando Atmel. Todos los micros pueden utilizar C++ y se nota mucho.

C++ no es menos eficiente, es igual para la mayoría de las cosas que se hacen con él en microcontroladores.
Es como utilizar muchas variables sueltas en c  o utilizar una estructura. La estructura hace código mucho más claro y es igual de eficiente que las variables sueltas.
De la misma forma puedes agrupar funciones en una clase y eso hace más clara la programación sin hacerla menos eficiente.
Como ese hay muchos ejemplos más.

Un saludo.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #9 en: 23 de Enero de 2016, 12:43:18 »
Yo llevo tiempo utilizando Atmel. Todos los micros pueden utilizar C++ y se nota mucho.

C++ no es menos eficiente, es igual para la mayoría de las cosas que se hacen con él en microcontroladores.
Es como utilizar muchas variables sueltas en c  o utilizar una estructura. La estructura hace código mucho más claro y es igual de eficiente que las variables sueltas.
De la misma forma puedes agrupar funciones en una clase y eso hace más clara la programación sin hacerla menos eficiente.
Como ese hay muchos ejemplos más.

Un saludo.

Mira que lo explique bien clarito arriba, en mi segundo post creo que fue intentando dejar claro que no estaba diciendo que el C++ fuera malo, pero como siempre alguien quiere sacar la puntilla a algo que no he dicho, se perfectamente programar en C++, y se perfectamente las ventajas que tiene y las desventajas también pero total, creo que es hora de dejar la conversación y no entrar en un bucle infinito, de vuelta a explicar lo mismo.

Un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:usando C++ en el compilador XC8
« Respuesta #10 en: 23 de Enero de 2016, 18:05:59 »
No te lo tomes a mal, que no intento más que dar mi opinión.

A mi modo de entender, C++ es mejor que C.
Lo justifico porque cualquier código en C se va a compilar sin problemas en C++
De manera que C++ añade características a C ¿Cómo puede ser eso peor?

Creo que es importante explicar bien lo que puede hacer C++ porque la mayoría de usuarios de PIC de 8 bits no programan en este lenguaje y no saben lo que se pierden. Cuando te pasas a Atmel de 8 bits se abre otro mundo con su compilador libre, gratuíto, todo optimizado y C++ completo (GNU C++).

Un saludo.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #11 en: 23 de Enero de 2016, 18:55:17 »
Pero picuino, es que yo no he dicho que sea peor, solo he dicho que es de mas alto nivel,  dije eficiencia pero dejando claro que no era esa palabra, que era la que se me  a la cabeza en ese momento.

Si yo opino exactamente igual tu, me gusta mas c++ y si comparamos los compiladores de microchip con otros pues... es lo que hay y tampoco me gusta que microchip comprara atmel, pero no podemos negar que con el ensamblador tenemos mas control sobre el micro y el codigo generado, porque es de bajo nivel y tampoco se puede negar que con c++ haces las.cosas mucho mas sencillas y como he dicho, con esto no quiero decir que el ensamblador sea mejor que el C++, ni que el C++ sea mejor que el ensamblador. Es mas yo no programo en ensamblador, pero simplemente intento ser lo mas subjetivo posible.

Y por lo tanto no creo que se pueda decir que un lenguaje sea peor que otro, ya comparemos estos lenguajes o los que sean.

Por eso cuando has dicho que el compilador es igual en arduino y en atmel estudio le he recomendado que programe el arduino pero con el atmel estudio, para no abstraerse del hardware, pero no para dejar de usar c++.

En ningún momento he dicho algo contrario a lo que tu has puesto.

Un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re:usando C++ en el compilador XC8
« Respuesta #12 en: 23 de Enero de 2016, 19:43:46 »
al fin entiendo lo que el quiere decir es que no hay lenguaje mejor que otro, si no que se refiere a que un lenguaje es mas completo que otro, por ejemplo C++ es mucho mas completo que C porque tiene mas cosas y C es mas completo que assembler porque se puede hacer mas con menos esfuerzo , pero C esta basado en assembler y C++ en C.

lo que hace que ninguno sea mejor que otro, si no que todo depende de la aplicacion que se le vaya a dar. no por nada los nucleos de linux o windows estan escritos en C y no en C++.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:usando C++ en el compilador XC8
« Respuesta #13 en: 23 de Enero de 2016, 21:18:42 »
Citar
lo que hace que ninguno sea mejor que otro, si no que todo depende de la aplicacion que se le vaya a dar.

EXACTO, quizá no me supe explicar correctamente desde un principio, pero basicamente se podría resumir de esa manera.

un saludo.
« Última modificación: 23 de Enero de 2016, 21:21:00 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:usando C++ en el compilador XC8
« Respuesta #14 en: 24 de Enero de 2016, 09:10:19 »
C++ no se utiliza en Linux para no facilitar los muchos vicios que puede llevar aparejado programar en ese lenguaje. Ya se sabe "Un gran poder conlleva una gran responsabilidad" y no todo el mundo sabe utilizar bien C++:


http://article.gmane.org/gmane.comp.version-control.git/57918
Citar
From: Linus Torvalds <torvalds <at> linux-foundation.org>
Subject: Re: [RFC] Convert builin-mailinfo.c to use The Better String Library.
Newsgroups: gmane.comp.version-control.git
Date: 2007-09-06 17:50:28 GMT (8 years, 19 weeks, 6 days, 18 hours and 18 minutes ago)


On Wed, 5 Sep 2007, Dmitry Kakurin wrote:
>
> When I first looked at Git source code two things struck me as odd:
> 1. Pure C as opposed to C++. No idea why. Please don't talk about portability,
> it's BS.

*YOU* are full of bullshit.

C++ is a horrible language. It's made more horrible by the fact that a lot
of substandard programmers use it, to the point where it's much much
easier to generate total and utter crap with it. Quite frankly, even if
the choice of C were to do *nothing* but keep the C++ programmers out,
that in itself would be a huge reason to use C.

In other words: the choice of C is the only sane choice. I know Miles
Bader jokingly said "to piss you off", but it's actually true. I've come
to the conclusion that any programmer that would prefer the project to be
in C++ over C is likely a programmer that I really *would* prefer to piss
off, so that he doesn't come and screw up any project I'm involved with.

C++ leads to really really bad design choices. You invariably start using
the "nice" library features of the language like STL and Boost and other
total and utter crap, that may "help" you program, but causes:

 - infinite amounts of pain when they don't work (and anybody who tells me
   that STL and especially Boost are stable and portable is just so full
   of BS that it's not even funny)

 - inefficient abstracted programming models where two years down the road
   you notice that some abstraction wasn't very efficient, but now all
   your code depends on all the nice object models around it, and you
   cannot fix it without rewriting your app.

In other words, the only way to do good, efficient, and system-level and
portable C++ ends up to limit yourself to all the things that are
basically available in C. And limiting your project to C means that people
don't screw that up, and also means that you get a lot of programmers that
do actually understand low-level issues and don't screw things up with any
idiotic "object model" crap.

So I'm sorry, but for something like git, where efficiency was a primary
objective, the "advantages" of C++ is just a huge mistake. The fact that
we also piss off people who cannot see that is just a big additional
advantage.

If you want a VCS that is written in C++, go play with Monotone. Really.
They use a "real database". They use "nice object-oriented libraries".
They use "nice C++ abstractions". And quite frankly, as a result of all
these design decisions that sound so appealing to some CS people, the end
result is a horrible and unmaintainable mess.

But I'm sure you'd like it more than git.

         Linus

 

En cuanto a la eficiencia del assembler, hay que tener en cuenta también el mantenimiento del programa.
Un programa es eficiente si es rápido, pequeño y fácilmente mantenible. El assembler falla en el último punto.

Un artículo interesante:
http://www.linuxadictos.com/el-kernel-de-linux-cambia-partes-de-su-codigo-de-assembler-a-c.html
Citar
Sabido por todos es que el lenguaje Assembler es el más rápido para algunas cuestiones y por ello es el más utilizado en el kernel de los diferentes sistemas operativos y lo propio ocurre para proyectos de tiempo real en donde se utiliza electrónica avanzada. El problema llega después, cuando ese código necesita ser mantenido y no lo es, y por ello en el caso del kernel de Linux los desarrolladores han optado por traducir ese código Assembler a C.

C es el lenguaje de programación más representativo de Linux (en realidad, de todas las plataformas *nix), fue desarrollado por Dennis Ritchie y Ken Thompson en 1972, fue realizado en un sistema Unix PDP-11 y formó parte de Unix versión 2. Dadas sus altas prestaciones y portabilidad fue comenzando a ser utilizado cada vez más en la implementación de sistemas operativos y por ello Linus Torvalds lo utilizó para su proyecto cuando allá por 1990 buscaba una alternativa libre y abierta a Minix.

Claro que a pesar de tantas fortalezas, Assembler tiene algunas ventajas respecto de C como mencionamos al comienzo, por ello esta decisión ha sorprendido pero de acuerdo a lo que comenta Andy Lutomirsky en las listas de correo del kernel su trabajo ya está bien encaminado y el kernel de Linux 4.1 será el primero en incorporar esta reescritura de código fuente de Assembler a C. En concreto, todo lo referido a las salidas hacia modo de usuario, que en la actualidad está compuesto de una mezcla de código de estos dos lenguajes de programación pero que dado su escaso mantenimiento se ve cada vez más complicado al momento de actualizar.

Es que el código en Assembler lleva mucho tiempo sin ser actualizado y eso redunda en que los nuevos desarrolladores no tengan del todo claro su funcionamiento, y lo que es peor aún, no resultaría fácil actualizarlo. Así las cosas, en lugar de intentar algún cambio parcial han optado por comenzar a cambiar todas esas rutinas de Assembler a C, y en lo personal pienso que aunque se pueda llegar a perder algo de velocidad de ejecución (que puede ser mínima si el código C nuevo es eficiente) siempre es preferible código nuevo y claro a tenerlo desactualizado y con posibilidades casi nulas de actualización debido a que no se entiende bien como fue implementado.

Saludos.
« Última modificación: 24 de Enero de 2016, 09:13:29 por Picuino, Razón: Añado artículo de linuxadictos »