Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR-GDB & SimulAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Darwinist
Дорогие форумчане, необходима ваша помощь!

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

Код
#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, чтобы отдебажить работу прерывания?

Заранее благодарен, и надеюсь на Вашу помощь!
GDI
Код
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADCSRA' at 0x0026
devsupp.c:338: MESSAGE: TODO: attach IO Reg 'ADMUX' at 0x0027
Вот это TODO настораживает...
ataradov
simulavr не пригоден для настоящей работы, в нем недоработок полным полно. И судя по темпам разработки будет готов он еще не скоро, если вообще будет.
AlexU
Попробуй kontrollerlab. Там что-то отладочное шевелится. Хотя до аврстудии далеко :-(
xelax
а чем связка avarice + avr-gdb не устраивает?
Darwinist
Цитата(xelax @ Aug 4 2009, 17:00) *
а чем связка avarice + avr-gdb не устраивает?


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

Цитата(AlexU @ Aug 4 2009, 16:55) *
Попробуй kontrollerlab. Там что-то отладочное шевелится. Хотя до аврстудии далеко :-(


kontrollerlab пробывал, но там режим симуляции чего-то нету, а я ищу именно симуляцию ядер под линуксом!
xelax
Цитата(Darwinist @ Aug 4 2009, 18:21) *
а avarice умеет симулировать ядро?


Лучше smile.gif, позволяет дебажиться на реальном железе.
AlexU
Цитата(Darwinist @ Aug 4 2009, 17:21) *
kontrollerlab пробывал, но там режим симуляции чего-то нету, а я ищу именно симуляцию ядер под линуксом!

Версия 0.8.0 beta1
View -> Show memory view (смотреть внутренности)
Debug -> PC only debugging -> Enable
Darwinist
Цитата(AlexU @ Aug 5 2009, 09:55) *
Версия 0.8.0 beta1
View -> Show memory view (смотреть внутренности)
Debug -> PC only debugging -> Enable


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

Тепрь вроде работает, но есть небольшой нюанс: в 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;

}
GDI
Ну это же не студия, значит он работает по другому. Попробуйте поставить флаг прерывания АЦП с соответствующем регистре.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.