--
-- 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 cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/CACtv%2Bif0hV4V5XOt96o1RH3zeD8zhMeUga8tXWOUeCKqAAs_uw%40mail.gmail.com.
Hola Gaspar, nosotros en su momento presentamos algo similar, como tal no pasabamos el dato sino un puntero que apuntaba a una sección del Heap.
Por simplicidad, lo ideal sería tener una única cola donde recibir las mediciones de todos los sensores y en lo posible por valor, no por referencia. Cómo debería implementarlo?.
Hola gaspar, en el código anterior tengo un error (por eso de andar
copiando y pegando), acá el código corregido:
Hola Gaspar!
Siendo C, te referis a pasarlo por copia y no por puntero?
Por que no usar una cola por sensor y que cada tarea de adquisicion haga un lock de su propia cola? Si la cola es compartida, todas las tareas deberian hacer un lock a la misma cola.
Ademas, para que perder un byte de memoria por valor adquirido para usarlo como ID, cuando podrias guardar cada cosa en su cola correspondiente?
Tambien te podrias plantear la necesidad misma de usar una estructura como tipo de dato para los valores del sensor:
la tarea toma un dato a intervalos que ya conoces y cada sensor generalmente mide un escalar (temperatura, presión, etc). Si el sensor fuese un acelerometro, podes crear una cola por cada escalar x, y, z. Generalizando, podes hacer que cada sensor indique cuantos escalares necesita y le inicias un array de n colas para ese sensor.
Me parece que asi como tenes tareas para capturar datos, tambien deberias tener las correspondientes para procesarlos. Una sola tarea de procesamiento con un arbol gigante de "cases" o "ifs" es un criadero de bugs.
--
-- 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 cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/CACtv%2BifU8Xmiw2FiJeNU7NULnorov7xdEuGneSNsMbNssX_vog%40mail.gmail.com.
una cola por sensor y que cada tarea de adquisicion haga un lock de su propia cola? Si la cola es compartida, todas las tareas deberian hacer un lock a la misma cola.
--
-- 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 cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/74a82833-211b-4843-837e-301693dcf212%40googlegroups.com.
Realmente estarías usando un espacio de memoria del máximo tamaño de las estructuras que estarías usando, por ello el uso de Union, que básicamente lo que hace es utilizar el mismo espacio de memoria para diferentes tipos de datos y su tamaño sería el tamaño mas grande del tipo de datos que pertenezca a la Union.
Podría ser diferente el criterio si tuvieras una línea de n dispositivos de la misma especie, de los cuales, incluso podrías desconocer a priori su cantidad (ej: un bus 1-wire). En un caso así, una tarea podría reportar el estado del bus completo en una única cola.
Otro concepto es que si copiás punteros te tenés que asegurar que nadie te sobreescriba el dato al que estás apuntando hasta que lo uses vos. Si copiás el dato no tenés este problema.
Por último para mi es mucho más sencillo conceptualmente tener una sola tarea que procese datos y una sola cola donde poner los datos a procesar. Además, cuando tengas que debuggear eso tenés que revisar en un solo lugar cuál fue el dato que se recibió.
En cuanto a que no conocías las uniones, te recomiendo que leas el libro de C de Kernighan & Ritchie, se lee super rápido (salvo que te pongas a hacer todos los ejercicios) y te da una muy buena idea del lenguaje C entero y de las partes más útiles de la librería estándar de C.
Saludos y éxitos con tu proyecto!