Go Down

Topic: Servo / OneWire et lag (Read 1 time) previous topic - next topic

skywodd


j'avais prévu le coup, j'ai du lm135 en stock, faudra que j'écrive les classes dérivées pour ce composant d'ailleurs.

Faire une classe dérivée pour un malheureux LM35 ?
J'ose même pas imaginer le reste du code ...
On est sur un µC avec 32Ko 29Ko (effectifs) de flash et 4Ko de RAM ne l'oublie pas ;)


j'en ai profité pour patcher la library pour disposer d'un contructeur par defaut et d'une méthode d'initialisation. Cela permet de déclarer en dynamique un objet via un template et d'activer le onewire quand les init sont finis.

Template + allocations dynamiques ... Tu cherches vraiment la merde ;)
Sur PC pourquoi pas mais sur AVR avec avr-gcc ... bonjour les dégâts collatéraux.

-> Les templates sont supportés depuis la version 4.3, coup de bol (humm :smiley-roll:) la team arduino fourni la version 4.3.3 avec l'ide.
(La version actuelle de avr-gcc est là 4.7.2, mais avant que la team arduino ce décide on sera à la version 5.x :smiley-mr-green:)
-> les opérateurs new/del ne sont pas supportés ! En fait il sont émulés en interne à grand coup de malloc/free ...

Fait trés attention aux allocations dynamiques, si tu crées / détruit des objets tu va (immanquablement) fragmenter ta mémoire RAM et avec 4Ko ça peut finir en reset en quelques malloc/free ;)
Tu peut demander aux utilisateurs de la librairie "String" pour arduino : crash assuré à un moment ou à un autre.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

fred133084

houlala !  alors t'inquiete pas pour mon code, j'ai fini l'école depuis une bonne vingtaine d'année et c'est un peu ma routine de coder.
Pour info j'ai donc créé un noyau, un shell pour l'arduino. Tout est pilotable en ligne de commande avec une tonne de library que j'ai créé,  permettant ainsi avec une tablette graphique de configurer en wysiwyg ton arduino avec tout ce qui tu y plug et rajouter pour chaque plug des triggers. Mais chutttt c'est pas fini.
Donc pour te faire peur, c'est du polymorphisme, pointeur, du virtual et autre chose que tu vas apprendre a l'école bientôt ;)

Pour info je fais tourner la bête avec moins de 1% du "cpu" et avec un nombre "incalculable" de truc branché ... mais chuuttttt c'est pas fini !  lol

skywodd

Ok ... J'aime les réponses agressives sans raison.


Donc pour te faire peur, c'est du polymorphisme, pointeur, du virtual et autre chose que tu vas apprendre a l'école bientôt ;)

1) Je suis étudiant en 2ème année de DUT informatique, le polymorphisme je connais, les virtual je maitrise.
2) Je ne suis pas un débutant dans le domaine de la programmation comme tu sembles le penser. Si ton but est de m'impressionner avec tout un tas de codes, librairies, ou autre c'est loupé.

Un shell pour arduino ? Super ! J'ai conçu mon propre langage de programmation typé basic/asm, un compilateur 2 passes et une machine virtuelle pour le faire tourner ... (le code du DCPU v1 est sur mon github, les spécifications préliminaire du VCPU v2 aussi)
Mais chuuttttt ... prendre les gens de haut c'est tellement plus pratique.

Bien maintenant que les horloges ont été remise à l'heure revenons à nos moutons, l'allocation dynamique et les templates.
Pour les templates, tout est dit.
Pour l'allocation dynamique voici le lien vers le bug-track sur le tracker du projet arduino et d'avr-gcc :
http://code.google.com/p/arduino/issues/detail?id=857


Pour info je fais tourner la bête avec moins de 1% du "cpu" et avec un nombre "incalculable" de truc branché ... mais chuuttttt c'est pas fini !  lol

De quoi l'arduino ? Si oui je serait curieux de savoir comment tu prétend utiliser 1% d'un CPU ne pouvant pas être mis en pause ;)
(exception faite de l'API <avr/sleep.h> permettant de passer en mode basse consommation)

C'est bien beau de vouloir prendre les gens de haut en se croyant plus fort que n'importe qui.
Pour ma part je n'ai jamais prétendu tout savoir, de toute façon personne sur cette planète ne peut tout savoir quelque soit le domaine.
Le fait est que le peu que je sait en programmation est suffisant pour te dire que faire des classes dérivées pour un capteur aussi simple qu'un LM35 et utiliser des templates / allocations dynamique avec avr-gcc n'est pas une bonne idée.
Aprés je suppose que tu as fait un diagramme UML pour arriver à cette solution technique et c'est ton choix, je le respect.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

marcha

Salut,

Si je peux me permettre une suggestion avant que la guerre n'éclate :-)

Le 1Wire doit pouvoir bloquer les interruptions sinon pas moyen pour lui de respecter
les timmings.

Par contre le Servo moteur n'as besoin de précision que pour la durée de l'impulsion haute.
Entre les impulsions, on peut avoir des écarts de temps tant qu'on lui envoie des pulses assez souvent.

Au lieu d'utiliser la librairie Servo, on pourrait utiliser le timer1 en mode CTC avec
la fonctionnalité qui permet de clearer une pin lorsque le compare se produit. Ainsi la durée
de l'impulsion n'est plus dépendante du blocage ou non des interruptions.


fred133084

lol

nan mais aucun problemes, pas de guerre en vue, j'ai bien d'autre chose a faire ;)
Juste que le cote je te pique tout le temps est plus qu'agaçant qu'en voit finalement les projets que certains on réalisé en fin de compte...

Quand on croit tout savoir ou peut etre surpris de découvrir ce que certains ou pu faire qu'on n'aurait jamais pu penser faire ou su faire. Mais chuuuttt ! lol Plus dur sera la chute comme on dit :) 
Mais elle sera bénéfique à tout le monde car mon système sera gratuit et utilisable tel quel ou comme noyau pour créer sa propre couche graphique ou en y rajoutant ses propres "sensors".

Je vais voir ce que tu dis, meme si pour le moment mon patch convient parfaitement pour ce sensor.

"le challenge" est d'utiliser le minimum de temps "cpu", pour le moment c'est pari gagné, mais cela oblige a re écrire pas mal de librairie pour les rendres non bloquantes bref bref bref ... à suivre ;)  et merci de vos réponses

Go Up