30. oktober 2008 - 12:45Der er
5 kommentarer og 1 løsning
TaskSpawn problemer
Hej, jeg har følgende vxworks program, som ikke virker efter hensigten. Når jeg kalder funktionen start, så ønsker jeg at funktionen ThreadMapper skal kaldes, men det sker ikke. Jeg går ud fra at fejlen skyldes den måde jeg har initieret taskSpawn på, for jeg har prøvet at debug programmet og jeg kommer aldrig over i ThreadMapper scope.
Det er snart længe siden jeg har rodet med WxWorks, så jeg kan ikke give dig et præcist svar.
Hvad gør du efter du har kaldt taskSpawn (gennem din start funktion)? Det er ikke sikkert at den nye tråd starter før de tråd der opretter den holder en pause. Du kan prøve at kalde taskDelay for at holde en pause og få den anden tråd til at køre.
Jeg har lavet en vxWorks OS API, så jeg bare kan oprette et objekt af min Thread klasse når jeg vil oprette tråde i stedet for at bøvle med alle de kryptiske vxWorks systemkald. I mit testprogram (main scope) har jeg en while(true) efter "threadObj.start() kaldet", netop for at programmet ikke skal termineres, som du er inde på, så tråden får lov/mulighed for at køre.
Problemet med en while(1); er at den ikke (nødvendigvis) giver OS'et en chance for at schedulere den nye tråd. Realtime OS'er som WxWorks skifter normalt kun task ved kald til kernen, eller ved interrupt.
Så en bedre løsning er at lave: while(1) taskDelay(1000);
Eller du kan oprette en semaphore som den nye tråd skal frigive, inden den main tråd fortsætter.
Jeg havde ikke rigtigt overvejet, at det kunne være et problem, eftersom det virkede fint i mit testprogram til mit win32 OS API. Tusind tak for hjælpen Bertel. Du er velkommen til at smide et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.