RTV forum PL | NewsGroups PL

Jak zrzucić adresy funkcji do pliku podczas kompilacji w avr-gcc?

avr-gcc adresy funkcji

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zrzucić adresy funkcji do pliku podczas kompilacji w avr-gcc?

Goto page 1, 2  Next

pawel
Guest

Mon Mar 23, 2015 6:43 pm   



Wtiam.

Mam taki problem.

Czy jest taka możliwość żeby adresy funkcji w momencie kompilacji/linkowania
projektu zrzucić do jakiegoś pliku?
Chodzi o to że mam tablicę adresów funkcji np:

typedef int( * HANDLER)(void);
HANDLER handler[] = {h1, h2, h3};

I teraz wyłuskać to np: z plików .o.

Udaje mi się to ze zmiennymi które zawierają np: napisy (stałe) w ten sposób
że umieszczam je w oddzielnej sekcji w pliku nazwy.c

char nazwy[] __attribute__((section(".dataflashsection"))) = {"nazwa1",
"nazwa2"};

i przy wykonywaniu make wyłuskuję to za pomocą

avr-objcopy -j .dataflashsection -O binary nazwy.o nazwy.bin

i wartości zmiennych mam w pliku nazwy.bin

Niestety kiedy robię tak z adresami funkcji to w pliku wynikowym są tylko
zera. Umieszczam zmienną handler w pliku handler.c i dalej

HANDLER handler[] __attribute__((section(".dataflashsection"))) = {h1, h2,
h3};

avr-objcopy -j .dataflashsection -O binary handler.o handler.bin

Czy jest na to jakiś sposób?

Pozdrawiam
Paweł

pawel
Guest

Mon Mar 23, 2015 7:50 pm   



Widzę że siedzi to w pliku map, ale jak to automatem wyłuskać?

Mario
Guest

Mon Mar 23, 2015 8:12 pm   



W dniu 2015-03-23 o 19:50, pawel pisze:
Quote:
Widzę że siedzi to w pliku map, ale jak to automatem wyłuskać?


Może awk?

--
pozdrawiam
MD

Grzegorz Niemirowski
Guest

Mon Mar 23, 2015 8:35 pm   



pawel <paw1976@poczta.onet.pl> napisał(a):
Quote:
Widzę że siedzi to w pliku map, ale jak to automatem wyłuskać?

A jaki system? Jak Windows to można w PowerShellu:

$fileContent = [io.file]::ReadAllText("plik.map")
$fileContent | Select-String
'\.text\.([a-zA-Z0-9_-]+)\s+([0-9a-fx]+)\s+' -AllMatches |
Foreach {$_.Matches} | Foreach {$_.Groups[1].Value + " " +
$_.Groups[2].Value}

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 2 days, 6 hours, 12 minutes and 16 seconds

Grzegorz Niemirowski
Guest

Mon Mar 23, 2015 9:11 pm   



pawel <paw1976@poczta.onet.pl> napisał(a):
Quote:
Widzę że siedzi to w pliku map, ale jak to automatem wyłuskać?

A jaki system? Jak Windows, to można w PowerShellu:

$fileContent = [io.file]::ReadAllText("plik.map")
$fileContent | Select-String
'\.text\.([a-zA-Z0-9_-]+)\s+([0-9a-fx]+)\s+' -AllMatches |
Foreach {$_.Matches} | Foreach {$_.Groups[1].Value + " " +
$_.Groups[2].Value}

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 2 days, 6 hours, 50 minutes and 24 seconds

pawel
Guest

Mon Mar 23, 2015 9:31 pm   



Quote:
A jaki system? Jak Windows to można w PowerShellu:

Windows.
A może jest jakaś opcja żeby linker wyrzucił to w trakcie konsolidacji? Nie
jestem z tym zbyt dobrze obyty.

Guest

Tue Mar 24, 2015 11:31 am   



W dniu poniedziałek, 23 marca 2015 21:31:15 UTC+1 użytkownik bravo napisał:
Quote:
A jaki system? Jak Windows to można w PowerShellu:

Windows.
A może jest jakaś opcja żeby linker wyrzucił to w trakcie konsolidacji? Nie
jestem z tym zbyt dobrze obyty.
A moze ten tool sie przyda


https://sourceware.org/binutils/docs/binutils/nm.html

avr-nm w avr-gcc.

Pzdr Krystian

Marek
Guest

Tue Mar 24, 2015 11:40 am   



On Mon, 23 Mar 2015 18:43:06 +0100, "pawel" <paw1976@poczta.onet.pl>
wrote:
Quote:
Czy jest taka możliwość żeby adresy funkcji w momencie
kompilacji/linkowania
projektu zrzucić do jakiegoś pliku?

A nie możesz użyć avr-objdump? Tylko już na pliku zawierającym
zlinkowaną całość bo inaczej będą adresy lokalne obiektu.
Warto też skomplikować całość z opcją -g wtedy objdump wygeneruje mix
źródła z asm + adresy.

--
Marek

Sebastian Biały
Guest

Wed Mar 25, 2015 5:29 pm   



On 2015-03-23 18:43, pawel wrote:
Quote:
Czy jest taka możliwość żeby adresy funkcji w momencie
kompilacji/linkowania projektu zrzucić do jakiegoś pliku?
Chodzi o to że mam tablicę adresów funkcji np:

typedef int( * HANDLER)(void);
HANDLER handler[] = {h1, h2, h3};

I teraz wyłuskać to np: z plików .o.

Pliki .o nie zawieraja *jeszcze* adresów.

Napisz dokładnie do czego to potrzebujesz. Prawdopodobnie szukasz czegoś
innego niż myślisz.

pawel
Guest

Wed Mar 25, 2015 8:24 pm   



Quote:
A nie możesz użyć avr-objdump? Tylko już na pliku zawierającym zlinkowaną
całość bo inaczej będą adresy lokalne obiektu.
A jak go wygenerować?

Bo linker generuje mi tylko program wynikowy .bin.

Pozdrawiam
Paweł

pawel
Guest

Wed Mar 25, 2015 8:31 pm   



Quote:
Pliki .o nie zawieraja *jeszcze* adresów.

Też już do tego doszedłem :)

Quote:
Napisz dokładnie do czego to potrzebujesz. Prawdopodobnie szukasz czegoś
innego niż myślisz.

Chodzi o oszczędność pamięci ram oczywiście Smile
Na początku programu muszę odwołać się do tych funkcji tzn przekazać je jako
parametr do innej funkcji bibliotecznej
i zapomnieć tzn zwolnić pamięć ram.
Ponieważ do atmegi mam podłączoną pamięć dataflash i mogę przesyłać na nią
pliki binarne i tekstowe to chciałbym:
- wygenerować plik z adresami funkcji po kompilacji
- załadować go na stałę do dataflash
- później przy każdym uruchomieniu programu zaalokować pamięć odczytać do
niej zawartość pliku z adresami przekazać do funkcji bibliotecznej i zwolnić
pamięć.

Paweł

Marek
Guest

Wed Mar 25, 2015 9:22 pm   



On Wed, 25 Mar 2015 20:24:42 +0100, "pawel" <paw1976@poczta.onet.pl>
wrote:
Quote:
A jak go wygenerować?
Bo linker generuje mi tylko program wynikowy .bin.

A elf"a nie generuje? Spróbuj:

avr-objdump -tShd file.bin > dump

--
Marek

Marek
Guest

Wed Mar 25, 2015 9:29 pm   



On Wed, 25 Mar 2015 17:29:52 +0100, Sebastian
Biały<heby@poczta.onet.pl> wrote:
Quote:
Pliki .o nie zawieraja *jeszcze* adresów.

E tam nie zawierają, zawierają adresy jako absolutne lokalne offsety
obiektu ;)

objdump -tShd main.o |less
Disassembly of section .text:

00000000 <init_leds>:

void init_leds(void) {

ClrWdt();
0: 24030001 li v1,1
4: 3c020000 lui v0,0x0
8: ac430000 sw v1,0(v0)


Kto zgadnie architekturę Wink?

--
Marek

pawel
Guest

Wed Mar 25, 2015 9:35 pm   



Quote:
A elf"a nie generuje? Spróbuj:

Generuje. Ale to nie jest dla debugera?

Quote:
avr-objdump -tShd file.bin > dump

Niestety File format not recognized

Paweł

Marek
Guest

Wed Mar 25, 2015 9:35 pm   



On Wed, 25 Mar 2015 20:31:57 +0100, "pawel" <paw1976@poczta.onet.pl>
wrote:
Quote:
Chodzi o oszczędność pamięci ram oczywiście Smile
Na początku programu muszę odwołać się do tych funkcji tzn
przekazać je jako
parametr do innej funkcji bibliotecznej
i zapomnieć tzn zwolnić pamięć ram.
Ponieważ do atmegi mam podłączoną pamięć dataflash i mogę przesyłać
na nią
pliki binarne i tekstowe to chciałbym:
- wygenerować plik z adresami funkcji po kompilacji
- załadować go na stałę do dataflash
- później przy każdym uruchomieniu programu zaalokować pamięć
odczytać do
niej zawartość pliku z adresami przekazać do funkcji bibliotecznej
i zwolnić
pamięć.

Chyba nie rozumiem. Próbujesz kod przechowywać w zew. flash a później
go ładować do ram i tam go uruchamiać?
Wydawało mi się, że atnega ma arch. harvard i ciężko będzie coś
takiego zrobić.
No chyba, że ma możliwość adresowania (uruchamiania) kodu z zew.
flasha poprzez dodatkowe piny typu external bus.

--
Marek

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zrzucić adresy funkcji do pliku podczas kompilacji w avr-gcc?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map