Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 15 lis 2024, o 21:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 29 mar 2012, o 17:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

Jak to zwykle bywa są też problemy z debugerem, ale nie jest to aż takie tragiczne jak się wydaje :)
tak więc będziemy kontynuować to zagadnienie gdyż temat jest ciekawy, ale może wprowadzić pewnego
rodzaju frustracje że coś jest nie tak , wiesza się lub nie działa dobrze:)

Na początek parę ostrzeżeń i uwag jeśli chodzi o użytkowanie debugera w eclipse:

#RESTART

Służy do tego celu mały przycisk na pasku narzędzi, który wygląda takObrazek
Jest ładny i poręczny , ale UWAGA !! nie działa on z avr-gdb.
Wciśnięcie go spowoduje zakończenie sesji debugera z komunikatem o błędzie.
Spowodowane jest to że w tle Eclipse wysyła "-exec-run" do avr-gdb, a w efekcie tego avrdude
"zabija" gdbserwer i pokazuje komunikat o błedzie "Don't know how to run."

oczywiście ten problem jak i większość można obejść ponieważ kolejna przewaga Eclipse nad innymi środowiskami jest jego niesamowita wręcz elastyczność. Oto jak to można zrobić:

Musimy wykonać miękki reset (Soft reset), w tym celu ustawiamy punkt przerwania (breakpoint)
w np. main() lub innej funkcji, w której chcemy zatrzymać wykonywanie operacji na rejestrach widocznych
w PC który musimy ustawić na 0. (PC= Program Counter).
Teraz wykonać musimy wznowienie programu "RESUME"
cała ta operacja spowoduje że procesor wznowi wykonywanie programu pod adresem 0x0000, jest to miejsce wektora RESETU dla wszystkich procesorów AVR bez wyjątku.
Nie jest to jednak RESET taki jak byśmy chcieli gdyż musimy pamiętać żeby wejść i wyjść z kontroli rejestrów
bo inaczej pozostaną one na poprzednim stanie.

# Breakpointy i watchpointy w Avarice

Tu trzeba pamiętać, że procesory AVR w trybie JTAG maja tylko BACZNOŚĆ !! 3 dostępne pułapki sprzetowe,
z których dwie mogą być zamieniane na "watchpointy" pamięci.
W trybie debugWIRE nie są obsługiwane sprzętowe breakpointy i watchpointy przez AVR:(

AVaRICE ma na szczęście możliwość z korzystania z tak zwanych miękkich punktów przerwania (soft breakpoints), są to specjalne instrukcje zapisane w pamięci flash pod wymaganym adresem przerwania.
Gdy program natrafi na taki punkt zostaje zapisana oryginalna zawartość strony we flash ponownie.
Czyli każdy SBP powoduje co najmniej 2 cykle zapisu pamięci flash. Co ciekawe pomimo tego że w AVR ilość
cykli zapisu do pamięci flash jest zwykle sporo większa od gwarantowanych przez producenta 1.000 cykli (dla starszych procków) należy o tym jednak pamiętać podczas pracy z debugerem i wieloma punktami SBP.

Soft watchpoints w SRAM są również obsługiwane przez AVaRICE, ale (no tak zaś mam jakieś :)) znacząco spowalniają działanie debugera ponieważ nasze drogie AVaRICE musi wykonywać każdą instrukcje w
pojedynczych krokach i sprawdzić po wykonaniu pamięć SRAM. Dlatego trzeba pamiętać, że oglądanie 16-bitowych wartości np: wskaźnika, wykorzystuje 2 watchpointy, po jednym dla każdego bajta.
dlatego myślę że taki mój mały pomysł aby oglądać tylko 1 bajt 16 bitowej wartości - wykorzysta nam tylko jeden watchpoint :) i na tym 1 bajcie oglądać zmiany.


# Kilka słów o architekturze AVR --> na tym etapie to konieczne

Jak wiecie procesory AVR maja architekturę Harvardzką co oznacza w uproszczeniu oddzielny kod i przestrzenie adresowe.
Aby odróżnić adres danych 0(SRAM) od adresu kodu 0(FLASH) debuger dodaje 0x800000 do wszystkich adresów danych.
Miejcie to na UWADZE przy rozpatrywaniu wskaźników pamięci FLASH (np wskaźniki łańcuchów).
Na domiar tego jeszcze bardziej skomplikowana jest w AVR przestrzeń kodowa 16-bitowego słowa i przestrzeni danych 8-bitowych.
Ale na szczęście avr-gdb używa tylko 1 bajtowych adresów więc wszystkie adresy w przestrzeni kodu pokazane przez debuger należy podzielić
przez 2, aby uzyskać faktyczny adres używany przez procesor.


#PRZYKŁAD

Mamy zrzut pamięci pod adresem 0x0000 (wektor reset) , widzimy adres <0C 94 6D 00>. W składni AVR <0C 94>
jest to kod dla skoku <tjmp> i <6D 00> co zawiera zakodowany adres skoku. Jeśli zdeasemblujemy część
z avr-gdb wyjdzie nam <tjmp 0xDa> = skok do adresu 0x00da, jeśli wiec wykonamy ten skok w debugerze to w avr-gdb bajtowy adres będzie
0x00da (binarnie 11011010). Jeśli tą wartość podzielimy przez 2 otrzymamy
0x006d (binarnie 01101101) i ten właśnie adres widzi procesor :)

Mam nadzieje że ten opis jest dla was przejrzysty tak to widzi avr-gdb i jest to zgodne z jego adresacją.
Wiem że może to być początkowo problemem jeśli w deasemblacji będziecie robić porównanie adresów do zrzutu pamięci ,
i może być mylące , ale trzeba się tego nauczyć i przyzwyczaić inaczej praca z Debugerem
niema najmniejszego sensu.

Należy również pamiętać, że pierwsza część przestrzeni adresowej danych jest używana do przechowywania
map rejestrów CPU i I/O oraz do kontroli rejestrów. Natomiast rzeczywista pamieć SRAM zaczyna się za
rejestrami I/O i wielkość bloków rejestrów I/O zależy od modelu procesora.

--------------------------------------------------------------------------------------------------------------
Tak wprowadziłem trochę zamętu i zamieszania , wielu się przerazi zapewne
i zapomni o debugowaniu:) , ale wierzcie mi bez tej wiedzy to od razu lepiej
sprzedajcie JTAGI bo to tak jakby dać zegarek komuś , kto nie umie go nakręcić :)
Ale to nie koniec straszenia :)
---------------------------------------------------------------------------------------------------------------


#Rozwiązywanie problemów z debugerem

Jeśli masz problemy z debugerem w Eclipse to tu zamieszczę kilka porad jak sobie z tym poradzić
i uruchomić aplikacje debugera.

Pierwszy przełacznik w konsoli "verbose" na na stronie z konfiguracji debugera można równie dobrze sobie włączyć debugowanie na
wyjściu serwera GDB. Wystarczy dodać kilka odpowiednich argumentów do wiersza poleceń :

--- dla AVaRICE: "-D" lub "-debug"
--- dla simulAVR: "G" lub "-gdb-debug"

I następnie można rozpocząć debugowanie.
poniżej przykładowa lista wejść avr-gdb dla prawidłowej sesji debugera:

Krótka instrukcja jak to czytać :)

Wszystko co zaczyna się nowym numerem sekwencji jest komenda wysyłaną przez Debuger Eclipse
do avr-gdb.

Wszystko co sie zaczyna od litery lub '^', '&', '~' i '*' jest odpowiedzią generowana przez avr-gdb.

Wszystko inne to śmieci (non-verbose) z wyjścia avr-gdb , który jest dosyć gadatliwy :)



Od początku sesji do momentu trafienia na przerwanie (breakpoint) w funkcji main ()

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pojedynczy krok "Step over 'w źródle C

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Otwarcie widoku Deasemblacji

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ustawienie nowego Breakpointa

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Uruchomienie programu do następnego Breakpointa

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


>>> Analiza wyjścia debugera avr-gdb.

Należy o tym pamiętać bo jest to bardzo ważne !!!

-->> wszystkie 3 zaangażowane części (eclipse, avr-gdb i gdbserver) należy zawsze uruchamiać asynchronicznie, a
-->> avr-gdb będzie chętnie nadal działał nawet jeśli gdbserwer się zawiesił :)

ważne zatem jest, aby przewinąć sobie wyjście avr-gdb trochę do góry, aby znaleźć prawdziwą przyczynę
awarii. Koniec dziennika zwykle NIE jest przyczyną problemu:)

Jeśli nie jesteście zaznajomieni z poleceniami gdb to warto poszukać instrukcji do GDB zwłaszcza rozdziału o interfejsie GDB/Mi.

O to kilka fragmentów wyjścia z avr-gdb z typowymi problemami:

--->>Could not connect...

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ten komunikat jest wyświetlany, gdy avr-gdb nie może połączyć się z gdbserver. Sprawdź, gdbserver (AVarice lub simulavr)
czy jest uruchomiony i że numery portów są takie same. Zauważ, że nawet z tym błedem Eclipse i avr-gdb będzie
kontynuować sesję debugowania. ale otrzymasz wiadomość że "program nie jest uruchomiony":)

--->>Don't know how to run

Składnia: [ Pobierz ] [ Ukryj ]
język div
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No przecież pisałem żeby nie naciskać tego przycisku: Obrazek

No błędów różnych może się nam pojawić wiele , a ja nie jestem w stanie wszystkich opisać
jak będą jakieś nie wymienione piszcie , postaram się pomóc ich pozbyć jak też im zaradzić i wyjaśnić czego dotyczą.

miłej lektury :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2012, o 01:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

U mnie dzieje się tak że pomimo ustawienia breakpointa to nie zatrzymuje się tylko wywala mi błąd że w danym pliku niema lini z breakpointem.

Oto log:

Kod:
224-gdb-set confirm off
224^done
(gdb)
225-gdb-set width 0
225^done
(gdb)
226-gdb-set height 0
226^done
(gdb)
227-interpreter-exec console echo
227^done
(gdb)
228-gdb-show prompt
228^done,value="(gdb) "
(gdb)
229
&"\n"
229^done
(gdb)
230-gdb-set stop-on-solib-events 0

230^done
(gdb)
231-gdb-set stop-on-solib-events 1
231^done
(gdb)
232-target-select remote localhost:4242
232^connected,thread-id="0",frame={addr="0x00000000",func="__vectors",args=[]}
(gdb)
233-environment-cd C:\\avrproj\\08_TWI
233^done
(gdb)
234-environment-directory C:/avrproj/08_TWI C:/avrproj/08_TWI C:/avrproj/08_TWI/.settings C:/avrproj/08_TWI/Debug C:/avrproj/08_TWI/Debug/I2C_TWI C:/avrproj/08_TWI/Debug/LCD C:/avrproj/08_TWI/I2C_TWI C:/avrproj/08_TWI/LCD C:/avrproj/08_TWI/RTC C:/avrproj/08_TWI/Release C:/avrproj/08_TWI/Release/Debug C:/avrproj/08_TWI/Release/Debug/I2C_TWI C:/avrproj/08_TWI/Release/Debug/LCD C:/avrproj/08_TWI/Release/I2C_TWI C:/avrproj/08_TWI/Release/LCD C:/avrproj/08_TWI/Release/RTC
234^done,source-path="C:/avrproj/08_TWI;C:/avrproj/08_TWI/.settings;C:/avrproj/08_TWI/Debug;C:/avrproj/08_TWI/Debug/I2C_TWI;C:/avrproj/08_TWI/Debug/LCD;C:/avrproj/08_TWI/I2C_TWI;C:/avrproj/08_TWI/LCD;C:/avrproj/08_TWI/RTC;C:/avrproj/08_TWI/Release;C:/avrproj/08_TWI/Release/Debug;C:/avrproj/08_TWI/Release/Debug/I2C_TWI;C:/avrproj/08_TWI/Release/Debug/LCD;C:/avrproj/08_TWI/Release/I2C_TWI;C:/avrproj/08_TWI/Release/LCD;C:/avrproj/08_TWI/Release/RTC;$cdir;$cwd"
(gdb)
235 info threads
&"info threads\n"
&"warning: RMT ERROR : failed to get remote thread list.\n"
235^done
(gdb)
236-data-list-register-names
236^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18","r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29","r30","r31","SREG","SP","PC"]
(gdb)
237-stack-info-depth
237^done,depth="1"
(gdb)
238-break-insert main.c:35
&"No line 35 in file \"../main.c\".\n"
No line 35 in file "../main.c".
238^error,msg="No line 35 in file \"../main.c\"."
(gdb)
239-stack-list-frames 0 1
239^done,stack=[frame={level="0",addr="0x00000000",func="__vectors"}]
(gdb)
240-exec-continue
240^running
(gdb)


a po zapauzowaniu programu wszystko ładnie się zatrzymuje i pokazuje gdzie itd. Ale z tym breakpointem się nadal pluje

log:
Kod:
(gdb)
240*stopped,reason="signal-received",signal-name="SIGINT",signal-meaning="Interrupt",thread-id="0",frame={addr="0x00000134",func="data_dir_out",args=[],file="../LCD/lcd44780.c",fullname="C:/avrproj/08_TWI/.settings/../LCD/lcd44780.c",line="49"}
(gdb)
241 info threads
&"info threads\n"
&"warning: RMT ERROR : failed to get remote thread list.\n"
241^done
(gdb)
242-stack-info-depth
242^done,depth="2"
(gdb)
243-stack-list-frames 0 2
243^done,stack=[frame={level="0",addr="0x00000134",func="data_dir_out",file="../LCD/lcd44780.c",fullname="C:/avrproj/08_TWI/.settings/../LCD/lcd44780.c",line="49"},frame={level="1",addr="0x00002c52",func="??"}]
(gdb)
244-data-list-changed-registers
244^done,changed-registers=["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34"]
(gdb)
245 info sharedlibrary
&"info sharedlibrary\n"
~"No shared libraries loaded at this time.\n"
245^done
(gdb)
246-break-insert main.c:35
&"No line 35 in file \"../main.c\".\n"
No line 35 in file "../main.c".
246^error,msg="No line 35 in file \"../main.c\"."
(gdb)
247 info signal SIGINT
&"info signal SIGINT\n"
~"Signal        Stop\tPrint\tPass to program\tDescription\n"
~"SIGINT        Yes\tYes\tNo\t\tInterrupt\n"
247^done
(gdb)
248-data-disassemble -f C:/avrproj/08_TWI/.settings/../LCD/lcd44780.c -l 49 -n 100 -- 1
248^done,asm_insns=[src_and_asm_line={line="47",file="../LCD/lcd44780.c",line_asm_insn=[{address="0x0000011a",func-name="data_dir_out",offset="0",inst="std\tY+6, r24\t; 0x06"},{address="0x0000011c",func-name="data_dir_out",offset="2",inst="movw\tr18, r28"},{address="0x0000011e",func-name="data_dir_out",offset="4",inst="subi\tr18, 0xFC\t; 252"},{address="0x00000120",func-name="data_dir_out",offset="6",inst="sbci\tr19, 0xFF\t; 255"}]},src_and_asm_line={line="48",file="../LCD/lcd44780.c",line_asm_insn=[{address="0x00000122",func-name="data_dir_out",offset="8",inst="ldi\tr24, 0xA2\t; 162"},{address="0x00000124",func-name="data_dir_out",offset="10",inst="ldi\tr22, 0x02\t; 2"},{address="0x00000126",func-name="data_dir_out",offset="12",inst="ldi\tr20, 0x03\t; 3"},{address="0x00000128",func-name="data_dir_out",offset="14",inst="call\t0x11b4\t;  0x11b4 <_fpadd_parts+642>"},{address="0x0000012c",func-name="data_dir_out",offset="18",inst="ldi\tr24, 0x8E\t; 142"},{address="0x0000012e",func-name="data_dir_out",offset="20",inst="ldi\tr25, 0x00\t; 0"}]},src_and_asm_line={line="49",file="../LCD/lcd44780.c",line_asm_insn=[{address="0x00000130",func-name="data_dir_out",offset="22",inst="call\t0x7e2\t;  0x7e2 <lcd_init+210>"},{address="0x00000134",func-name="data_dir_out",offset="26",inst="lds\tr24, 0x010C"},{address="0x00000138",func-name="data_dir_out",offset="30",inst="and\tr24, r24"},{address="0x0000013a",func-name="data_dir_out",offset="32",inst="breq\t.-8      \t;  0x134 <data_dir_out+26>"},{address="0x0000013c",func-name="data_dir_out",offset="34",inst="movw\tr18, r28"}]},src_and_asm_line={line="50",file="../LCD/lcd44780.c",line_asm_insn=[{address="0x0000013e",func-name="data_dir_out",offset="36",inst="subi\tr18, 0xFC\t; 252"},{address="0x00000140",func-name="data_dir_out",offset="38",inst="sbci\tr19, 0xFF\t; 255"},{address="0x00000142",func-name="data_dir_out",offset="40",inst="ldi\tr24, 0xA2\t; 162"},{address="0x00000144",func-name="data_dir_out",offset="42",inst="ldi\tr22, 0x02\t; 2"},{address="0x00000146",func-name="data_dir_out",offset="44",inst="ldi\tr20, 0x03\t; 3"},{address="0x00000148",func-name="data_dir_out",offset="46",inst="call\t0x125c\t;  0x125c <__addsf3+48>"}]},src_and_asm_line={line="51",file="../LCD/lcd44780.c",line_asm_insn=[{address="0x0000014c",func-name="data_dir_out",offset="50",inst="ldi\tr24, 0x8C\t; 140"},{address="0x0000014e",func-name="data_dir_out",offset="52",inst="ldi\tr25, 0x00\t; 0"},{address="0x00000150",func-name="data_dir_out",offset="54",inst="call\t0x7e2\t;  0x7e2 <lcd_init+210>"},{address="0x00000154",func-name="data_dir_out",offset="58",inst="ldd\tr24, Y+4\t; 0x04"},{address="0x00000156",func-name="data_dir_out",offset="60",inst="call\t0x3e6\t;  0x3e6 <lcd_char+40>"}]},src_and_asm_line={line="52",file="../LCD/lcd44780.c",line_asm_insn=[{address="0x0000015a",func-name="data_dir_out",offset="64",inst="std\tY+3, r24\t; 0x03"},{address="0x0000015c",func-name="data_dir_out",offset="66",inst="ldd\tr24, Y+5\t; 0x05"},{address="0x0000015e",func-name="data_dir_out",offset="68",inst="call\t0x3e6\t;  0x3e6 <lcd_char+40>"}]}]
(gdb) 


To wygląda jakby coś się pogubiło ze ścieżkami...
taki błąd: No line 35 in file \"../main.c\"." ... a tam jest właśnie breakpoint.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2012, o 10:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

hmmm...

jaki masz debuger ??

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2012, o 11:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Jeśli chodzi hardware to jest to AVR JTAGICE Compatible, zgodny z mkI.

Problem coś jest z kompilacją bo tak jakby gdzieś brakowało tego odniesienia i samej pułapki w skompilowanym kodzie.

Podam screeny z konfiguracją:

AvaRice

ObrazekObrazekObrazekObrazek

Debug Configuration

ObrazekObrazekObrazekObrazekObrazekObrazek


Programator działa, bo jak uruchomię w trybie debugera program, to wszystko ładnie działa, można pauze zrobić podejrzeć rejestry i wznowić działanie. Pokazuje normalnie w której procedurze zatrzymałem itd. no i mogę krokowo wykonać program tzn po jednej lini.
Tylko coś z tymi pułapkami nieten teges.



ps. tak na marginesie, pytanie do Sunduino czy Eclipse już masz gotowy skonfigurowany? bo wspominałeś że kiedyś to masz zamiar sklecić.:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2012, o 11:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

config widzę masz ok , oczywiście kompilacje robisz w trybie debug ??
przeczytaj jeszcze raz o ograniczeniach w breakpointach.

Jest gotowe clipse dla sunduino , dałem do testów , także wejdz w temat i przetestuj , bo mogą jeszcze być jakieś problemy

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2012, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Ojj coś Eclipse u mnie nie działa jak chcę jeśli chodzi o debugera. Próbowałem instalować Te wersje z dropboxa, ale pojawiały się jakieś błędy kosmosy. Kombinowałem całą niedzielę.

A co najlepsze wziąłem AVR Studio i sprawdziłem czy niema czasem problemu z tymi breakpointami tam, okazało się że bez żadnych problemów debugował - reagował na breakpointy itd.

Łapki opadają.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2012, o 22:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

Xbary: nikt nie mówił że będzie łatwo ... konfig dla Dragona działa bez problemów podobnie dla JTAGICE II ATMELA
na temat klonów się nie wypowiadam ... bo jedne lepsze inne gorsze , miałem 2 klony różne JTAG ICE i poza
programowaniem żaden nie działał prawidłowo w trybie debug na AS4 - kupiłem oryginał i skończyły się problemy :)

Nie wiem co zaś jest z tym u was. Paczki na dropie są te same których używam na co dzień, po prostu spakowałem i dałem na dropa - może czas zrobić format i system od bablolić ??

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2012, o 08:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

hmm... dziś tak na świeżo pomyślałem że prawdopodobnie te narzędzia od debugowania GDB itd mogą działać na nakładce cygwin a część programów w normalnie pod windows i to się kłóci. Tak jak wczesniej wspominałem o tym numerze portu że inaczej po unixowemu trzeba wpisać to może dalej coś nie tak jest ze ścieżkami i się gubi i nie wstawia breakpointów.
Zaznaczam że mój programator klon itd współpracuje z AS 4.18 reaguje na breakpointy - czyli to nie wina samego programatora, tylko na etapie kompilacji w eclipse czegoś nie kompiluje jak powinien itd... przerosło mnie to dosłownie:) kilka dobrych dni nad tym siedzę.
Dziś znowu coś sprawdzę, odinstaluje wszystkie programy które u mnie mam na kompie które na cygwin działają, albo mingwin i na czysto eclipse rozpakuje i zobaczę jak działa. Bo na jednym eclipse Jungo udało mi sie doprowadzić że program się zatrzymał podczas debugowania na początku funkcji main tak jak miałem zaznaczone w konfiguracji, ale to już była prawie noc 12 godzin przed kompem i coś podusiłem sam nie wiem co, i w ogóle przestał się kompilować program wyrzucał błędy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2012, o 09:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

Jeszcze raz przeczytaj wyżej o problemach z gdb-serwerem , pobierz nowsze avariace bo ten z winavr trochę stary
i zobacz w pierwszej części na ustawienia linkera

nie mam żadnego klona żeby to sprawdzić , ale ze starym moim klonem na RS232 działa prawidłowo

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2012, o 21:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

No i zmusiłem Eclipse do breakpointowania :) pewnie się uśmiacie, ale zbyt dużo ustawień jak na jedno podejście chyba.

Teraz tak, powodem że niby debugował a nie chciał reagować na breakpointy było to że do mikrokontrolera nie został uploadowany (chyba powinien automatycznie) skompilowany kod .hex w ustawieniach z ustawieniami debugerowymi. Co musiałem kliknąć:

- Z menu w perspektywie debug lub po wybraniu konfiguracji debug w project/properties następnie C/C++ Build/Settings w zakładce ToolSettings i pierwsza pozycja Aditional Tools in Toolchain należało zaznaczyć opcje generate Hex flash i eeprom. Chodzi o to żeby skompilować projekt do pliku Hex w konfiguracji debug.
- Następnie tak skompilowany hex z katalogu Debug trzeba uploadować avrdudem do mikrokontrolera
- Kolejnym krokiem jest już przejście w perspektywe Debug i uruchomienie AVarice i następnie debugera, :) dopiero reaguje na breakpoint ehh.

Oczywiście przed tym zabiegiem tzn kolejnymi próbami zrobiłem wylot z systemu wszystkich programów opartych na cygwin oraz czyszczenie ccleanerem pozostałości po konfiguracji i martwe Path, dopiero zainstalowałem po tym zabiegu WinAVR-20100110 tak jak sugerował instaler.
Eclipse mam z chomika wersja Genymade spakowane częściowo uszykowane pod AVR ale z pomocą tego forum (tzn Was) doklikałem ustawienia tu i tam i jak narazie na próbach śmiga.

Odnośnie Avarice nowego ściągniętego ze oficjalnej strony projektowej, ściągłem i chyc skopiowałem do odpowiedniego katalogu gdzie stary był. I jest zonk bo niechce działać, potrzebuje jakiejś nowszej wersji biblioteki cygwin1.dll i sztopa. Nawet ściągnięcie najnowszego Cygwin nic nie dał, bo kopiowałem kolejno biblioteki które wołał aż zatrzymałem się na cygusb*.* i za chiny niemogłem znaleźć tej biblioteki.
Pozostałem przy starym/oryginalnym z WinAvr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2012, o 21:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

Czyli jednak twój klon nie działa , prawidłowo bo wymaga uploadu via avrdude , ale to zaden problem , a pytałem czy komplacje robisz dla DEBUG :P

------------------------ [ Dodano po: kilkunastu sekundach ]

Po powrocie zapodam na dropa działajace nowe avriace

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2012, o 21:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Z tą kompilacją to coś kompilował bo na dole widziałem że było podsumowanie wielkości flash itd, ale nie uploadował go.

Co jak co, to Avrdude programuje tym programatorem jako mkI i działa. Problem jest coś z jakimś ustawieniem które nie działa jak jestem w trybie widoku debug które odpoweidzialne jest za upload do uC. Tak jakby plik .elf miał być kompletnym flash do uploadowania ale żadne z ustawień nie chce nim zaproramować uC, tylko .hex nadaje się do programowania. Dlatego muszę kompilować i uploadować z dodatkami debugera a nastepnie w widoku Debug uruchomić debugowanie.


To wracaj spokojnie Sunduino, ciekawe czy ten nowy od ciebie avarice zadziała u mnie na (prawie) Wartą:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2012, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8586
Pomógł: 337

No właśnie bo twój klon nie pozwala na symulację szprzętowa tylko programową i dlatego chcąc debugowac na sprzecie musisz zadbac o wgranie wsadu w postaci hex bo elfa nie załaduje jako ICE :(

Tu ci powiem TAK:
Diała u mnie na 4 debugerach:

AVR DRAGON
AVR ONE
AVR ICE MKII
i na moim starym klonie AVRICE mki RS232

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO