[AVR Studio 6.1] Bug mit -nostartfiles?

Gast #3350919
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hab einen Bootloader, der funktioniert, wenn ich ihn ohne 
"-nostartfiles" baue. Wenn "-nostartfiles" aktiv ist, läuft er nicht 
immer.
Ich konnte das Problem darauf zurückführen, daß das RAM nicht immer 
sauber gelöscht wird.

Nun hab ich ein wenig den erzeugten Code verglichen und dabei fällt mir 
folgendes auf:

1. Ohne "-nostartfiles":
1
   7f000:  71 c0         rjmp  .+226      ; 0x7f0e4 <__ctors_end>
2
   ...
3
0007f0e4 <__ctors_end>:
4
   7f0e4:  11 24         eor  r1, r1
5
   7f0e6:  1f be         out  0x3f, r1  ; 63
6
   7f0e8:  cf ef         ldi  r28, 0xFF  ; 255
7
   7f0ea:  d1 e2         ldi  r29, 0x21  ; 33
8
   7f0ec:  de bf         out  0x3e, r29  ; 62
9
   7f0ee:  cd bf         out  0x3d, r28  ; 61
10
   7f0f0:  03 e0         ldi  r16, 0x03  ; 3
11
   7f0f2:  0c bf         out  0x3c, r16  ; 60
12
0007f0f4 <__do_clear_bss>:
13
   7f0f4:  22 e0         ldi  r18, 0x02  ; 2
14
   7f0f6:  a0 e0         ldi  r26, 0x00  ; 0
15
   7f0f8:  b2 e0         ldi  r27, 0x02  ; 2
16
   7f0fa:  01 c0         rjmp  .+2        ; 0x7f0fe <.do_clear_bss_start>
17
0007f0fc <.do_clear_bss_loop>:
18
   7f0fc:  1d 92         st  X+, r1
19
0007f0fe <.do_clear_bss_start>:
20
   7f0fe:  a2 30         cpi  r26, 0x02  ; 2
21
   7f100:  b2 07         cpc  r27, r18
22
   7f102:  e1 f7         brne  .-8        ; 0x7f0fc <.do_clear_bss_loop>

2. Mit "-nostartfiles":
1
0007f000 <__ctors_end>:
2
   7f000:  22 e0         ldi  r18, 0x02  ; 2
3
   7f002:  a0 e0         ldi  r26, 0x00  ; 0
4
   7f004:  b2 e0         ldi  r27, 0x02  ; 2
5
   7f006:  01 c0         rjmp  .+2        ; 0x7f00a <.do_clear_bss_start>
6
0007f008 <.do_clear_bss_loop>:
7
   7f008:  1d 92         st  X+, r1
8
0007f00a <.do_clear_bss_start>:
9
   7f00a:  a2 30         cpi  r26, 0x02  ; 2
10
   7f00c:  b2 07         cpc  r27, r18
11
   7f00e:  e1 f7         brne  .-8        ; 0x7f008 <.do_clear_bss_loop>
12
0007f010 <_jumpMain>:
13
   7f010:  cf ef         ldi  r28, 0xFF  ; 255
14
   7f012:  d1 e2         ldi  r29, 0x21  ; 33
15
   7f014:  de bf         out  0x3e, r29  ; 62
16
   7f016:  cd bf         out  0x3d, r28  ; 61
17
   7f018:  11 24         eor  r1, r1
18
   7f01a:  1f be         out  0x3f, r1  ; 63

Im 2. Code meine ich, folgenden Bug zu sehen:
Das RAM wird mit dem Inhalt von R1 beschrieben, aber R1 wird zuvor nicht 
gelöscht. Dies würde mein Problem erklären.

Was meint Ihr?
Gast #3351152
Lesenswert?
• ▲
▼
Stefan Ernst schrieb:
> Dosmo schrieb:
>> Was meint Ihr?
>
> Dass es mich nicht verwundert, denn schließlich sagst du ihm mit
> -nostartfiles ja explizit, dass er den Startup-Code weglassen soll (zu
> dem auch das Ausnullen des Zero-Reg gehört).

Also mich verwundert es schon, daß das do_bss_clear vorhanden ist, 
welches voraussetzt, daß R1 zuvor gelöscht wurde, aber eben dieses 
Löschen des R1 fehlt.

> Und was ist _jumpMain? Das sieht nach was "eigenem" aus. Das ist dann
> schlicht falsch platziert.

Ja, ist es eigenes (aber der Bootloader ist nicht von mir, ich darf nur 
die Fehler suchen).
#3351181
Lesenswert?
• ▲
▼
Dosmo schrieb:
> Also mich verwundert es schon, daß das do_bss_clear vorhanden ist,
> welches voraussetzt, daß R1 zuvor gelöscht wurde, aber eben dieses
> Löschen des R1 fehlt.

Das ist eine Funktion, die aus der Library hinzugelinkt wird. Und wie 
sämtlicher Library-Code, geht sie von einer korrekt aufgesetzten 
Umgebung aus. Wenn du -nostartfiles verwendest, bist du halt selbst 
dafür verantwortlich, die Grundlagen zu schaffen, und zwar vorher.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.