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
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ę

?
--
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
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