[MiKroC] Appeller plusieurs procédures\sous programmes

Appeller plusieurs procédures\sous programmes [MiKroC] - C - Programmation

Marsh Posté le 08-02-2008 à 17:08:19    

Bonjour à tous,  
 
Dans le cadre de notre PPE, nous réalisons un programme capable de gérer la monter, la descente ou l'arrêt d'un store automatique (type SOMFY).  
 
On a donc besoin de créer un programme principale (qui gérera les sous programmes) et trois sous programmes (qui géreront respectivement la montée, la descente, le stop). Ainsi, nous avons donc besoin d'inclure les sous programmes dans les sous programmes...  
 
Exemple : le programme principal appelle le programme "monté". Lorsque le programme "monté" est en marche, le bouton STOP est appuyé => ainsi le programme "Stop" est appellé dans le sous programme "monté". Notre problème est simple : on doit donc appeller un sous programme dans un sous programme. Nous ne savons donc pas comment organiser la déclaration de nos procédures : il faut bien déclarer un sous programme avant un autre...Ce qui est impossible...  
 
Nous essayons donc d'assimiler notre programme à un graphcet (4 pages, une page par programme). Mais comment déclarer les trois sous programmes (procédures) pour qu'ils puissent se renvoyer l'un à l'autre. Nous avons tester la fonction "#include" puis "add to project"...Sans succès.  
 
Pouvez vous nous aider ? (-- Je sais que notre problème semble compelxe (très difficile à expliquer par internet... (^-^) ) --)  
 
Merci de votre aide :)

Reply

Marsh Posté le 08-02-2008 à 17:08:19   

Reply

Marsh Posté le 08-02-2008 à 17:18:41    

Qu'est-ce que tu appelles "sous-programme" ? Une fonction ? Si oui, c'est à ça que sert la déclaration de fonctions : à déclarer le prototype d'une fonction de manière à pouvoir l'utiliser avant qu'elle ne soit définie dans le code.

Reply

Marsh Posté le 11-02-2008 à 16:14:24    

comme le dit matafan, c'est plutot des "fonctions" ce que tu apelle "sous-programme", et sinon, je le ferais pas avec 3 mais seulement 2 fonctions.
 
1/ Sens (en fonction du bouton appuyé)
2/ Mouvement (avec un argument "sens" )
 
Ta fonction "Sens" lit les boutons pour renseigner la valeur de "sens" (haut -> HAUT, bas -> BAS, stop -> FIXE) ça se fait bien avec un pti enum.
Ta fonction "Mouvement" est appelée à chaque cycle, si c'est FIXE, direct tu fais un exit (sans rien faire), sinon tu déplace "d'un cran" dans le sens "sens" (tu peux aussi rajouter un test pour voir si tu n'est pas en butée du sens en question, et dans ce cas, tu positionne sens à FIXE)
 
Voilà, je sais pas si je suis clair, je l'espère.
 
Bonne continuation.
 
EDIT: le découpage comme tu le présente, avec 4 fonctions est des appels entre les fonctions me parait vachement trop complexe pour pas dire "casse-gueule". Quand ta fonction "montée" sera en cours, si elle s'éxécute en continue, tu ne sera plus capable de lire le bouton stop (à moins de faire du multi-thread, et encore, selon la priorité des taches...). Le découpage que je te propose me parait nettement plus approprié, à toi de voir.


Message édité par Xav_ le 11-02-2008 à 16:17:24

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 11-02-2008 à 21:01:33    

Mickael368 a écrit :

Dans le cadre de notre PPE, nous réalisons un programme capable de gérer la monter, la descente ou l'arrêt d'un store automatique (type SOMFY).


Il y a 2 façons de concevoir l'implémentation d'un comportement séquentiel :

 

- Algorithmique avec des boucles et de flags dans tous les sens... (imbitable...)
- Evènementiel (machine à état ou FSM).

 

Comme tu as fais un grafcet, c'est évidemment la 2 ème solution qui s'impose.

 

http://mapage.noos.fr/emdel/clib.htm
Module FSM.


Message édité par Emmanuel Delahaye le 11-02-2008 à 21:02:17

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed