Hej
Noterade precis de commits som precis gjorts mot framförallt laser.c och dio.c och en del av de ändringarna kommer att göra att saker går sönder med avseende på hur trådar startas/stoppas.
Först och främst en liten sak bara så att ingen är förvirrad över det, roboten startar numera i ett inaktivt state och för att starta den måste man sedan trycka på start/stopp knappen (eller skicka SIGUSR1 signalen till programmet).
För att sedan stoppa (d.v.s. stoppa som i att roboten ska stanna, stänger ner en del av trådarna och tar och väntar på ny knap/signal) den så gör man samma sak igen.
Till problemen då.
Det är ändrat så att got_shot_loop kommer att fortsätta att köras även efter stop. Men vid stop så väntar roboten på att denna tråd stänger av sig och vid start så startar den upp en ny sådan tråd. Så med ändringen som det ser ut nu kommer roboten att när den stoppas hänga och vänta på den tråden i all evighet och aldrig komma ur stop fasen utan att man manuellt dödar och startar programmet igen.
Sedan funderar jag också över motveringen till ändringarna i laser_start, här kommer saker iaf inte att gå sönder eftersom tråden explicit dödas med pthread_cancel för tillfället (eftersom tråden med största sannolikhet kommer att ligga och blockera på shoot_mutex när roboten stoppas).
Och ingen av ändringarna kommer troligen att göra något säkrare på något sätt vad jag kan se i vilket fall som helst.
Och nu ser jag att ännu fler trådar håller på att bli av med sina stopvillkor så nu skickar jag iväg mailet innan mer saker blir trasiga
Noterade en bugg i hjulstyr_disable nu också, felet är _INTE_ att SPEED_ZERO var fel, denna ska vara 0. Felet var att det i hjulstyr_disable borde stått SPEED_ZERO + SPEED_OFFSET.
//Joakim Tosteberg
Och för att klargöra lite till så funkar det på följande sätt med trådar:
När roboten är inaktiv så är endast följande trådar igång: huvudtråden i init.c som sköter uppstart och nerstänging av andra trådar, en signalhanterignstråd i init.c som hanterar siganler så som SIGINT och SIGUSR1 samt buttons_loop i dio.c som ser till att roboten regarerar och t.ex. kan bli aktiv vid knapptryckning.
Medans roboten sedan är inaktiv ligger huvudtråden och blockerar i väntan på att den ska få ett event att roboten bytt till att vara aktiv. Om så sker så tar den drar igång alla nödvändiga trådar och tar sedan och lägger sig och blockerar igen i väntan på att roboten ska byta till att vara inaktiv igen och när den får signal om det tar den och väntar på att trådar som självstänger stängs ner samt tar död på ett par trådar som i nuläget annars kan ligga i blockerande systemanrop och därmed inte kommer komma ut och dö av sig själva.
Därefter börjar allt om med att den återigen inväntar nytt byte till aktiv.
//Joakim Tosteberg
From: kmm09-3-bounces@lists.lysator.liu.se [mailto:kmm09-3-bounces@lists.lysator.liu.se] On Behalf Of Joakim Tosteberg Sent: den 15 november 2009 18:32 To: 'KMM projekt' Subject: [Kmm09-3] VIKTIGT: Trådar och start av robot
Hej
Noterade precis de commits som precis gjorts mot framförallt laser.c och dio.c och en del av de ändringarna kommer att göra att saker går sönder med avseende på hur trådar startas/stoppas.
Först och främst en liten sak bara så att ingen är förvirrad över det, roboten startar numera i ett inaktivt state och för att starta den måste man sedan trycka på start/stopp knappen (eller skicka SIGUSR1 signalen till programmet).
För att sedan stoppa (d.v.s. stoppa som i att roboten ska stanna, stänger ner en del av trådarna och tar och väntar på ny knap/signal) den så gör man samma sak igen.
Till problemen då.
Det är ändrat så att got_shot_loop kommer att fortsätta att köras även efter stop. Men vid stop så väntar roboten på att denna tråd stänger av sig och vid start så startar den upp en ny sådan tråd. Så med ändringen som det ser ut nu kommer roboten att när den stoppas hänga och vänta på den tråden i all evighet och aldrig komma ur stop fasen utan att man manuellt dödar och startar programmet igen.
Sedan funderar jag också över motveringen till ändringarna i laser_start, här kommer saker iaf inte att gå sönder eftersom tråden explicit dödas med pthread_cancel för tillfället (eftersom tråden med största sannolikhet kommer att ligga och blockera på shoot_mutex när roboten stoppas).
Och ingen av ändringarna kommer troligen att göra något säkrare på något sätt vad jag kan se i vilket fall som helst.
Och nu ser jag att ännu fler trådar håller på att bli av med sina stopvillkor så nu skickar jag iväg mailet innan mer saker blir trasiga
Noterade en bugg i hjulstyr_disable nu också, felet är _INTE_ att SPEED_ZERO var fel, denna ska vara 0. Felet var att det i hjulstyr_disable borde stått SPEED_ZERO + SPEED_OFFSET.
//Joakim Tosteberg