Page 2 sur 5

Re: KGC-DSKY

Publié : 31 octobre 2013, 12:52
par Mahzel
Oui j'utilise des threads mais basés sur des interrupt horloges, avec a chaque debut de cycle un refresh des données ksp prévu. Ensuite l'agc et le dsky ont leurs propres routines parallèles qui se joignent a chaque fin de mct. Je travaille sur un système d'interrupt qui pour l'instant semble marcher :) le dsky n'ecrivant plus directement dans la memoire de l'agc, je m'affranchit d'un problème,et la lecture d'un channel agc-dsky ne se fait que sur interruption après ecriture ce qui devrait regler le reste. Non ?

Re: KGC-DSKY

Publié : 31 octobre 2013, 13:56
par Hitman458
Mahzel a écrit :la lecture d'un channel agc-dsky ne se fait que sur interruption après ecriture ce qui devrait regler le reste. Non ?
Ouais, donc ça garanti la cohérence des données pour les thread qui devront les lire ^^ Alors go :)

J'ai une question, pour ma culture perso xD, le concepts des channels, c'est un pattern que tu as repris de quelques part ou c'est quelques choses que tu as inventé :) (c'est vraiment pas une question piège lol, c'est juste que j'ai des cours d'architecture logiciel, et j'en ai jamais entendu parlé xD).

Re: KGC-DSKY

Publié : 31 octobre 2013, 14:46
par Mahzel
Oh ca doit bien exister quelques part, mais non, j'ai reflechi dans mon coin a comment passer des donnees a deux objets qui sont censés etre actifs ensembles. J'utilise donc les delegate. Ce sont des pointeurs de fonction. Ca se declare comme une fonction sans code. Un delegate peux pointer n'importe quelle fonction qui a un type de retour et des types de paramètres identiques. L'intérêt c'est donc qu'avec un objet delegate je peux pointer les fonctions read et write de l'agc et du dsky (et de ksp mais plus tard) en même temps.

A la création de l'objet (dsky, agc) celui ci prends en paramètre une instance de la classe channel. Ensuite il enregistre après du delegate de la classe Channel sa fonction de lecture. Si l'un des deux écrits dans Channel (la fonction write prend en paramètre la valeur, le no de canal et le nom de classe de l'objet demandeur)., la routine d'ecriture écrit la donnée si le canal (index du tableau) est ouvert en écriture a l'objet demandeur, puis si c'est validé, apelle les fonctions de lecture des classes enregistrées dans les delegates (j'ai un delegate agc et un delegate dsky). Donc si l'agc écrit le canal 3,qu'il en a le droit, le delegate appelle la fonction read de l'AGC, qui récupère la valeur du canal 3 et la stocke dans sa propre memoire pour utilisation ultérieure.

Comme la boucle principale de l'agc est dans un thread, c'est complètement transparent et celui poursuit son exécution normale. Voilà.

Re: KGC-DSKY

Publié : 31 octobre 2013, 16:55
par Hitman458
Ah ouais c'est pas mal ^^

Ok je vois bien les delegates, ça à l'air puissant comme truc. Ta méthode avec les channels est sympa, je m'en rappellerai un jour si il faut xD

Re: KGC-DSKY

Publié : 02 novembre 2013, 11:50
par Mahzel
Image

Ca marche bien :D
Pour ce test, j'ai lancé deux threads, un AGC, un DSKY. Toutes les 100ms, le DSKY écrit 2 dans le channel 0, et l'AGC récupère l'interrupt pour signaler que le DSKY a écrit la dite valeur en la lisant dans le channel concerné, tout en continuant sa petite routine dérrière :)

Les lignes tout en haut c'est l'output du compiler.

Re: KGC-DSKY

Publié : 03 novembre 2013, 23:16
par Mahzel
Changelog / Update :
03/11/2013
YUL : YUL fonctionne et devrait compiler le code AGC normalement. Le code interprété n'est pas encore géré.
Il me reste à implémenter une standardisation des codes d'erreur pour le debuggage, mais c'est du "bonus".

YUL GUI : c'est moche, mais ça fait ce qu'on lui demande. Je le laisse en état pour l'instant, c'est pas ma priorité, ça tient lieu de placeholder pour un futur debugger.

Wiki GitHub : Ce qui avait été tapé est maintenant traduit en français. Maintenant faut que je le continue.

AGC :
Les premiers opcodes sont implémentés (TS CA AD).
Du coup j'ai réussi à gérer les accès en mémoire fixe qui auparavant provoquait une réecriture des registres de l'AGC. Je me suis tiré les cheveux tout l'après-midi, mais c'est plus simple à l'utilisation maintenant : on dispose de banques méméoires accessibles de n'importe où, n'importe quand :)
Pas mal d'optimisations dans les classes de support. Plus les opérations intra-cycles seront courtes, meilleure sera la gestion des cycles. Je suis descendu à 8ms par cycle ce qui m'a redonné de la marge (j'en étais à 10-11 entre chaque instruction, sur les 12 allouées).
J'ai validé le système de communication AGC/DSKY, qui s'avère étanche aux erreurs (merci try/catch) et la durée des interruptions est largement acceptables (<1ms).

A venir :
-Implémentation du reste des opcodes.
-attaquer le DSKY.

petite note cependant :
Je part bientôt et serait coupé de l'internet quelques temps (3 mois environ en fait, je reviens fin février). Ce qui veux dire que vous n'aurez plus de mises à jour sur le projet théoriquement. Mais je n'arrêterais pas de travailler dessus (même si j'aurais sans doute moins de temps libre.). J'espère pouvoir terminer l'AGC (interpreteur compris) et la routine interne du DSKY d'ici là. Mais comme KSP à vraiment beaucoup de mal sur mon laptop, je ne pense pas pouvoir tester une implémentation fiable de l'ensemble d'ici là. Surtout que sans le net je vais galérer à avoir les références necessaires pour l'intégration d'un plugin à KSP (même si j'essaie d'en grapiller un max.)
Si vous avez une liste de "docs de référence", sources ou autres à avoir, je suis preneur :)

Re: KGC-DSKY

Publié : 04 novembre 2013, 14:00
par Hitman458
Excellent, c'est du bon boulot tout ça :)

Je sais pas si tu compiles en mode debug ou en mode release, mais j'imagine qu'en release tu gagneras p'tet quelques précieuses millisecondes encore.

3 mois, une petite virée en sous marin ? xD

Quand ton projet sera bien abouti, je pense me faire une petite geekerie, interfacer ton AGC avec un vrai DSKY (afficheur 7 segments et microcontrôleur). Heureusement que tu fais de l'open source :)

Re: KGC-DSKY

Publié : 04 novembre 2013, 18:44
par Mahzel
Hitman458 a écrit :Excellent, c'est du bon boulot tout ça :)
Merci ça fait toujours plaisir :)
Hitman458 a écrit : Je sais pas si tu compiles en mode debug ou en mode release, mais j'imagine qu'en release tu gagneras p'tet quelques précieuses millisecondes encore
'tain effectivement j'avais pas pensé à ça :p tant mieux!
Hitman458 a écrit : 3 mois, une petite virée en sous marin ? xD
Un truc dans ce gout là :)
Hitman458 a écrit : Quand ton projet sera bien abouti, je pense me faire une petite geekerie, interfacer ton AGC avec un vrai DSKY (afficheur 7 segments et microcontrôleur). Heureusement que tu fais de l'open source :)
Avec grand plaisir (c'pour ça que c'est open source). Une condition hein? tu nous le montre :p

Re: KGC-DSKY

Publié : 06 novembre 2013, 20:49
par Mahzel
Petite MAJ pour ceux qui suivent la source :

-J'ai recodé pas mal de morceaux de l'AGC_support, YUL et AGC, pour clarifier un peu le code. Y'a plus de méthodes, mais y'a moins de longs enchainements de if/else, switch et quelques répétitions de code en moins. Même moi je commençais à avoir du mal à me relire :p
-J'ai réoptimisé certaines méthodes (notamment au niveau de la gestion des words et des banques). Y'a moins d'appels de fonctions inutiles, ou des appels plus courts... Voir des appels qui parraissaient un peu bizarres qui maintenant on du sens :p

-La gestion d'erreurs de YUL est opérationelle. Le truc est donc maintenant à 90% terminé, en tout cas utilisable pour du code de base AGC. Dans le repertoire "CLI test app" de l'AGC il y a un fichier AGC_Test.agc qui regroupe toutes les commandes actuellement reconnues. Me reste à coder la partie interpréteur toujours, mais c'est pas pour tout de suite.
-La doc de YUL est en cours de rédaction.
-J'ai juste renommé les fichier du GUI de YUL pour un peu de clarté et moins "truc fait à l'arrache"

Voilà, rien de très fonctionnel, mais ça servira à l'avenir :)

Re: KGC-DSKY

Publié : 31 août 2014, 11:29
par Mahzel
Deterrage de topic, juste pour dire que le KGC-DSKY est pas mort. Non non.

Je travaille actuellement sur les I/O, ce qui signifiait gérer les extracodes (et en passant les INDEXs parce que j'ai confondu TC 06 et INDEX 06 :p) . Ca n'a pas été une affaire toute simple mais... C'est fait.
Donc techniquement, maintenant, tout et n'importe quoi peut causer à l'AGC, et il peut répondre. Je vais boucler les opcodes (ce qui devrait pas être trop long) et m'attaquer pour de bon au DSKY et à l'interfaçage avec KSP.

La routine de l'AGC est donc à 99% terminée et fonctionnelle. (puisque ça marche et les opcodes compliqués sont gérés ou pas loin.)
Il ne reste qu'à implémenter les fonctions en soit, et après... Ben je testerai une partie du Colossus pour voir (le code de l'AGC du CSM).

Ensuite je "cablerai" le DSKY ce qui devrait pas être trop long (c'pas compliqué au final).

Reste l'interface avec KSP, mais j'ai déjà ma petite idée pour faire ça simple :p

Voilà, voilà.