![](/media/cache/profiles/4b0986230d9d7aded7f0c24033d221d4.jpg.50x50_q85.jpg)
Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.
CtrlBridge
- fonction quelquonque pour communiquer avec les module
- fonction quelquonque pour faire des recherche dans les module dispo
- autre fonction pour jouer avec MemRegistre
Version 1.2.0
- Ajout d'un mode de simulation pour tester le code avec seulement un contrôleur stm32
Diff: source/MemRegistre.cpp
- Revision:
- 14:ca1a9230ba7f
- Parent:
- 10:7e6aeaebe1a2
- Child:
- 18:3f113f8441b2
--- a/source/MemRegistre.cpp Fri Mar 20 20:33:35 2015 +0000 +++ b/source/MemRegistre.cpp Mon Mar 23 22:41:31 2015 +0000 @@ -13,8 +13,6 @@ */ #include "MemRegistre.h" - - MemRegistre::MemRegistre() { m_positionActioneur = m_moduleActioneur.begin(); @@ -25,27 +23,77 @@ { } -unsigned char MemRegistre::getAdressDispo() +unsigned char MemRegistre::getAdressDispo(const unsigned char &startValue) { - list<Module>::iterator it1; - unsigned char addrDispo=1; + //list<Module>::iterator it1; + unsigned char addrDispo=(startValue==0)?1:startValue; //Module templateModule; - for(bool addrFind=true; (addrDispo!=0)&&(!addrFind); addrDispo++) { - - for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it) - if(it->regA == addrDispo) addrFind = false; + for(bool addrFind=false; (addrDispo!=0)&&(!addrFind); addrDispo++) { + /* addrFind=true; + for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it) + if(it->regA == addrDispo) addrFind = false; - for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it) - if(it->regA == addrDispo) addrFind = false; + for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it) + if(it->regA == addrDispo) addrFind = false; - for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it) - if(it->regA == addrDispo) addrFind = false; + for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it) + if(it->regA == addrDispo) addrFind = false;*/ + addrFind = !isAdresseValide(addrDispo); if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load. } + return addrDispo; } +bool MemRegistre::isAdresseValide(const char &adresse, Module &m ) +{ + list<Module>::iterator it1; + bool addrFind=false; + //Module templateModule; + //for(unsigned char addrDispo=1; (addrDispo!=0)&&(!addrFind); addrDispo++) { + + for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it) { + if(it->regA == adresse) { + addrFind = true; + m.regA=it->regA; + m.regB=it->regB; + m.regC=it->regC; + m.regD=it->regD; + } + } + + for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it) { + if(it->regA == adresse) { + addrFind = true; + m.regA=it->regA; + m.regB=it->regB; + m.regC=it->regC; + m.regD=it->regD; + } + } + + for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it) { + if(it->regA == adresse) { + addrFind = true; + m.regA=it->regA; + m.regB=it->regB; + m.regC=it->regC; + m.regD=it->regD; + } + } + + // if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load. + // } + + return addrFind; +} +bool MemRegistre::isAdresseValide(const char &adresse) +{ + Module dummy; + return isAdresseValide(adresse,dummy); +} + Module MemRegistre::firstActioneur(void) { m_positionActioneur =m_moduleActioneur.begin();