Перейти к содержанию
    

AVR-GDB & SimulAVR

Дорогие форумчане, необходима ваша помощь!

 

Решил перебраться окончательно под линух, поставил убунту 8.04, и для разработки поставил avr-gcc avr-gdb avr-dude и simulavr(соответственно со всеми зависимостями, благо аптитуд сам заботится об этом). прошивки собираются нормально, при компиляции и линковки никаких проблем не возникает, но вот отладка совсем не клеится :( ниже привожу всю последовательность шагов.

 

#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>

#define RAND_MAX 0x7fff

int        U = 1;
float    U2 = 0;

ISR(ADC_vect){
    
    U2 = U / 100;
    U2 = U2 / 5;
    U = U2;
    
}

int main(void){
    
    DDRC = 0;
    ADMUX = 0;
    ADCSRA = 0x8F;

    sei();
    
    while(1){
        
        ADCSRA |= 0x40;
        
    }
    
    return    0;

}

 

$ avr-gcc -mmcu=atmega8 -g -Os -c main.c -o main.o
$ avr-gcc main.o -mmcu=atmega8 -o project.out -Wl,-Map,project.map
$ avr-objcopy -R .eeprom -O ihex project.out project.hex
$

 

$ simulavr --device atmega8 --gdbserver project.hex &

Simulating a atmega8 device.

devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TWBR' at 0x0020
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TWSR' at 0x0021
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TWAR' at 0x0022
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TWDR' at 0x0023
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADCL' at 0x0024
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADCH' at 0x0025
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADCSRA' at 0x0026
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADMUX' at 0x0027
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ACSR' at 0x0028
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'UBRRL' at 0x0029
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'UCSRB' at 0x002a
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'UCSRA' at 0x002b
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'UDR' at 0x002c
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'SPCR' at 0x002d
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'SPSR' at 0x002e
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'SPDR' at 0x002f
devsupp.c:332: MESSAGE: attach: IO Reg 'PIND' at 0x0030: created
devsupp.c:316: MESSAGE: attach: IO Reg 'DDRD' at 0x0031: ref = 0x0030
devsupp.c:316: MESSAGE: attach: IO Reg 'PORTD' at 0x0032: ref = 0x0030
devsupp.c:332: MESSAGE: attach: IO Reg 'PINC' at 0x0033: created
devsupp.c:316: MESSAGE: attach: IO Reg 'DDRC' at 0x0034: ref = 0x0033
devsupp.c:316: MESSAGE: attach: IO Reg 'PORTC' at 0x0035: ref = 0x0033
devsupp.c:332: MESSAGE: attach: IO Reg 'PINB' at 0x0036: created
devsupp.c:316: MESSAGE: attach: IO Reg 'DDRB' at 0x0037: ref = 0x0036
devsupp.c:316: MESSAGE: attach: IO Reg 'PORTB' at 0x0038: ref = 0x0036
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'UBRRH' at 0x0040
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'WDTCR' at 0x0041
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ASSR' at 0x0042
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'OCR2' at 0x0043
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCNT2' at 0x0044
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCCR2' at 0x0045
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ICR1L' at 0x0046
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ICR1H' at 0x0047
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'OCR1BL' at 0x0048
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'OCR1BH' at 0x0049
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'OCR1AL' at 0x004a
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'OCR1AH' at 0x004b
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCNT1L' at 0x004c
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCNT1H' at 0x004d
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCCR1B' at 0x004e
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCCR1A' at 0x004f
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'SFIOR' at 0x0050
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'OSCCAL' at 0x0051
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCNT0' at 0x0052
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TCCR0' at 0x0053
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'MCUCSR' at 0x0054
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'MCUCR' at 0x0055
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TWCR' at 0x0056
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'SPMCR' at 0x0057
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TIFR' at 0x0058
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TIMSK' at 0x0059
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'GIFR' at 0x005a
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'GICR' at 0x005b
devsupp.c:332: MESSAGE: attach: IO Reg 'SPL' at 0x005d: created
devsupp.c:316: MESSAGE: attach: IO Reg 'SPH' at 0x005e: ref = 0x005d
devsupp.c:332: MESSAGE: attach: IO Reg 'SREG' at 0x005f: created
avrcore.c:475: MESSAGE: attach: Internal SRAM from 0x0060 to 0x045f
decoder.c:3875: MESSAGE: generating opcode lookup_table
main.c:415: MESSAGE: Simulating clock frequency of 8000000 Hz
Waiting on port 1212 for gdb client to connect...
[1] 28517

$ avr-gdbtui --command=project.gdb

Connection opened by host 127.0.0.1, port -17752.
decoder.c:737: MESSAGE: BREAK POINT: PC = 0x00000073: clock = 2451

Содержание project.gdb

file project.out
target remote localhost:1212
load
break main
continue

 

В деббагере начинаю шагать по коду командой step, после выполнения присваивания регистрам ADMUX и ADCSRA значений, сервер SimulAVR выдает вот такие сообщения

 

memory.c:259: WARNING: **** Attempt to write invalid io reg: ADMUX at 0x0027
memory.c:259: WARNING: **** Attempt to write invalid io reg: ADCSRA at 0x0026

 

У меня два вопроса:

 

1) Что это означает и почему это ошибка вылезает?

 

2) Как его заставить вручную менять значения ADCL и ADCH, чтобы отдебажить работу прерывания?

 

Заранее благодарен, и надеюсь на Вашу помощь!

Изменено пользователем Darwinist

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADCSRA' at 0x0026
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADMUX' at 0x0027

Вот это TODO настораживает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

simulavr не пригоден для настоящей работы, в нем недоработок полным полно. И судя по темпам разработки будет готов он еще не скоро, если вообще будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а чем связка avarice + avr-gdb не устраивает?

 

а avarice умеет симулировать ядро?

 

Попробуй kontrollerlab. Там что-то отладочное шевелится. Хотя до аврстудии далеко :-(

 

kontrollerlab пробывал, но там режим симуляции чего-то нету, а я ищу именно симуляцию ядер под линуксом!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

kontrollerlab пробывал, но там режим симуляции чего-то нету, а я ищу именно симуляцию ядер под линуксом!

Версия 0.8.0 beta1

View -> Show memory view (смотреть внутренности)

Debug -> PC only debugging -> Enable

Изменено пользователем AlexU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Версия 0.8.0 beta1

View -> Show memory view (смотреть внутренности)

Debug -> PC only debugging -> Enable

 

Честно говорю, нажимал то, что Вы сказали, но почему-то не работало, мб не та фаза луны была :07:

 

Тепрь вроде работает, но есть небольшой нюанс: в AVRStudio, к примеру когда мне нужно было отладить прерывание ADC, я менял значение ADCL и отладчик меня какг-бэ перекидывал на прерывание, мол значения получены, пора и прерывание выполнить. А теперь вот не пойму я, как сие воспроизвести в KontrollerLab ?

 

PS: код слегка изменил:

 

#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>

int        U = 1;
float    U2 = 0;

ISR(ADC_vect){
    
    U2 = U / 100;
    U2 = U2 / 5;
    U = U2;
    
}

int main(void){
    
    DDRC = 0;
    ADMUX = 0;
    ADCSRA = 0x8F;

    sei();
    
    while(1){
        
        ADCSRA |= 0x40;
        
    }
    
    return    0;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну это же не студия, значит он работает по другому. Попробуйте поставить флаг прерывания АЦП с соответствующем регистре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...