onjour à tous
Alors voilà j'essaye de réaliser une fonction de Browse, c'est à dire parcourir une arborescence contenant des dossiers, des sous-dossiers, des sous sous dossiers [...] et des variables. Sachant qu'on ne sait pas comment est constituer l'arborescence évidemment![]()
Voici un exemple :
Root--- Objects
--- Types
--- Functions --- Add
--- Delete
--- Clean
--- Select --- 1 --- Y
--- 2 --- Y
...
--- 10 --- Y
Et j'ai à ma disposition une fonction partialBrowse(node) qui en fait va me permettre de connaître les sous dossiers du node qu'on lui donne, par exemple : partialBrowse(Root) va me permettre de récupérer le nom et l'adresse d' Objects, de Types et de Functions, ainsi que le nombre de sous dossiers 3.
En me basant sur le principe de récursivité, voici ce que j'ai développé :
Voilà et donc en fait j'envoie cette requête partialBrowse et je reçois une réponse que je traite comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 BrowseInternal (NodeId node){ int32_t currentNoOfBranches; NodeId* currentNodeId; value_ready = false; partialBrowse(node) printf(">>Browse : Sending Browse request ....\n"); // Attente de la réponse loopCpt = 0; while (value_ready == false && loopCpt * sleepTimeout <= loopTimeout) { loopCpt++; SOPC_Sleep(100); } currentNodeId = nextNodeId; currentNoOfBranches = noOfBranches; if (currentNoOfBranches == 0) { return 0; } else { for (int i = 0; i < currentNoOfBranches; i++) { value_ready = false; int ok = BrowseInternal(currentNodeId[i]); } } }
Et ce que ce que j'arrive à récupérer un chemin jusqu'à une feuille de mon arbre donc par exemple, je récupère correctement les noms Objects, Type et Functions, le partialBrowse s'effectue sur Functions je récupère donc Add, Delete, Clean, Select, le partialBrowse s'effecture sur Select, je récupère les 10 numéros ainsi que leur 10 Y, mais je ne remonte pas + les niveaux après, et ça effectue même deux fois la séquence partialBrowse (1) puis partialBrowse(2), donc je ne comprends pas tout...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 void Test_ComEvent_FctClt(SOPC_App_Com_Event event, void * param) { printf(">>Browse AddressSpace: Received browse response \n"); BrowseResponse* pBrowseResp = (BrowseResponse*)param; if (NULL == pBrowseResp) { printf(">>Browse: Invalid browse response \n"); } if (value_ready == false) { BrowseResult browseRslt = pBrowseResp->Results; noOfBranches = browseRslt.NoOfReferences; //récupération du nbre de fils for (int j = 0; j < noOfBranches; j++) { nextNodeId[j] = browseRslt.NodeId[j]; //récupération du noms des fils } } value_ready = true; }
Je dirais que c'est une question de contexte et de pile d’exécution, mais pour moi en copiant le noOfBranches et le nextNodeId dans des variables locales de ma fonction BrowseInternal, ça devrait être suffisant non ?
Bon donc si quelqu'un a une petite astuce pour mon problème je prends![]()
Partager