Hallo, ich versuche mich gerade ein wenig mit dem AVR-Dragon und einem ATmega16. Jetzt habe ich versucht im AVR Studio 4 SP3 einen Data-Breakpoint im SRAM zu setzten, aber AVR Studio meldet immer nur: "Unable to set data breakpoint. No available breakpoint resources." Ich habe sonst keine Breakpoints gesetzt. Was mir auch ein wenig komisch vorkommt ist, dass ich nur einen Hardware-Breakpoint setzten kann, wenn ich in den Optionen des Dragon unter Debug das Häckchen bei "Disable use of BREAK instruction for breakpoitns" gesetzt habe. Aber laut Datenblatt müsste ich doch eigentlich 3 setzten können. Ich habe auch schon mehrere ATmega16 ausprobiert, immer das gleiche Ergebnis. Könnte mir da bitte jemand helfen, oder hat wenigstens jemand einen Tip wo man dazu mal brauchbare Infos finden kann? Gruß Motu
Ich weiß nicht, wie AVR Studio das handhabt, aber ich weiß, wie es in AVaRICE + AVR-GDB implementiert ist. Auf was für Daten willst du denn einen breakpoint setzen? Das ICE kann nur breakpoints auf Bereiche setzen, die sich als Basisadresse + Maske darstellen lassen. Für Ein-Byte-Variablen ist das natürlich immer möglich, für größere jedoch nur, wenn sie passend im Speicher angeordnet sind. Da der AVR jedoch an sich keine Anforderungen ans memory alignment hat, schmeißt der Linker die Variablen natürlich so hin, wie sie gerade passen. Bei einer 16-bit-Variablen hast du also nur noch eine 50%ige Wahrscheinlichkeit, dass es klappt, bei größeren Variablen wird es noch schlechter. Im AVR-GDB wiederum könnte man den watchpoint (so heißt der data breakpoint dort) auch auf nur ein Byte einer Zwei-Byte-Variablen setzen (das genügt ja meistens), aber ich fürchte, die beschränkten Möglichkeiten des AVR Studio wiederum werden dir eine derartige Freiheit nicht bieten. Mit deinen anderen AVR-Studio-Fragen bin ich überfragt, weil ich das nicht benutze.
Hi >"Unable to set data breakpoint. No available breakpoint resources." Heisst ganz einfach, das Data Breakpoints nicht unterstützt werden. Das ist nur den teureren ICEs (>JTAG ICE MKII) vorbehalten. Steht auch, wenn ich micht recht erinnere, in der AVR-Studio Hilfe zu AVR Dragon. MfG Spess
Naja, das ist es ja gerade, beim Dragon steht genau da selbe drinne, wie z.B. in der Hilfe zum AVR One!, nämlich nur das die HW-Breakpoints vom OCD des jeweiligen Mikrocontrollers abhängig sind. Es wird in diesem Zusammenhang nur folgendes erwähnt: "Hardware breakpoints can be combined to form data breakpoints". (Steht direkt in der Hilfe zum Dragon unter On-Chip Debugging--> AVR OCD Implementations...) Aber die Fehlermeldung wird wohl leider wirklich darauf hindeuten, dass es mit dem Dragon nicht geht :( Aber trozdem Danke für die Hilfe.
St Ko schrieb: > Aber die Fehlermeldung wird wohl leider wirklich darauf hindeuten, dass > es mit dem Dragon nicht geht :( Nein, das hat mit dem Dragon nichts zu tun. Die Möglichkeit von data breakpoints hängt einzig von der im Controller vorhandenen Debug-Hardware ab, und JTAG auf dem MegaAVR kann sowas. (debugWIRE kann es nicht. PDI auf Xmega kann es auch, aber AVR Studio 5.x unterstützt es gleich mal gar nicht erst, nichtmal auf dem MegaAVR.) Warum gehst du nicht auf das ein, was ich dir geschrieben habe, und ergibst dich stattdessen in das scheinbar unvermeidliche Schicksal?
Beweis:
1 | $ cat test.c |
2 | unsigned char testchar; |
3 | |
4 | int |
5 | main(void) |
6 | { |
7 | testchar = 42; |
8 | return testchar; |
9 | } |
10 | $ avr-gcc -O0 -mmcu=atmega2560 -g -o test.elf test.c |
11 | $ avr-objdump -O ihex test.elf test.hex |
12 | $ avrdude -qq -c dragon_jtag -P usb -p atmega2560 -U test.hex |
13 | $ avarice -g -j usb :1212 & |
14 | AVaRICE version 2.12svn20111212, Dec 15 2011 14:43:18 |
15 | |
16 | Defaulting JTAG bitrate to 250 kHz. |
17 | |
18 | JTAG config starting. |
19 | Found a device: AVRDRAGON |
20 | Serial number: 00:a2:00:00:33:94 |
21 | Reported JTAG device ID: 0x9801 |
22 | Configured for device ID: 0x9801 atmega2560 |
23 | JTAG config complete. |
24 | Preparing the target device for On Chip Debugging. |
25 | Waiting for connection on port 1212. |
26 | |
27 | $ avr-gdb test.elf |
28 | GNU gdb 6.8 |
29 | Copyright (C) 2008 Free Software Foundation, Inc. |
30 | License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> |
31 | This is free software: you are free to change and redistribute it. |
32 | There is NO WARRANTY, to the extent permitted by law. Type "show copying" |
33 | and "show warranty" for details. |
34 | This GDB was configured as "--host=i686-pc-linux-gnu --target=avr"... |
35 | (gdb) target remote :1212 |
36 | Remote debugging using :1212 |
37 | 0x00000000 in __vectors () |
38 | (gdb) watch testchar |
39 | Hardware watchpoint 1: testchar |
40 | (gdb) c |
41 | Continuing. |
42 | |
43 | Program received signal SIGTRAP, Trace/breakpoint trap. |
44 | 0x000000fe in .do_clear_bss_start () |
45 | (gdb) c |
46 | Continuing. |
47 | |
48 | Program received signal SIGTRAP, Trace/breakpoint trap. |
49 | main () at test.c:7 |
50 | 7 return testchar; |
51 | (gdb) det |
52 | Ending remote debugging. |
53 | (gdb) quit |
Du siehst, der data breakpoint (watchpoint beim GDB) schlägt genau zweimal zu: einmal während der Initialisierung, ein zweites Mal, wenn die 42 zugewiesen wird. Dabei steht der PC jedoch bereits auf der Anweisung danach, da ein data breakpoint "post mortem" zuschlägt, während ein instruction breakpoint triggert, bevor der Befehl ausgeführt wird.
Naja, das Problem ist halt, das ich auf AVR Studio 4 und AVR Dragon beschränkt bin, soll heißen ich kann leider keine andere Entwicklugnsumgebung hier am entsrehcenden Arbeitsplatz nutzen (Gründe dafür lass eich mal außen vor ;) ). Das man Variablen gößer als 1Byte speziell behandeln muss wegen den von dir genannten Gründe war mir schon bewusst. Deshalb wollte ich eignetlich auch nur eine ein Byte große Var nutzen (ich denke doch mal mit int8_t sollte das gegeben sein). Wie gesagt versteh ich halt auch die Fehlermeldung nicht so ganz, da es ja laut Datenblatt möglich sein sollte, genauso wie 3 statt nur einem HW-BReakpoitn möglich sein sollten.
St Ko schrieb: > Deshalb wollte ich > eignetlich auch nur eine ein Byte große Var nutzen (ich denke doch mal > mit int8_t sollte das gegeben sein). Ja. > Naja, das Problem ist halt, das ich auf AVR Studio 4 und AVR Dragon > beschränkt bin, soll heißen ich kann leider keine andere > Entwicklugnsumgebung hier am entsrehcenden Arbeitsplatz nutzen Dann kannst du dich bei demjenigen beklagen, der das festgelegt hat. Du kannst auch versuchen, bie Atmel einen Support-Request aufzumachen, aber falls es sich um einen Bug handelt, wird wohl an AVR Studio 4.x kaum noch einer was dran machen wollen dort.
Naja, wenns nicht geht ist auch nicht so schlimm jetzt, wäre halt nur schön gewesen, aber vielen dank für die Hilfe :)
St Ko schrieb: > ich kann leider keine andere > Entwicklugnsumgebung hier am entsrehcenden Arbeitsplatz nutzen (Gründe > dafür lass eich mal außen vor ;) ). Wenn mir der data-breakpoint mehrere Stunden Arbeit ersparen würde, dann hätte ich auch am Arbeitsplatz ruck-zuck Eclipse nebst gdb installiert, und am laufen. Wer kann und will dich dran hindern? Oliver
Mhhh, es ist mir fast zu peinlich, aber ich habe scheinbar die Ursache meiner Probleme gefunden. Beim VErsuch statt es ATmega16 ein 32er zu nehmen ist mir aufgefallen das ich Pin30, also AVCC, anstatt PIN31 auf GND gelegt habe. Nun kann ich 3 HW-Breakpoints und Databreakpoints nutzen, sehr merkwürdig :D
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.