Go Down

Topic: multitarea (Read 3482 times) previous topic - next topic

surbyte

Reemplaza MenuBackEnd.h por esto que te adjunto


Resuelto!!
Compilé con IDE 1.6.0 tu código.


Code: [Select]
C:\Program Files (x86)\Arduino/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin/arm-none-eabi-gcc -Os -Wl,--gc-sections -mcpu=cortex-m3 -TC:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_due_x/linker_scripts/gcc/flash.ld -Wl,-Map,C:\Users\Ricardo\Documents\Arduino\Output/A_general.cpp.map -o C:\Users\Ricardo\Documents\Arduino\Output/A_general.cpp.elf -LC:\Users\Ricardo\Documents\Arduino\Output -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group C:\Users\Ricardo\Documents\Arduino\Output/syscalls_sam3.c.o C:\Users\Ricardo\Documents\Arduino\Output\A_general.cpp.o C:\Users\Ricardo\Documents\Arduino\Output\Wire\Wire.cpp.o C:\Users\Ricardo\Documents\Arduino\Output\LiquidCrystal\LiquidCrystal.cpp.o C:\Users\Ricardo\Documents\Arduino\Output\AccelStepper\AccelStepper.cpp.o C:\Users\Ricardo\Documents\Arduino\Output\AccelStepper\MultiStepper.cpp.o C:\Users\Ricardo\Documents\Arduino\Output\variant.cpp.o C:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_due_x/libsam_sam3x8e_gcc_rel.a C:\Users\Ricardo\Documents\Arduino\Output/core.a -Wl,--end-group -lm -gcc
C:\Program Files (x86)\Arduino/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin/arm-none-eabi-objcopy -O binary C:\Users\Ricardo\Documents\Arduino\Output/A_general.cpp.elf C:\Users\Ricardo\Documents\Arduino\Output/A_general.cpp.bin

Sketch uses 43.476 bytes (8%) of program storage space. Maximum is 524.288 bytes.



AGU88

Bueno, deciros que la version del IDE a cambiado, ahora uso la 1.6.7, he descargado la supuesta actualizacion de la libreria backend, la cual esta dentro de una archivo llamado wiring, el cual incluye mas librerias..
Con el ejemplo usado por surbyte lineas mas arriba, tampoco funciona, da el siguiente error:


Code: [Select]
Arduino:1.6.7 (Windows 8), Placa:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

HelloMenu:21: error: 'menuUseEvent' was not declared in this scope

 MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);

                                ^

HelloMenu:21: error: 'menuChangeEvent' was not declared in this scope

 MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);

                                             ^

exit status 1
'menuUseEvent' was not declared in this scope

  Este informe podría tener más información con
  "Mostrar salida detallada durante la compilación"
  activala desde Archivo > Preferencias


Por eso exactamente pase a usar una version anterior de IDE.
Seguire en pruebas! Gracias

AGU88

Perdona, coincidimos antes en espacio tiempo en el envio del mensaje y no lo vi.

IDE 1.6.7 eliminado e instalado la V1.6.0.

Cambiado la libreria de menubackend por la que tu has mandado, ya estamos en lugares comunes...


surbyte


AGU88

Funciona...funciona lo mismo que me funcionaba en la version 1.0.6, lo unico que ahora lo cargo desde la version 1.6, que no es poco, pero no es por lo que pregunte al incio.
El resto...sigo con la misma duda que en el incio, Sistema Multitarea

Donde debo de incorporar la lectura de las temperaturas, que son las que me dan la impresion de que me paraliza todo?

Ejemplo, me meto en uno de los submenus que he creado, y en el hago la llamada a un void que ejecuta la accion de poner en marcha el motor paso a paso, como la libreria utilizada para esto, lo que hace es mandar pulsos al driver pololu, para que avance la posicion, si mientras esta alcanzando esa posicion, se ejecuta la lectura de la temperatura, este no se mueve como debe.

Alguien a entendido, la duda con la que llevo desde el inicio, sistema multitarea, leer temperatura mientras hago otras cosas.

Cierto es, que surbyte al inico me dijo "Y claro que millis() es la respuesta pero no como te imaginas."
Pues aqui sigo, hechando imaginacion, pero sin salir del bache..

Nuevamente, gracias por la ayuda prestada.

chema_zgz

#20
Mar 11, 2016, 10:10 am Last Edit: Mar 11, 2016, 10:42 am by chema_zgz
¿Por qué, en vez de mezclar todo de vez, e intentar resolver el escenario final, no empiezas uniendo de forma simple dos funcionalidades?

Digamos, pasar de momento de menús, e intentar mostrar, en pantalla, la lectura de digamos, un potenciómetro, o por qué no, ya la temperatura, mientras por ejemplo, mueves el motor en función de esa lectura.

Me ha parecido entender que esa es la base del proyecto (actuar en dispositivos según lo leído en otros).

Una vez que asimiles y resuelvas esa simple situación, comprendiendo todo lo que se hace, podrás ir complicando, pero quizá meter todas las piezas de golpe...

Más que nada, es lo que yo haría. Es el punto de vista del novato, que usa esta táctica para ir entendiendo y asimilando cómo ir programando en esto.

Pienso en que para que todo funcione bien, la esencia es controlar el flujo de las variables, cómo las vas actualizando y aprovechando (actualizar globales, o pasarlas como parámetros de funciones), y siempre intentar devolver el flujo al loop lo antes posible. El asegurar un loop que tarde lo mínimo en recorrerse es lo que dará un funcionamiento con aspecto de fluido.

surbyte

#21
Mar 11, 2016, 03:55 pm Last Edit: Mar 11, 2016, 04:01 pm by surbyte
Reconoce que es dificil seguirte con semejante programa.
Ocupa toda la pantalla en archivos desplegados y para ver donde sigue hay que seguir desplegando.

Yo haría lo mismo que dice chema.
Ir de a poco, consiguiendo existos parciales y viendo que lo que agrego no compromete nada anterior.
Voy a ver como me las arreglo pero simulando eso lleva mucho trabajo y tiempo que no tengo.

Quote
El resto...sigo con la misma duda que en el incio, Sistema Multitarea
A ver.. releyendo tu comentario y a costa de ser pesado te diré por ultima vez.

ESTO NO ES MULTITAREA.

AGU88

NO NO NO!!, no te molestes en montar todo esto en simulacion que con un loco en el foro ya nos llega...
Yo estoy trabajando sobre actuadores y sensores ya montados en una caja, es decir, ya tengo todo montado...menos el programa.. Ese a sido el mayor problema, que por querer avanzar deprisa e tropezado.

Gracias, no os preocupeis...hare lo que decis, y segun encuentre problemas al ejecutar simultaneamente os pregunto.

Veo totalmente logico que os cueste seguir el programa, asi que tomare el camino que comentais, os ire informando.

GO_zalo

no he leido todo el post la verdad, pero pensando pensando en multitarea he pensado en usar multiples arduinos, y luego en multiples arduinos en una misma placa y me he topado con esto



Un arduino como base programadora y encima apilas cuantos shieds arduino quieras y se comunican entre ellos via I2c

chema_zgz

Vaya monstruo! Llegados a esas necesidades, quizá existan otros entornos más adecuados???

Realmente, una de las cosas atractivas que le veo a Arduino, para los que empezamos, es el que no sea multitarea (de hecho, los hombres siempre se dice que no sabemos hacer más de una cosa a la vez, ¿no?, al menos bien, así que nos viene ideal. Las multitarea siempre han sido las mujeres).

Una vez que te adaptas a la estructura de setup y loop, adaptar el estilo para que no se bloquee el flujo, llevar y traer las variables de forma adecuada, pensar para que esté libre, rodando por el loop, dispuesto a aceptar las entradas de pulsadores, de encoders, o de lo que sea, y reaccionando rápido sobre los dispositivos que se actúan, tiene algo de arte, que cuesta captar, pero que una vez que se asimila tiene cierto encanto, y puede servir para eliminar vicios adquiridos en otros entornos de programación en los que hay detalles que tienen que cuidarse menos.

GO_zalo

si bueno pero imagina que quieres conectar un LCD por ejemplo que te ocupa casi todo los pines (ya se que puedes usar expansores I2c) podrias crear todo un sistema de menús en un arduino mientras solo le mandas una trama de parámetros y mensajes para que haga el trabajo sucio usando las librerías que están disponibles, (y no están para expansores I2c)

Tambien para partes pesadas de calculos, temporizadores ADC ...

surbyte

No es por nada Go_zalo pero esa torre de arduinos cuesta mas cara un raspberry Pi 2 que tiene todas las I/O necesarias, salvo AD si mal recuerdo pero bueno supera en potencia de calculo lo que intentes hacer con Arduino.
Hay un limite para todo, me parece.

Ahora, si uno quiere usar eso que lo haga.
Si tienes que tomar datos de 20 sitios con sensores usado I2C esta mas que interesante. Pero distribuidos.
Son criterios.

GO_zalo

No es por nada Go_zalo pero esa torre de arduinos cuesta mas cara un raspberry Pi 2 que tiene todas las I/O necesarias, salvo AD si mal recuerdo pero bueno supera en potencia de calculo lo que intentes hacer con Arduino.
Hay un limite para todo, me parece.

Ahora, si uno quiere usar eso que lo haga.
Si tienes que tomar datos de 20 sitios con sensores usado I2C esta mas que interesante. Pero distribuidos.
Son criterios.

totalmente, pero esto es un foro de arduino ajajaj no de cosas optimas y aqui si pudiéramos instalar Windows 10 en un arduino lo haríamos jajaj

AGU88

GO_zalo, debo de dar la razon tanto a surbyte como a chema_zgz....

Estructurar la forma de programacion es la clave, yo estaba encabezonado en el sistema multitarea, y durante las pruebas de esta tarde he conseguido encaminarme hacia mi idea de sistema "multitarea" sin que en realidad lo sea, como, en base a usar cada cosa por separado...y he notado diferencia...

Consigo que no es poco leer los botones sin que sean interrupcoines dentro de un submenu y describir un mensaje, ahora toca que eso mueva cosas, esta noche probare..si puedo..

Gracias por la paciencia, y pido disculpas por mi cabezoneria.

surbyte

Pero no te lo dijo por eso...  era para que vieras que asi si se puede hacer multitarea.
Pero bueno, veamos como mejorar ese código.
Aisla el menu y los sensores y presentalo en la panatalla y vemos como se comporta.

Go Up