CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++/DS] synchronisation

godrik
godrik
Niveau 30
23 juillet 2007 à 20:14:20

Bonjour,
Je me pose un probleme de synchronisation sur nintendo DS.
Quels sont les opérations atomiques a disposition ? fetch and add ? compare and swap ? test and set ?

comment les acceder ? Les built-ins de gcc sont ils suffisant ?

Archipel
Archipel
Niveau 5
23 juillet 2007 à 20:32:55

Je sais pas si il y a beaucoup de monde qui programme sur DS sur ce forum.

Par contre, sans vouloir faire de pub, je connais un site qui pourrait t´interesser :
http://www.playeradvance.org

Lapintade
Lapintade
Niveau 30
23 juillet 2007 à 21:03:52

Je programme sur DS mais je ne sais pas ce qu´est une "synchronisation". Peux tu etre plus clair ?

godrik
godrik
Niveau 30
23 juillet 2007 à 21:17:03

Je parles de la synchronisation entre les deux processeurs (ARM7 et ARM9). Il faut arriver a faire des access regulé a la mémoire. étant donné qu´il n´y a pas de noyau sur la machine, on ne doit pouvoir faire que "a la main". C´est a dire utiliser des opérations atomique d´acces a la mémoire.
Les plus connue sont "test and set" et "fetch and add". Ce sont ces opérations que je cherches a utiliser.

Mon probleme réel n´est d´ailleurs pas un probleme de synchronisation des deux processeur mais un probleme d´interuption. Le code de la fonction d´interuption rajoute des elements dans une liste. Ces element sont lus par le code "normal". Si le code normal est entrain de lire mais que l´interuption arive a ce moment la, alors il y a fort a parier que ca va partir en cacahuette. Je cherche donc a mettre deux listes. l´une en ecriture et l´autre en lecture.
L´operation qui peut encore poser probleme est l´operation d´inversion. Cette opération doit être atomique pour que cela ne pose pas de probleme (d´ou mon interet pour ´test and set´ et ses copains)

Lapintade
Lapintade
Niveau 30
23 juillet 2007 à 22:11:19

Ah ok.
J´ai pas ce probleme la, puisque dans le SDK officiel, l´accés a l´ARM7 est interdit (il y a des libs qui tournent dessus c´est tout).

gokusnake
gokusnake
Niveau 7
24 juillet 2007 à 08:51:28

Qu´appels tu par opération d´inversion?

kufa
kufa
Niveau 9
24 juillet 2007 à 09:26:12

hmm je ne connais pas l archi de la DS, mais si j ai bien compris il ya des interruptions qui break un seul proc (si c est pas le cas, un simple load + cmp devrait faire l´affaire).
Dans ce cas, deux solutions a ma connaissance:
- ldrex/strex si ton archi les supporte
- ldr/str/swp/cmp/spwne sont tes amis pour implementer ton interlocked compare and exchange.

Note que si tu as besoin de clearer tes caches, regarde l´instruction mcr.
Bon tout ca de tete, ca fait longtemps que j ai plus fait d asm ARM.

/d

godrik
godrik
Niveau 30
24 juillet 2007 à 13:26:34

ce que je voulais dire par operation d´inversion:

void* frontbuffer;
void* backbuffer;

inverse()
{
void* toto = backbuffer;
backbuffer = frontbuffer;
frontbuffer = toto;
}

malheureusement cette fonction n´est pas atomique. Si on me coupe en plein millieu, je peux peut etre avoir des surprise (quoi que, pas sur).

je pourais implanter un genre de mutex en assembleur, mais j´ai jamais (en environement reel) fait d´assembleur, donc ca me disait pas trop de commencer sur une machine sur laquel j´ai aussi peut de moyen de debuggage.

Mais bon, je vais regarder ca.

Lapintade
Lapintade
Niveau 30
24 juillet 2007 à 15:52:21

Faut voir qui peut t´interompre.
T´as des commandes pour desactiver les interruptions et ainsi proteger des sections criques.

godrik
godrik
Niveau 30
24 juillet 2007 à 16:13:37

oui, c´est ce que je fais actuellement, mais lorsque l´interuption apparait, la probabilité qu´elle rentre en conflit avec le "thread main" est assez faible. Bon, ca ne gene pas la jouabilité, mais du coup je me pose la question.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment