Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Problem beim Aufruf eines externen Programmes Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 12.06.2004 18:42)
Als Antwort auf Re: Problem beim Aufruf eines externen Programmes von Matthias Siemß - 10.05.2004 10:37
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Matthias,


> Für meine folgende System-Routine benutze ich eine gnu-c Compiler:
>
> void SerPut( char ch )
> {
>    S0TIC &= 0xffbf;
>    // Wait until last transmission ready.
>    while ( ( S0TBIC & 0x0080) == 0 );
>    S0TBIC &= 0xff7f;
>
>    S0TBUF = ch;
>
>    // Wait until transmission ready.
>    while ( ( S0TIC & 0x0080) == 0 );
>    S0TIC &= 0xff7f;
>    S0TIC |= 0x0040;
> } // SerPut
>
> void main()
> {
>   int i;
>   for (i=0;i<1000;i++){
>                 SET_SFRBIT( p1l.5 );
>                 CLR_SFRBIT( p1l.5 )
>                 SET_SFRBIT( p1l.5 )
>                 }
>   SerPut(255);
> } // main
>
>

Du machst hier einen klassischen Fehler !
Durch einen Bug im original OS, welcher aus kompatibilitätsgründen bei keiner aktuellen
Version beseitigt wurde, muÃ? der der Stack zweimal gepoppt werden, bevor man in das C2-Proggie
zurückspringen kann. Sonst hängt sich die VM auf. :-)
Also in ASM einfach folgendes vor dem Rücksprung schreiben:
     pop  R1
      pop  R1


Da man in C nicht so einfach den Stack poppen kann, muÃ? man im C-Code eine
ASM-Routine einbinden:

viod xy
{
 ...
 // Routinen
 ...
#pragma asm
      pop  R1
      pop  R1
 #pragma endasm

}


siehe auch "MSR mit C-Control II".


MfG André H.
 


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: