Programmation multitâche

Technoman

Senior Member
Bonjour,

Jusqu'à présent, les élèves de notre collège, programmaient en monotâche.

Nous disposons d'une carte "maison" équipée d'un 20M et de boîtiers Autoprog de la socièté A4, équipés de 28X1.

Un collègue nous a vanté les facilités offertes par le multitâche. C'est aussi le cas d'un document, trouvé sur le Web.

Pour cela, il nous faudrait passer du 20M au 20M2, bénéficiant, par ailleurs, d'autres améliorations (taille accrue de l'espace programme, ...).

Quant au 28X1, hélas... Le 28X2 n'offre pas non plus cette possibilité, hormis la possibilité de stocker plusieurs programmes (slots).
Faudrait-il se résoudre à adapter un 20M2 et accepter de perdre des entrées-sorties?

D'abord, pour les collègues ayant expérimenté le multitâche avec leurs élèves, apporte-t-il la facilité énoncée?
Nous utilisons désormais Blockly.
 

MGU

Senior Member
D'abord, pour les collègues ayant expérimenté le multitâche avec leurs élèves, apporte-t-il la facilité énoncée?
Nous utilisons désormais Blockly.
Le multitâche apporte en effet une grande facilité. Les programmes doivent cependant rester "simples". Il n'est possible que sur la série M2

On peut faire des programmes entièrement indépendants, mais aussi avec des variables communes, les modifications de variables dans un programme sont reprisent "instantanément" dans l'autre, sans faire appel à des gosub, d'où la simplicité

On ne gère pas le passage d'un programme à un autre, ce qui peut être un problème pour une programmation complexe.
Les pauses dans un programme n'affectent pas l'exécution des autres, mais une commande bloquante (serin, etc) bloque tout
On perd aussi la maitrise de la vitesse, setfreq est rejeté.

J'ai pas essayé de faire la même chose sans multitâches:

Code:
#picaxe 20M2
#no_data
	start0:
		do
			toggle B.7
			pause 200
		loop
	start1:
		do
			toggle B.6
			pause 300
		loop
	start2:
		do
			toggle B.5
			pause 500
		loop
	start3:
		do
			toggle B.4
			pause 700
		loop
Mais le plus simple pour juger est d'expérimenter.



MM
 
Last edited:

BESQUEUT

Senior Member
A mon humble avis l'implémentation limitée du multitâche sur les Picaxes M2 permet de faire des démos intéressantes et d'expliquer le principe.
Par contre, dès qu'il s'agit d'applications concrètes, on se heurte aux limitations indiquées et le multitâche n'a d'intérêt que dans certains cas très particuliers. A noter qu'un programme conçu en multitâche (voir exemple de MGU) permet de gérer très simplement des séquencements indépendants. Quand on se heurte aux problèmes d'incompatibilité évoqués plus hauts, il est alors possible de basculer en multitâche collaboratif pour s'en affranchir sans trop changer la structure du programme. En parallèle, l'augmentation de fréquence rendu possible par l'abandon du mode multitâche compense largement l'overhead. (mais évidement, pas en Blocky...)

D'un point de vue pédagogique, il peut être intéressant d'expliquer les différents modes de fonctionnement et les techniques de programmation associées :
- algorithmes linéaires,
- multitâche collaboratif (à l'origine des MacIntosh...), states machines,...
- véritable multitâche, RTOS,...

Certains esprits sont très à l'aise avec un fonctionnement non séquentiel ; d'autres ne s'y retrouveront pas... Des jeux de rôle peuvent aider...

De même, il n'est peut-être pas inutile d'expliquer ce que cachent les différents environnements de développement :
- assembleurs,
- compilateurs,
- pseudo-compilateurs,
- interpréteurs,...
avec évidement les avantages et inconvénients de chaque approche ainsi que leurs implémentations commerciales ou libres : Picaxe, Arduino, Raspberry,...
 

BESQUEUT

Senior Member
Jeu de rôle pour expliquer le multitâche.

L'instruction TOGLE peut être simulée au moyen d'un bristol, coloré sur une face, noir sur l'autre.
Retourner le bristol sur la table est l'équivalent de l'allumage extinction d'une led.
On peut bien sur également opter pour une solution "électrique" avec pile, inter et véritable LED, mais ça me semble "riche".

1)4 élèves avec chacun un bristol de 4 couleurs différentes (disons Rouge, Vert, Bleu et Jaune).
Une consigne pour chaque élève : retourner le bristol toutes les respectivement 2, 3, 5 ou 7s suivant la couleur.

Pas besoin d'être précis : le simple fait de compter mentalement et doucement jusqu'à la valeur indiquée est suffisant.


2) Un seul élève avec les 4 bristols et les 4 consignes...
Si personne ne trouve de solution fiable, je propose la méthode suivante :
Partir d'un état avec les 4 cartes retournées
Faire la liste des actions à réaliser chaque seconde.
Au bout de combien de temps revient-on à l'état de départ ?
Voir prof de math : PPCM
En l'occurence, les 4 nombres sont premier donc 2*3*5*7=210 s
Après ça, on peut reprendre la liste au début.

A titre d'exemple, voici les consignes pour la première minute :

Code:
0	RVBJ
2	R
3	V
4	R
5	J
6	RV
7	B
8	R
9	V
10	RJ
12	RV
14	RB
15	VJ
16	R
18	RV
20	RJ
21	VB
22	R
24	RV
25	J
26	R
27	V
28	RB
30	VRJ
32	R
33	V
34	R
35	BJ
36	RV
38	R
39	V
40	RJ
42	RVB
44	R
45	VJ
46	R
48	RV
49	B
50	RJ
51	V
52	R
54	RV
55	J
56	RB
57	V
58	R
60	RVJ
Application : écrire le programme Picaxe dans les 2 cas...
Pour le cas N°1, la solution est fournie en #2
Indication pour le cas N°2 : penser au modulo...
 
Last edited:

Technoman

Senior Member
Bonsoir,

Merci à vous deux pour votre contribution.

... mais une commande bloquante (serin, etc) bloque tout
A part serin, irin? rfin?

... gérer très simplement des séquencements indépendants.
C'est aussi là où je verrais un avantage.

... d'expliquer les différents modes de fonctionnement
Au niveau collège, même 3ème, sans doute pas à la majorité.

...basculer en multitâche collaboratif
Si je me souviens bien, chaque tâche passe à la main à la suivante (ex Windows 3.1). La durée de chacune est donc très variable.

... states machines,...
C'est un mode de programmation fort intéressant. J'imagine un onglet supplémentaire dans PE6 pour décrire graphiquement la machine à états, puis générer le code. Cela serait un plus pour la famille Picaxe. Il me semble avoir déjà suggéré cela.

L'idée du jeu de rôle est à retenir, en simulant éventuellement les modes coopératif et préemptif.
 

BESQUEUT

Senior Member
On peut en théorie contourner le problème avec le "background receive" et idem pour I2C. Dans la réalité, il y a également pas mal d'incompatibilités (voir annexe 4 du tome 2). les programmes de démo ne font rien de "time critical" dans la boucle principale, et se resument à do : pause:loop
A part pour la démo, ça ne sert pas à grand chose...
Si je me souviens bien, chaque tâche passe à la main à la suivante (ex Windows 3.1). La durée de chacune est donc très variable.
Lisa, puis les MacIntosh implémentaient une idée légèrement différente, mais également utilisable sur un mono-processeur :
- une tâche "maitre" dite "boucle principale" tourne en permanence le plus vite possible,
- elle donne la main succesivement aux différentes tâches qui sont censées rendre la main le plus vite possible. Si une tâche a besoin de temps, elle est censée couper son travail en tranches et attendre qu'on lui redonne la main pour continuer. C'est en ce sens qu'elles sont dites "collaboratives".
- la boucle principale incrémente un 'tick count" (ou une autre forme de chronomètre) qui lui permet de donner la main à certaines tâches à intervalles ou a dates planifiées

La philosophie des MacIntosh était "la machine au service de l'utilisateur" (bien évidement en réaction aux programmes de l'époque qui proposaient des choix succesifs auxquels les utilisateurs devaient se soumettre.

Les MacIntosh devaient être en mesure de réagir à différentes sollicitations (clavier, souris, click dans une fenêtre ou dans un menu, ...) à la bonne volonté de l'utilisateur. La boucle principale donnait donc la main succesivement aux différents modules chargés de lire et de traiter ces "inputs", le tout devant tourner suffisement vite pour que ça paraisse simultané.

Dans un système préemptif, l'OS limite automatiquement le temps de traitement de châque tâche, ce qui suppose des instructions spécifiques au sein du processeur.
 
Last edited:

PieM

Senior Member
Le gros problème du mode collaboratif avec le picaxe M2 est que l'unité de temps utilisable est la seconde... si on ne veux pas utiliser les registres SFR.
 
Top