--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Hola a todos quisiera saber si me pueden recomendar un libro o pagina donde se explique y si es posible en español la programacion en c para microcontroladores freescale mediante codewarrior. Desde ya muchas gracias por todo
- Ing. Alejandro J. Formichelli INTI - Electrónica e Informática www.inti.gob.ar Av. Gral Paz 5445 - Ed. 42 (B1650WAB) SAN MARTIN (54-11-) 4724-6200/6300/6400 Provincia de Buenos Aires (ext 6371) int 6371 República Argentina
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
-
Hola a todos.Alguno de ustedes tiene algún libro o sitio web para estudiar y aprender programación con C/C++?
También seria bueno recordar que Linus le encanta ser full-troll en ABSOLUTAMENTE TODO!!!!La decisión de usar C en vez de C++ en git es porque a Linus sabe que la dificultad de escribir código medianamente independiente de la arquitectura en C++ es bastante mayor para muchas aplicaciones simples (si, git es SIMPLE en cuanto a complejidad esencial). Del otro lado, hacer un escritorio en C (diseño meramente POO) es una real estupidez. Similar a hacer un kernel en C++ (notar que ambos diseños son POO en cierta medida)Hay que tener cuidado con las opiniones de Linus y mantenerlas en el contexto en las que las escupe porque sino podemos defender bestialidades como gnome con el mismo principio que los defensores de un kernel C++.Entonces ¿C++ en embebidos?Mi respuesta es:Para variar, depende. Aunque de que... eso es un tema que da para un hilo distinto (y un epic-flamewar)
Primero que nada, vamos a poner algunas cosas facticas en claro:
* Mentira que C++ requiera memoria dinamica. operator new y delete pueden sobrecargarse para que no retornen nada o sean puntos de trap al ser usadas.
Lo unico que requiere memoria dinamica son las librerias STL las cuales estan fuera de discución dentro del ambito embmebido (salvo que alguien logre una implementación determinista en el uso de memoria)
* RTTI es parte de C++ desde hace bastante poco, generalmente se puede desactivar sin ningun problema con el consiguiente ahorro de recursos en runtime.* Las excepciones son otro tanto, no solo se puede desactivar para que el compilador de error al tratarla de usar, sino que simplemente con NO USARLAS ya no ocupa lugar en el runtime.
* En experiencia propia, todo lo anterior incluso activado, ocupa en un Cortex-M4 usando gcc 4.7 y los stubs correspondientes para evitar codigo innecesario (manteniendo el 100% de la funcionalidad) apenas 16K de flash y algunos bytes mas de RAM (menos de 64 pero no recuerdo el numero justo ahora).
Por otro lado, las ventajas (técnicas) que yo veo de C++ sobre C en sistemas embebidos son:* Seguridad de tipos: C++ es mas estricto en los castings y permite mayor expresividad a la hora de manejar y definir tipos. Muchas de esas mejoras están en C99 y como extenciones en otros C, pero C++ las incorpora oficialmente al lenguaje.* Eficiencia: C++ puede generar codigo mas eficiente para depende que tareas:const int MAX_COUNT = 10;...for(int i=0; i<MAX_COUNT; i++) { ... }Genera mejor codigo que su equivalente en C, ya que, MAX_COUNT no está obligado a aparecer en el lado del linker como entidad referenciable (salvo que se lo referencie en alguna parte del codigo). C estandar OBLIGA a que MAX_COUNT aparesca como simbolo referenciable (otra cosa es lo que pueda optimizar el linker)C++11 extiende esto todavia mas permitiendonos definir funciones constantes (resolubles en tiempo de compilación) con constexpr, de forma que si escribimos por accidente codigo que el compilador no puede resolver mientras compila, fallará con un error.
--
Sebastián
Sebastián
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a mailto:embebidos32%2Bunsu...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a mailto:embebidos32%2Bunsu...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a mailto:embebidos32%2Bunsu...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a mailto:embebidos32%2Bunsu...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a mailto:embebidos32%2Bunsu...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Hola Martín,Lógicamente estoy de acuerdo con lo que decís, pero quería comentar un par de puntos:
2014-08-21 15:47 GMT-03:00 martin ribelotta <martinr...@gmail.com>:
Primero que nada, vamos a poner algunas cosas facticas en claro:
* Mentira que C++ requiera memoria dinamica. operator new y delete pueden sobrecargarse para que no retornen nada o sean puntos de trap al ser usadas.Por otro lado, por default usa el heap y uno podría argumentar que C++ en embebidos requiere mayor expertise por parte del programador que en C.
Lo unico que requiere memoria dinamica son las librerias STL las cuales estan fuera de discución dentro del ambito embmebido (salvo que alguien logre una implementación determinista en el uso de memoria)Justamente en *estos dìas* hay un grupo de trabajo en formac ión dentro del comité de estandarización del C++ tratando el tema embedded, y uno de los puntos es allocator para la STL que permita evitar el uso del heap.
* RTTI es parte de C++ desde hace bastante poco, generalmente se puede desactivar sin ningun problema con el consiguiente ahorro de recursos en runtime.* Las excepciones son otro tanto, no solo se puede desactivar para que el compilador de error al tratarla de usar, sino que simplemente con NO USARLAS ya no ocupa lugar en el runtime.En realidad, hay un footprint aún cuando no las uses (e incluso usando -no_exception en gcc). Es una de las cosas que se están tratando.El Viernes pasado en el SASE, Daniel Gustson hizo una presentación muy interesante donde explicó como sacarse todo ese foorprint de encima en el caso de gcc. No es nada que uno vaya a saber naturalmente (y dudo que en google), pero estos chicos de Taller lo hicieron y Daniel puede explicarlo acá en la lista llegado el caso.
* En experiencia propia, todo lo anterior incluso activado, ocupa en un Cortex-M4 usando gcc 4.7 y los stubs correspondientes para evitar codigo innecesario (manteniendo el 100% de la funcionalidad) apenas 16K de flash y algunos bytes mas de RAM (menos de 64 pero no recuerdo el numero justo ahora).Totalmente. Y para los casos donde esos 16K es prohibitivo, hay cosas puntuales que se pueden hacer (como lo que expuso Daniel en el SASE)Por otro lado, las ventajas (técnicas) que yo veo de C++ sobre C en sistemas embebidos son:* Seguridad de tipos: C++ es mas estricto en los castings y permite mayor expresividad a la hora de manejar y definir tipos. Muchas de esas mejoras están en C99 y como extenciones en otros C, pero C++ las incorpora oficialmente al lenguaje.* Eficiencia: C++ puede generar codigo mas eficiente para depende que tareas:const int MAX_COUNT = 10;...for(int i=0; i<MAX_COUNT; i++) { ... }Genera mejor codigo que su equivalente en C, ya que, MAX_COUNT no está obligado a aparecer en el lado del linker como entidad referenciable (salvo que se lo referencie en alguna parte del codigo). C estandar OBLIGA a que MAX_COUNT aparesca como simbolo referenciable (otra cosa es lo que pueda optimizar el linker)C++11 extiende esto todavia mas permitiendonos definir funciones constantes (resolubles en tiempo de compilación) con constexpr, de forma que si escribimos por accidente codigo que el compilador no puede resolver mientras compila, fallará con un error.No solo eso... las funciones inline (de C++ de siempre) generan más codigo pero la diff de performance puede ser brutal.
Mi único reparo en usar C++ no es técnico sino "social": una empresa tiene que decidir entre uno y otro sopesándo la mayor o menor facilidad para encontrar recursos idóneos. En mi empresa por ejemplo, tenemos un programador "C++" es en realidad un programador C. Si no ocurriera que yo personamente me puedo ocupar de entrenarlo adecuadamente, tal vez (solo tal vez) usaría C.
Saludos
--
Respondo entre lineas :-)El 21 de agosto de 2014, 16:12, Fernando Cacciola <fernando...@gmail.com> escribió:
Hola Martín,Lógicamente estoy de acuerdo con lo que decís, pero quería comentar un par de puntos:
2014-08-21 15:47 GMT-03:00 martin ribelotta <martinr...@gmail.com>:
Primero que nada, vamos a poner algunas cosas facticas en claro:
* Mentira que C++ requiera memoria dinamica. operator new y delete pueden sobrecargarse para que no retornen nada o sean puntos de trap al ser usadas.Por otro lado, por default usa el heap y uno podría argumentar que C++ en embebidos requiere mayor expertise por parte del programador que en C.
Si no hay runtime de SSOO (tipico caso bare metal) new y delete fallan estrepitosamente al linkear porque refieren a malloc y free o a sbrk (peor todavia). Asi que la unica manera de tener algo andando de eso es sobrecargarlas con algun stub.
Por logica, y agregando a lo que dice Mariano en otro mail, nada salva a un programador de hacer idioteces :-D
Lo unico que requiere memoria dinamica son las librerias STL las cuales estan fuera de discución dentro del ambito embmebido (salvo que alguien logre una implementación determinista en el uso de memoria)Justamente en *estos dìas* hay un grupo de trabajo en formac ión dentro del comité de estandarización del C++ tratando el tema embedded, y uno de los puntos es allocator para la STL que permita evitar el uso del heap.
Excelente noticia!!!! De todas formas, yo lo usaria con extremo cuidado, porque los templates en general, permiten esconder cosas muy feas como news y deletes extraños o mucha generación de codigo duplicada... Siempre hay que usar las cosas con criterio, por desgracia, no siempre estan tan a la vista esos criterios.
Ahi, C tiene la ventaja a la cual hace referencia Linus que se puede resumir en una frace del gran filosofo, numerologo, astrologo, limpiador de baño y vendedor de productos Avon "Anonimo":"En C es muy fácil pegarse un tiro en la pierna, en C++ es mucho mas difícil, pero cuando ocurre, te la vuelas"* RTTI es parte de C++ desde hace bastante poco, generalmente se puede desactivar sin ningun problema con el consiguiente ahorro de recursos en runtime.* Las excepciones son otro tanto, no solo se puede desactivar para que el compilador de error al tratarla de usar, sino que simplemente con NO USARLAS ya no ocupa lugar en el runtime.En realidad, hay un footprint aún cuando no las uses (e incluso usando -no_exception en gcc). Es una de las cosas que se están tratando.El Viernes pasado en el SASE, Daniel Gustson hizo una presentación muy interesante donde explicó como sacarse todo ese foorprint de encima en el caso de gcc. No es nada que uno vaya a saber naturalmente (y dudo que en google), pero estos chicos de Taller lo hicieron y Daniel puede explicarlo acá en la lista llegado el caso.
Fuck! Me lo perdí, si sos tan amable, indicame cual era la charla así despues busco las presentaciones en la pagina del SASE...
En su momento, logre (con gcc) tener andando C++ sin consumir mas de lo que el mismo programa en C haría, pero esto puede no ser cierto para otros compiladores o versiones del mismo o runtimes o fases de la luna jajajaja.
* En experiencia propia, todo lo anterior incluso activado, ocupa en un Cortex-M4 usando gcc 4.7 y los stubs correspondientes para evitar codigo innecesario (manteniendo el 100% de la funcionalidad) apenas 16K de flash y algunos bytes mas de RAM (menos de 64 pero no recuerdo el numero justo ahora).Totalmente. Y para los casos donde esos 16K es prohibitivo, hay cosas puntuales que se pueden hacer (como lo que expuso Daniel en el SASE)Por otro lado, las ventajas (técnicas) que yo veo de C++ sobre C en sistemas embebidos son:* Seguridad de tipos: C++ es mas estricto en los castings y permite mayor expresividad a la hora de manejar y definir tipos. Muchas de esas mejoras están en C99 y como extenciones en otros C, pero C++ las incorpora oficialmente al lenguaje.* Eficiencia: C++ puede generar codigo mas eficiente para depende que tareas:const int MAX_COUNT = 10;...for(int i=0; i<MAX_COUNT; i++) { ... }Genera mejor codigo que su equivalente en C, ya que, MAX_COUNT no está obligado a aparecer en el lado del linker como entidad referenciable (salvo que se lo referencie en alguna parte del codigo). C estandar OBLIGA a que MAX_COUNT aparesca como simbolo referenciable (otra cosa es lo que pueda optimizar el linker)C++11 extiende esto todavia mas permitiendonos definir funciones constantes (resolubles en tiempo de compilación) con constexpr, de forma que si escribimos por accidente codigo que el compilador no puede resolver mientras compila, fallará con un error.No solo eso... las funciones inline (de C++ de siempre) generan más codigo pero la diff de performance puede ser brutal.Eso puede o no ser cierto, a veces (cuando la funcion hace cosas muy simples, como leer un registro o calcular un valor) puede ser mas constoso crear y destruir el marco de llamada que ejecutar el codigo en si inline (tanto en codigo como en tiempo de ejecución) aunque, para casos normales, lo mas comun es lo que decis vos
Mi único reparo en usar C++ no es técnico sino "social": una empresa tiene que decidir entre uno y otro sopesándo la mayor o menor facilidad para encontrar recursos idóneos. En mi empresa por ejemplo, tenemos un programador "C++" es en realidad un programador C. Si no ocurriera que yo personamente me puedo ocupar de entrenarlo adecuadamente, tal vez (solo tal vez) usaría C.
Y eso es lo que, normalmente, define el uso de cualquier tecnologia:* ¿Cuanta gente lo sabe usar?* ¿Que tan productivos pueden ser para tal problema mis recursos humanos?* ¿Cuanto le lleva a mi gente adaptarse al conjunto de herramientas?* ¿Cuanto cuesta en dinero y en horas/hombre esas herramientas?* ¿Estoy seguro de poder cumplir con los requerimientos con esas herramientas o es un salvavidas de plomo?Normalmente a los ingenieros tekkies (como yo) no nos gusta hacernos estas preguntas, pero generalmente es lo que define el 90% del problema.
Hola, queria solamente realizar un pequeño aporte al hilo. Me da la impresion que para diseño de sistema embebidos el desarrollo se esta moviendo a lenguages más abstractos basados en modelos computacionales (Domain Specific Modeling Language). Luego la fase implementiva (C, C++, etc) es generada automaticamente. Asi, por un lado se pierde expresividad, porque un DSML es justamente un lenguage hecho a medida, para ganar en verificación o predicibilidad que esta limitada cuando se usa un lenguage de proposito general como C, C++ etc. Por otro lado, también permite hacerse independiente de la implementación.
quantity<electric_potential,complex_type> v = complex_type(12.5,0.0)*volts; quantity<current,complex_type> i = complex_type(3.0,4.0)*amperes; quantity<resistance,complex_type> z = complex_type(1.5,-2.0)*ohms;