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
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.
|