Forum: Compiler & IDEs SIMAVR verstehen und um MEGA8 erweitern


von Gerhard Z. (germel)


Lesenswert?

Hallo MC Gemeinde,

Nachdem ich einen Simulator unter Linux für die 8-bit AVRs gesucht habe 
bin ich über SIMAVR gestolpert. Nun möchte ich gerne wissen, wie ich ihn 
verwenden kann und, da er noch keine Unterstützung für MEGA8 hat, man 
ihn erweitern kann. Deshalb hier die Frage, ob schon jemand von euch 
Erfahrung mit dem Simulator gesammelt hat?

Beim Versuch, den Simulator um den MEGA8 zu erweitern stolpere ich im 
folgenden Code-Fragment schon über Verständnisfragen wie - wie sind die 
gesamten Konstrukte mit Punkt davor wie z.B. ".core" oder ".portb" zu 
verstehen? Laut K&R sind als Variablennamen nur "letters", "digits" and 
"_" underscore erlaubt. Hier das Code-Fragment:
--------------------
1
struct mcu_t {
2
  avr_t core;
3
  avr_eeprom_t   eeprom;
4
  avr_watchdog_t  watchdog;
5
  avr_flash_t   selfprog;
6
  avr_extint_t  extint;
7
  avr_ioport_t  portb,portc,portd;
8
  avr_uart_t    uart;
9
  avr_adc_t    adc;
10
  avr_timer_t    timer0,timer1,timer2;
11
  avr_spi_t    spi;
12
  avr_twi_t    twi;
13
};
14
15
#ifdef SIM_CORENAME
16
17
#ifndef SIM_VECTOR_SIZE
18
#error SIM_VECTOR_SIZE is not declared
19
#endif
20
#ifndef SIM_MMCU
21
#error SIM_MMCU is not declared
22
#endif
23
24
struct mcu_t SIM_CORENAME = {
25
  .core = {
26
    .mmcu = SIM_MMCU,
27
    DEFAULT_CORE(SIM_VECTOR_SIZE),
28
29
    .init = mx8_init,
30
    .reset = mx8_reset,
31
  },
32
  AVR_EEPROM_DECLARE(EE_READY_vect),
33
  AVR_SELFPROG_DECLARE(SPMCSR, SELFPRGEN, SPM_READY_vect),
34
  AVR_WATCHDOG_DECLARE(WDTCSR, WDT_vect),
35
  .extint = {
36
    AVR_EXTINT_DECLARE(0, 'D', 2),
37
    AVR_EXTINT_DECLARE(1, 'D', 3),
38
  },
39
  .portb = {
40
    .name = 'B', .r_port = PORTB, .r_ddr = DDRB, .r_pin = PINB,
41
    .pcint = {
42
      .enable = AVR_IO_REGBIT(PCICR, PCIE0),
43
      .raised = AVR_IO_REGBIT(PCIFR, PCIF0),
44
      .vector = PCINT0_vect,
45
    },
46
    .r_pcint = PCMSK0,
47
  },
48
  .portc = {
49
    .name = 'C', .r_port = PORTC, .r_ddr = DDRC, .r_pin = PINC,
50
    .pcint = {
51
      .enable = AVR_IO_REGBIT(PCICR, PCIE1),
52
      .raised = AVR_IO_REGBIT(PCIFR, PCIF1),
53
      .vector = PCINT1_vect,
54
    },
55
    .r_pcint = PCMSK1,
56
  },
57
  .portd = {
58
    .name = 'D', .r_port = PORTD, .r_ddr = DDRD, .r_pin = PIND,
59
    .pcint = {
60
      .enable = AVR_IO_REGBIT(PCICR, PCIE2),
61
      .raised = AVR_IO_REGBIT(PCIFR, PCIF2),
62
      .vector = PCINT2_vect,
63
    },
64
    .r_pcint = PCMSK2,
65
  },
66
.
67
.
68
.
-------------------------------
Der Ausschnitt findet sich in der Datei sim_megax8.h.

Kann mir jemand einen Tip geben, wie in der definierten Struktur z.B. 
".core" zu verstehen ist? Hier noch ein paar Links:

Wiki:
http://gitorious.org/simavr/pages

Sources:
http://gitorious.org/simavr/simavr/archive-tarball/master

Mailing List:
http://groups.google.com/group/simavr

Gruß
Gerhard

von Stefan E. (sternst)


Lesenswert?

Gerhard Zintel schrieb:
> Kann mir jemand einen Tip geben, wie in der definierten Struktur z.B.
> ".core" zu verstehen ist?

Das sind einfach Initialisierungen der einzelnen Strukturelemente.
1
struct test {
2
    uint8_t foo;
3
    uint8_t bar;
4
};
5
6
struct test a = { 1, 2 };
7
struct test b = { .foo = 1, .bar = 2 };

BTW: Hast du dir auch schon den Thread zu dem Simulator auf AVR-Freaks 
angesehen? Da steckt möglicherweise auch noch die eine oder andere 
Detailinformation drin.
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=86665&highlight=simulator

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.