avr-gcc - usuniecie "nadmiarowego" kodu

Witam!

Chciałbym wziąść sprawy w swoje ręce:

a) Nie chce aby w wynikowym kodzie pojawiała się sekcja .text z całą masą wektorów przerwań/etc. W ogóle nie ma być generowany kod inicjujacy zmienne globalne.

b) Nie chce inicjacji stosu z main(). Konkretnie taka funkcja:

main() { }

ma się kompilowac do nieskończonej pętli i ani instrukcji więcej (w ostateczności może to być funkcja _exit).

Czy ktoś może mi powiedzieć jak to osiągnąć w avr-gcc ? Czytam dokumentacje, ale na razie nic nie trafiłem.

Nie ukrywam, ze postanowiłem zrobić bootloader i te "śmieci" troche przeszkadzają. A gotowca nie moge wykorzystac, bo mam troche nietypowy protokół ... :)

Reply to
Sebastian Bialy
Loading thread data ...
Reply to
invalid unparseable

Należałoby dodać jeszcze własną (okrojoną) wersję crt inaczej nie ma pewności, że po starcie uC sterowanie zostanie przekazane do main. Natomiast dodanie __attribute__ ((naked)) do main pozwoli na pozbycie się inicjalizacji stosu.

Reply to
Zbych

Dziękuje za info, ale tego zdania nie rozumiem. Jak to nie ma pewności ? Jesli ustawie funkcje main w odpowiedniej sekcji to raczej powinna skopilowac się tam, gdzie ustawie ją w linkerze. Np. od 0x0000 albo na początku bootloadera.

Jakie widzisz konkretnie zagrożenia* ?

Faktycznie wycieło stos. Zostało jednak coś takiego:

ldi r24, 0x00 ldi r25, 0x00

nie ma tez _exit ani nieskończonej pętli (co sobie sam zrobie). Po co jednak te dwie instrukcjie ?

[*] Własnie wpadło mi do głowy inna kolejnośc funkcji w bootoladerze i "main" może nie wypaść jako pierwsza.
Reply to
Sebastian Bialy

Dizęki, jest już bardzo blisko. Jedyne co zostało to sekcja "zero" ktora posiada tylko:

00000000 <_zero_>: 0: 08 95 ret

Diabli wiedzą po co ;)

Całośc wygląda teraz tak:

Disassembly of section .bootloader:

0001e000 <main>: 1e000: 80 e0 ldi r24, 0x00 ; 0 1e002: 90 e0 ldi r25, 0x00 ; 0 Disassembly of section .zero: 00000000 <_zero_>: 0: 08 95 ret

gdzie 1e000 to początek mojej sekcji .bootloader (wyssany z palca na razie).

Reply to
Sebastian Bialy

Ok już jasne :)

Mój błąd, przy normalnej kompilacji sekcja .zero się nie pojawia. Mam już całkowiecie czysty kod :)

Dziękuje za pomoc i powoli zaczynam rzeźbę bootloadera.

Reply to
Sebastian Bialy

[...]

Parę dni temu pisałem o tym:

formatting link

Pewnie zadeklarowałeś, że main ma zwrócić zmienną typu int. Jak zmienisz na void, to te instrukcje znikną.

Reply to
Zbych

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.