Założenia projektu:
- ATMEGA8U2
- Bootloader USB z szyfrowaniem AES
- kod bootlodera USB w C
- kod AES w asm (plik.s)
Natrafiłem na problem z prawidłowym zdefiniowaniem w Atmel Studio segmentów kodu.
Bootloder USB ma byś w sekcji Bootlodera czyli adres od 0x1000(byte)
natomiast ze względu że całość nie mieści się w tej sekcji kod do AES ma być umieszczony na końcu sekcji Aplikacji pod adresem 0xE00(byte).
Zgodnie z instrukcjami z not aplikacyjnych Atmela dodałem w
AVR/GNU Linker -> Miscallenous flagi "-Wl,-flto -Wl,-estart -Wl,-Ttext=0x1000"
i kod bootlodera jest prawidłowo umieszczony w pamięci
Natomiast mam problem z umieszczeniem kodu w Assemlerze pod adresm 0xE00.
Próbowałem dodać w AVR/GNU Linker -> Memory Settings .aes=0x700(word) a w samym kodzie asseblera dyrektywę .section .aes
Teoretycznie jest ok nie ma błędów kompilacji tylko że kod AES nie jest umieszczany w hex/elf.
Pod debuggerem gdy załaduję całość do uP i krokuję program to w momencie gdy następuje wywołanie funkcji AES to mam skok pod właściwy adres
tylko że w pamięci po tym adresem są same 0xFF. Gdy sprawdzam plik hex to rzeczywiście nie ma kody który powinien być pod adresm 0xE00(byte).
Sytuacja jakby linker nie wiedzaił że ma dołączyć część pochodzącą z assemblera.
Reasumując jak zrobić aby całość kodu w C umieścić pod adresem 0x1000(byte) a kod z assemblera pod adresem 0xE00(byte).
Dodano po 11 [godziny] 3 [minuty]:
Znalazłem rozwiązanie.
W assemblerze oprócz nazwy sekcji należy dodać jeszcze atrybuty:
. section .aes,"ax"
- ATMEGA8U2
- Bootloader USB z szyfrowaniem AES
- kod bootlodera USB w C
- kod AES w asm (plik.s)
Natrafiłem na problem z prawidłowym zdefiniowaniem w Atmel Studio segmentów kodu.
Bootloder USB ma byś w sekcji Bootlodera czyli adres od 0x1000(byte)
natomiast ze względu że całość nie mieści się w tej sekcji kod do AES ma być umieszczony na końcu sekcji Aplikacji pod adresem 0xE00(byte).
Zgodnie z instrukcjami z not aplikacyjnych Atmela dodałem w
AVR/GNU Linker -> Miscallenous flagi "-Wl,-flto -Wl,-estart -Wl,-Ttext=0x1000"
i kod bootlodera jest prawidłowo umieszczony w pamięci
Natomiast mam problem z umieszczeniem kodu w Assemlerze pod adresm 0xE00.
Próbowałem dodać w AVR/GNU Linker -> Memory Settings .aes=0x700(word) a w samym kodzie asseblera dyrektywę .section .aes
Teoretycznie jest ok nie ma błędów kompilacji tylko że kod AES nie jest umieszczany w hex/elf.
Pod debuggerem gdy załaduję całość do uP i krokuję program to w momencie gdy następuje wywołanie funkcji AES to mam skok pod właściwy adres
tylko że w pamięci po tym adresem są same 0xFF. Gdy sprawdzam plik hex to rzeczywiście nie ma kody który powinien być pod adresm 0xE00(byte).
Sytuacja jakby linker nie wiedzaił że ma dołączyć część pochodzącą z assemblera.
Reasumując jak zrobić aby całość kodu w C umieścić pod adresem 0x1000(byte) a kod z assemblera pod adresem 0xE00(byte).
Dodano po 11 [godziny] 3 [minuty]:
Znalazłem rozwiązanie.
W assemblerze oprócz nazwy sekcji należy dodać jeszcze atrybuty:
. section .aes,"ax"
