Go Down

Topic: Multitâches DuinOS (Read 6853 times) previous topic - next topic

kollibar

Salut skywodd!

Dis moi, je test un peu le matos que je vais utiliser pour mon montage avec DuinOS, pour l'instant j'utilise le shield LCD+keypad que tu as présenté sur ton blog.
Celui-ci n'est pas fonctionnel avec DuinOS, en tout cas avec DuinOS+mega2560.

J'ai un peu regardé le code de la librairie LiquidCrystal, j'ai pas trouvé pourquoi ça ne fonctionnerai pas avec DuinOS. Mais c'est un excellent aprentissage du c++ pour arduino (je connais bien le python, pour le reste je balbutie!)
Aurais-tu une idée??

Je sens que je risque d'avoir le même genre de problème pour les autres shields... (je compte utiliser un shield ethernet+carte SD)
Merci beaucoup
a+
Thomas

skywodd


Dis moi, je test un peu le matos que je vais utiliser pour mon montage avec DuinOS, pour l'instant j'utilise le shield LCD+keypad que tu as présenté sur ton blog.
Celui-ci n'est pas fonctionnel avec DuinOS, en tout cas avec DuinOS+mega2560.

Tu as testé la shield sans duinOS avant pour être sure de son bon fonctionnement ?


J'ai un peu regardé le code de la librairie LiquidCrystal, j'ai pas trouvé pourquoi ça ne fonctionnerai pas avec DuinOS. Mais c'est un excellent aprentissage du c++ pour arduino (je connais bien le python, pour le reste je balbutie!)
Aurais-tu une idée??

Si tu ne spécifie pas la broche RW la librairie LiquidCrystal se base sur une série de timings prédéfini pour les transfert de données.
Comme duinOS altère plus ou moins ces timings ça peu être la cause du probléme.

Essaye de placer les morceaux de codes utilisant le lcd en section critique (morceau de code devant être exécuté en une seul fois) :
Code: [Select]
portENTER_CRITICAL();
lcd.xxxx();
portEXIT_CRITICAL();

Ils seront exécuté comme dans un programme normal et les autres taches seront mis en pause jusqu'à la fin de la section critique.


Je sens que je risque d'avoir le même genre de problème pour les autres shields... (je compte utiliser un shield ethernet+carte SD)

Tu devra gérer toi même tout cela, duinOS est basé sur FreeRTOS, il faut avoir une vu d'ensemble du programme et gérer les accès aux ressources.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

kollibar



Dis moi, je test un peu le matos que je vais utiliser pour mon montage avec DuinOS, pour l'instant j'utilise le shield LCD+keypad que tu as présenté sur ton blog.
Celui-ci n'est pas fonctionnel avec DuinOS, en tout cas avec DuinOS+mega2560.

Tu as testé la shield sans duinOS avant pour être sure de son bon fonctionnement ?

Oui, pour l'instant, j'apprend à m'en servir, alors je ne fais que des petits bout de code, que je test avec DuinOS et sans.



J'ai un peu regardé le code de la librairie LiquidCrystal, j'ai pas trouvé pourquoi ça ne fonctionnerai pas avec DuinOS. Mais c'est un excellent aprentissage du c++ pour arduino (je connais bien le python, pour le reste je balbutie!)
Aurais-tu une idée??

Si tu ne spécifie pas la broche RW la librairie LiquidCrystal se base sur une série de timings prédéfini pour les transfert de données.
Comme duinOS altère plus ou moins ces timings ça peu être la cause du probléme.

Essaye de placer les morceaux de codes utilisant le lcd en section critique (morceau de code devant être exécuté en une seul fois) :
Code: [Select]
portENTER_CRITICAL();
lcd.xxxx();
portEXIT_CRITICAL();

Ils seront exécuté comme dans un programme normal et les autres taches seront mis en pause jusqu'à la fin de la section critique.

Cool, merci, la broche RW n'est pas utilisable avec le shield en question (ou alors faudrait désouder/resouder)!
Par contre, j'ai modifié la librairie LiquidCrystal en utilisant portENTER_CRITICAL();/portEXIT_CRITICAL(); dans les fonctions bas niveaux gérant la communication avec l'écran. Et ça marche sans problème!

Merci beaucoup
Thomas

Thibthib02

Bonjour,

Je débute avec les Arduino et je souhaiterais utiliser DuinOS. Quelqu'un l'utilise-t-il avec cette board??

Merci d'avance pour vos réponses.

kollibar


Je débute avec les Arduino et je souhaiterais utiliser DuinOS. Quelqu'un l'utilise-t-il avec cette board??

Salut!
Avec quelle board compte tu l'utiliser? pour ma part, je l'utilise avec un arduino mega2560 rev2!
Thomas

skywodd

Bonjour,


Je débute avec les Arduino et je souhaiterais utiliser DuinOS. Quelqu'un l'utilise-t-il avec cette board??

Ton topic a été fusionné avec celui déja existant portant sur le même sujet, relie le topic en entier et tu auras ta réponse ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Thibthib02

Merci bien, je vais étudier la chose...

Thibthib02

Bon, j'ai tout essayé, pas moyen de compiler quoi que ce soit... :smiley-red:
Quelqu'un pourrait-il zipper son dossier arduino qui fonctionne avec la 2560 MEGA et la mettre en ligne??
Merci d'avance.

Thibthib02

Personne pour m'aider? :smiley-red:

skywodd

Zipper tout le dossier arduino ça prend un pas mal de place ;)

Tu as suivis la procédure d'installation à la lettre et ça marche pas ?
Qu'est qu'il te sort comme erreurs quand tu compile ?
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Thibthib02

Oui c'est vrai que c'est un peu gros comme dossier. C'est bien dommage. J'ai fait plusieurs fois l'installation à la lettre, avec plusieurs versions de l'IDE et toujours la même erreur à la compil. Même avec des exemples trouvés sur le net. Le même problème que Telson avait. Voici l'erreur :


In file included from E:\arduino-0021\hardware\arduino\cores\arduino.DuinOS/DuinOS.h:14,
                 from E:\arduino-0021\hardware\arduino\cores\arduino.DuinOS/WProgram.h:13,
                 from E:\arduino-0021\hardware\arduino\cores\arduino.DuinOS\main.cpp:1:
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h: In function 'void eeprom_read_block(void*, const void*, size_t)':
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:290: error: ISO C++ forbids incrementing a pointer of type 'void*'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:290: error: ISO C++ forbids incrementing a pointer of type 'const void*'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:290: error: invalid conversion from 'const void*' to 'const uint8_t*'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:290: error:   initializing argument 1 of 'uint8_t eeprom_read_byte(const uint8_t*)'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h: In function 'void eeprom_write_block(const void*, void*, size_t)':
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:398: error: ISO C++ forbids incrementing a pointer of type 'void*'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:398: error: ISO C++ forbids incrementing a pointer of type 'const void*'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:398: error: invalid conversion from 'void*' to 'uint8_t*'
e:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/avr/eeprom.h:398: error:   initializing argument 1 of 'void eeprom_write_byte(uint8_t*, uint8_t)'

Merci beaucoup pour ton aide.

skywodd


Oui c'est vrai que c'est un peu gros comme dossier. C'est bien dommage. J'ai fait plusieurs fois l'installation à la lettre, avec plusieurs versions de l'IDE et toujours la même erreur à la compil. Même avec des exemples trouvés sur le net. Le même problème que Telson avait. Voici l'erreur :

Ok ! Je vois ou est le probléme ;)

L'erreur de compilation est du à un conflit entre la version de avr-gcc fourni avec l'ide et la version utilisé pour coder DuinOS.
Il y avait justement un probléme avec le fichier eeprom.h par le passé (toujours pas réglé apparemment).

Deux solutions :
- pas trés propre mais 100% fonctionnelle :
Dans duinos.h ligne ~14 :
Mettre en commentaire l'include de eeprom.h:
Code: [Select]
//#include <avr/eeprom.h>

- mettre à jour la chaine win-avr :
http://skyduino.wordpress.com/2012/07/07/hack-utiliser-teensyduino-avec-une-carte-arduino-leonardo-ou-compatible-leonardo/
(étapes 1, 2 et 3 uniquement)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Thibthib02

Je vais essayer ça! Merci.

Thibthib02

#43
Jul 23, 2012, 10:31 am Last Edit: Jul 23, 2012, 10:43 am by Thibthib02 Reason: 1
Bon, il y a du mieux. Mais ça ne veut toujours pas compiler. :0
J'ai cette erreur maintenant :

core.a(port.c.o): In function `vPortYieldFromTick':
C:\Arduino DuinOS\arduino-0021\hardware\arduino\cores\arduino.DuinOS\DuinOS/port.c:430: undefined reference to `arduino_increment_millis'

Une idée?

EDIT : J'ai trouvé la solution, j'ai appliqué l'astuce de cette page :
http://code.google.com/p/duinos/issues/detail?id=4

Merci pour votre aide précieuse!

kollibar

Salut Skywood!

J'avais laissé le projet arduino de côté, je m'y remet maintenant.

J'ai aujourd'hui un problème avec la librairie mprintf fournie avec DuinOS. (safe printf).

Pour info je suis sous ubuntu 12.04 avec arduino 1.0.1 et DuinOS 0.4 (voir plus haut).

Avec une board arduino Mega2560 + DuinOS, quand je fait un (initialisation de mprintf)
Code: [Select]
mprintf_init();
j'ai le message d'erreur suivant:
Quote
mprintf/mprintf.cpp.o: In function `mprintf_init()':
/usr/share/arduino/libraries/mprintf/mprintf.cpp:38: undefined reference to `xQueueCreateMutex'
collect2: ld returned 1 exit status


En compilant pour une board arduino uno + DuinOS, je n'ai pas de pb. J'ai essayé de fouiller un peu, mais je ne comprend pas l'origine du pb et je crains que mes maigres capacités ne suffisent pas pour trouver...
Aurais-tu une idée?

Merci, bonne soirée

Thomas

Go Up