Go Down

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

skywodd

En lisant l'erreur il semblerai que le probléme ce situe dans duinOS.h à la ligne 14 soit :
Code: [Select]
#include <avr/eeprom.h>
Petit coup d'oeil rapide sur la ligne au dessus :
Code: [Select]
/* EEPROM routines used only with the WinAVR compiler. */
traduit : Les routines EEPROM ne peut être utilisé qu'avec winAVR.

Je suis sur que la compilation n'est pas faite sous windows ;)
Pour empêché ce probléme sous linux/mac il faut commenter cette ligne.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Telson

Salut,

Merci de te pencher sur mon problème mais je fais quoi?

J'ai pas compris en fait hein?? J'suis désolé.

Jean-François

Tu mets la ligne comme si c'était un commentaire

Code: [Select]
// #include <avr/eeprom.h>
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Telson

#18
Aug 26, 2011, 12:42 pm Last Edit: Aug 26, 2011, 12:46 pm by Telson Reason: 1
Bonjour,

Alors j'ai réussi à faire fonctionner (sous windows) la mega2560 + arduino0022 + Duinos V0.3.

Pour ce, faire la mise à jour (r32) de Duinos V0.3 avec le code SVN via Turtoise et remplacer le fichier port.c comme proposé au dessus.

Pour le moment j'ai testé uniquement l'exemple des leds qui clignotent simultanément.

Merci à skywodd pour son aide et sont fichier providentielle ainsi que pour tous ceux qui m'ont répondu


Telson

#19
Aug 26, 2011, 11:29 pm Last Edit: Aug 29, 2011, 03:14 pm by Telson Reason: 1
Bonjour,

Alors des nouvelles de Duinos....j'essai de faire fonctionner deux tâches similtanément, ces tâches sont des commandes de moteur pas à pas. Cependant, les moteurs tournent continuellement et ce même lorsque je supprime le contenu  de la fonction loop.

Je suppose donc que les Taskloop suffise pour faire fonctionner les moteurs????

voici mon code:

Code: [Select]

#include <Stepper.h>

const int stepsPerRevolution = 200;  // Nombre de pas par révolution

// initialize the stepper library on pins 8 through 11:
Stepper MD(stepsPerRevolution, 22,23,24,25);
Stepper MG(stepsPerRevolution, 32,33,34,35);

// Déclaration des deux tâches parallèles  
 
taskLoop(MoteurG)  
{  
 MG.step(20);
}  

 
taskLoop(MoteurD)  
{  
 MD.step(20);
}  


// Fonctions habituelles  
void setup()    
{      
 

 
 // set the speed at 60 rpm:
 MG.setSpeed(60);
 MD.setSpeed(60);
 // initialize the serial port:
 Serial.begin(9600);  
   
 // Création des deux tâches  
 createTaskLoop(MoteurG, NORMAL_PRIORITY);  
 createTaskLoop(MoteurD, NORMAL_PRIORITY);  
}  


void loop()                      
{  
 Serial.println("Début de boucle");
 // Deux tâches en parallèle pendant 2 secondes  
 Serial.println("Les deux moteurs");
 resumeTask(MoteurG);  
 resumeTask(MoteurD);  
 delay(2000);  
 
 // Puis seulement le moteur gauche pendant 5 secondes
 Serial.println("Le moteur gauche");  
 suspendTask(MoteurD);  
 delay(5000);  

 // Puis seulement le moteur droit  pendant 5 secondes
 Serial.println("Le moteur droit");
 resumeTask(MoteurD);  
 suspendTask(MoteurG);  
 delay(5000);  
 // et on recommence (loop)
 Serial.println("En fin de boucle");
}  



Qu'en pensez vous ???

Telson

bonjour,

Quelqu'un aurait déjà t'il utilisé un capteur ultrason SR HC04 avec Duinos, pour ma part il exécute 8-10 mesures puis plus rien j'suis obligé de re uploader le programme....

Merci.

cordialement.

Telson

Suite aux problèmes :

Duinos et Serial.println, après 8-10 affichages tout se fige.....

Le problème vient de Serial.println(duration), cela fait planter le programme.....
Cette variable est une unsigned long avec bien sur duration = duration/58.....

Lorsque j'utilise Serial.println("D") pour marquer le début de la fonction loop et lorsque je place Serial.println("F") pour marquer la fin de la boucle loop il n'y à aucun problème.

Par contre si je met, Serial.println(345) le programme se fige et avec Serial.println(32) le programme fonctionne.
Les valeurs D, F, 32 et 345 sont des valeurs d'essais choisies un peu,beaucoup, au hasard.....


Voici une première réponse de Julien, que je remercie sur PoBot :
http://www.pobot.org/Premiers-pas-avec-DuinOS.html#forum1360

"Conflit dans les interruptions matérielles nécessaires à gérer la liaison série et à gérer l'ordonnanceur (DuinOS).
C'est très sensible, il faut mieux mettre l'affichage hors du programme temps réel, dans une tâche dédiée à l'affichage, qui n'est pas sensible au temps"


Donc, est ce que quelqu'un aurait trouvé la solution ou une parade?????

Sinon, vous me direz MAIS pourquoi utiliser Serial.println dans le programme hein???!!! Ba c'est très pratique pour voir comment celui-ci se déroule......


kollibar

Bonjour,
je profite de ce topic à propos de multitache.

J'envisage de me mettre à l'arduino pour une application assez précise (contrôle de température de différent appareillage et gestion de groupes froids). Pour cela je vais avoir besoin de multitâche (le bloc arduino doit être autonome et pouvoir être paramétré facilement, sans pendant ce temps arrêter le contrôle des autres éléments). Je pourrais faire sans mais ça sera plus chiant...alors autant utiliser le rtos puisque ça existe!

J'hésite aujourd'hui entre un arduino mega2560 et un chipkit max32.

Arduino est passé en version 1.0. en fouillant sur le site de duinos il semble que la dernière version de celui-ci serait compatible arduino 1.0.
skywodd, est ce que ton patch pour mega2560 sera toujours fonctionnel pour duinos et arduino 1 ??

Sinon est ce que ça vous semble envisageable de mettre freertos sur un chipkit max32 (le pic32 est supporté par freertos mais va surement y avoir de la bricole à faire ... j'ai pas encore trouvé si quelqu'un l'avais déjà utilisé)?

Ou alors est ce que l'arduino DUE va sortir un jour ? est ce utopiste de penser que duinos pour être adapter pour? (freertos supporte le proc arm Cortex-M3) ??

Si je trouve un truc un peu plus puissant que l'arduino mega, j'trouverai toujours la possibilité d'utiliser les MHz supplémentaires  ;) !

Merci!

Thomas

skywodd


J'hésite aujourd'hui entre un arduino mega2560 et un chipkit max32.

Question de budget mais surtout de matériels et de connaissances, les pic32 sont des micro-contrôleurs PIC de microchip.
Par conséquent les codes source utilisant des registres pour AVR, interruptions ou autre ne compilerons pas.
De bonne connaissance en prog PIC, Mplab, et un debuggeur PICKIT3 sont plus que conseillé.


Arduino est passé en version 1.0. en fouillant sur le site de duinos il semble que la dernière version de celui-ci serait compatible arduino 1.0.
skywodd, est ce que ton patch pour mega2560 sera toujours fonctionnel pour duinos et arduino 1 ??

Il faudrait vérifier mais normalement ça devrait marcher pareil, au pire c'est pas bien compliqué à (re)modifier.


Sinon est ce que ça vous semble envisageable de mettre freertos sur un chipkit max32 (le pic32 est supporté par freertos mais va surement y avoir de la bricole à faire ... j'ai pas encore trouvé si quelqu'un l'avais déjà utilisé)?

C'est envisageable et même déja fait http://www.freertos.org/port_PIC32_MIPS_MK4.html
Par contre un debuggeur compatible PIC32MX est obligatoire sinon c'est impossible de faire du debug.


Ou alors est ce que l'arduino DUE va sortir un jour ? est ce utopiste de penser que duinos pour être adapter pour? (freertos supporte le proc arm Cortex-M3) ??

Pourquoi cherche tu absolument quelque chose "arduino" ?
Si tu compte vraiment partir sur une solution RTOS regarde du coté des STM32(L / VL)(M4) discovery, des cartes LPC1768 / LPC1769.
Le kernel FreeRTOS est porté en natif sur ces plateforme depuis trés longtemps.
Et codé en vrai c/c++ sera beaucoup plus véloce que codé en arduino, par contre ça demande un temps d'adaptation.


Si je trouve un truc un peu plus puissant que l'arduino mega, j'trouverai toujours la possibilité d'utiliser les MHz supplémentaires  ;) !

Vouloir un maximum de MHz ne changera pas grand chose, c'est le RTOS qui gére les temps d'éxécution, de plus a moins d'avoir un cpu multi-coeur ce n'est jamais du vrai multitâche ;)
Il faut savoir peser budget, connaissance, et performance ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

kollibar

Bonsoir,

afin d'apprendre la programmation de microcontroleur j'ai démarré avec un arduino mega2560.

J'ai bien installé arduino 1.0, DuinOS(version 0.4 en svn) et le patch port.c afin de l'utiliser avec la mega2560.

J'ai essayé de faire fonctionner le code trouvé à l'adresse: http://www.pobot.org/Premiers-pas-avec-DuinOS.html. Le code compile et s'upload correctement, mais à l'utilisation, les LEDs clignotent beaucoup trop vite (20 à 30x plus rapide qu'attendu).

J'imagine qu'il y a un pb de paramétrage dans les fichiers de duinos, j'ai déjà pas mal cherché mais rien n'y fait le clignotement est toujours trop rapide!

Est ce que ce code fonctionne correctement sur un arduino UNO ??
Est ce que quelq'un a des idées pour que ça fonctionne?

Merci
Thomas

skywodd


J'ai essayé de faire fonctionner le code trouvé à l'adresse: http://www.pobot.org/Premiers-pas-avec-DuinOS.html. Le code compile et s'upload correctement, mais à l'utilisation, les LEDs clignotent beaucoup trop vite (20 à 30x plus rapide qu'attendu).

20 à 30x plus !? C'est beaucoup !


J'imagine qu'il y a un pb de paramétrage dans les fichiers de duinos, j'ai déjà pas mal cherché mais rien n'y fait le clignotement est toujours trop rapide!

Ce n'est pas une question de paramétrage de duinos, ou alors c'est au niveau de la configuration du timer0 ...
A tu essayais avec la version 0.3 par pure curiosité ?


Est ce que ce code fonctionne correctement sur un arduino UNO ??
Est ce que quelq'un a des idées pour que ça fonctionne?

Je n'est pas de carte sous la main pour le moment, je test ça demain aprés-midi en 1.0 + duinOS 0.4 patché ;)
(2h du matin ... mais qu'est ce que je fou encore sur le forum moi :smiley-mr-green:)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

kollibar

Ça fonctionne avec arduino 0021 + duinos v0.3 + patch...

Dommage j'aurais bien utilisé arduino 1.0 au lieu de 0021...

Et avec un arduino UNO, ça donne quoi?
Thomas

skywodd


Ça fonctionne avec arduino 0021 + duinos v0.3 + patch...

Dommage j'aurais bien utilisé arduino 1.0 au lieu de 0021...

Bon j'ai refait mon patch pour duinOS 0.4 et arduino 1.0 ;)
Une ligne critique avait était modifié, affectant la gestion de tout ce qui est lié au temps, c'est maintenant réglé ;)

Le patch + le nouveau boards.txt pour arduino 1.0
-> http://code.google.com/p/duinos/issues/detail?id=7
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

kollibar

Waouu!...
ça marche! génial, Merci!
Thomas

skywodd


Waouu!...
ça marche! génial, Merci!

Pas de quoi ;)

Si ça marche pour toi aussi (et si tu as un compte google) écris un petit commentaire sur la page de mon patch pour dire que tout va bien.
Ça permettra aux autres utilisateurs de duinOS d'avoir un avis autre que celui du concepteur du patch ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up