Avr Studio Simulator C Code

Gast #76226
Lesenswert?

Hi,

ich habe am Wochenende meine ersten richtigen Gehversuche in GCC und
AVR gemacht. Verschiedene Unterroutinen ohne Parameteruebergabe und mit
übergaben. Nun wollte ich gerne den Code per Avr Studio 4.08
Simulieren/Debuggen. Beim durch Steppen springt aber das Programm
unwillkürlich in die Main Prozedur.


Gibt es Probleme bei AVR Studio und GCC beim simulieren?

Ich hoffe jemand kann mir da weiterhelfen .


Mfg

Dirk
Gast #76229
Lesenswert?

Hallo Dirk,

>wie kann ich den meinen C Code richtig simulieren mit AVr Studio
> 4.08?

Hast du ein konkretes Problem ?

>Gibt es Probleme bei AVR Studio und GCC beim silulieren ?

Nein, nur beim simuliern von Bootloadern, da das AVR-Studio nur die
.text section lädt.

Du must nur ein "make extcof" ausführen. (Sample-Makefile ...)


Gruß

Fiffi
Gast #76231
Lesenswert?

Hi,

so Feierabend ;) Es kann sich natuerlich auch um ein Codefehler
handeln, da ich noch blutiger C Anfaenger bin kann ich dieses leider
nicht ausschliessen. Bitte habt also Nachsicht.

Fehler: Das Programm arbeitet laut Simulator die Subs nicht ab ...
sondern springt sofort wieder in die Mainroutine.

MFG

dirk

Code:
#include "avr/io.h"
#include "avr/delay.h"
#include "inttypes.h"

uint8_t   INDATA;
uint8_t   OUTDATA;
uint8_t    NUMBITS;


void txbits(char OUTDATA)
{
char i;
for ( i = 0; i < 8; i++)
  {
  sbi(PORTC,1);
    _delay_loop_2(1122);
    cbi(PORTC,1);
    _delay_loop_2(1122);
    if((OUTDATA & 1) == 1)
    {
      _delay_loop_2(2244);
    }
  }
  return;
}

void command(char INDATA)
{
sbi(PORTC, 1);
_delay_loop_2(18000);
cbi(PORTC, 1);
_delay_loop_2(9000);
txbits(0x82);
txbits(0x17);
txbits(INDATA);
return;
}




int main(void)
{
  outp (0xFF, DDRC);



  sbi(PORTC,0);
  cbi(PORTC,0);
for (;;)
  {                           /* loop forever */
    cbi(PORTC,0);
    command(0x06);
    sbi(PORTC,0);
  }
}
Gast #76234
Lesenswert?

Hi,

@Fiffi ok das mache ich ..... erstmal warten bis Feierabend ist.

Was ich damit meine ist: In der Main Procedure rufe ich die Funktion
Command mit dem Wert 0x06 auf.
Im Simulator springt er dann in die Funktion, sobald er aber ein Befehl
in der Funtkion abarbeiten soll springt er wieder in die
Endlossschleife von der Mainprozedure.
Er arbeitet garnicht die Befehle in den Unterprogrammen (command,
Txbits ab)

Aber ich sende heute abend mal meine Coff usw.


Mfg

Dirk
Gast #76238
Lesenswert?

Hallo Dirk,

bei mir verhält sich dein Programm genauso wie bei dir. Der "Unsinn"
kommt vom GCC. (bin mal im assembler durchgesteppt)

Der erzeugt Code ergibt überhaupt keinen Sinn ...

Das Problem kommt von den delay Routinen. Diese habe ich auch noch nie
verwendet.


Ich Anhang befindet sich eine Version (ohne delays) die bei mir
vernünfig läuft.

Ich würde Zip-Datei mal an die Entwickler senden...


Gruß

Fiffi
Gast #76240
Lesenswert?

Die delay()-Routinen sind inline-Funktionen.  Sowas kann COFF nicht
darstellen, da in diesem Falle Code generiert wird, der nicht mehr zur
C-Datei, sondern zu einer .h-Datei gehört.  Wenn Du mal ein
avr-objdump -g auf das ELF-File machst, müßtest Du das ganz gut
erkennen können, daß innerhalb einer Funktion zwischen verschiedenen
Dateien umgeschaltet wird.  COFF kann diese Umschaltung nicht, da sich
dort die Zeilennummern einer Funktion immer auf den Anfang der
Funktion beziehen und damit immer auf die Quelldatei, in der der
Funktionskopf stand.
Gast #76244
Lesenswert?

Zumindest unterstützt GDB das ELF-Format in vollem Maße. ;-)

Aber mir ist schon klar, daß die Wahl der möglichen Simulatoren und
Emulatoren für den GDB nicht sonderlich üppig ist (SimulAVR, AVaRICE).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren