Witam!
To moje pierwsze godziny z SAM7S :). Na razie udało się skompilować pierwszy program migający diodami i działa. Mam jednak pytanie na które nie potrafie doszukać się odpowiedzi w PDFie.
Mam trzy pliki:
main.c - glowny kod startup_SAM7S.S - plik z startup cpu (stos, przerwania, etc) AT91SAM7S64-ROM.ld - skrypt linkera
O ile dobrze rozumiem, to SAM7S startuje w trybie 32 bitowych instrukcji ARM. Plik startup_SAM7S.S kompilować muszę bez flagi -mthumb.
Aby mój program main.c zadziałał jego też muszę skompilować bez flagi
-mthumb.
Teraz pytanie:
a) w jaki sposób nalezy poprawnie kompilować kod tak, żeby main.c używał thumb? Przypuszczam że należy puścić 2 osobne jednostki translacji na kazdy z plików? Czyli startup.s - 32 bity arm, main.c - thumb, czy tak?
b) w jaki sposób procesor informowany jest o przejściu w tryb thumb ? Nie potrafie sie doszukać tej informacji w pdfie. Rozumiem że jest do tego jakas instrukcja czy bit rejestrze ? Jeśli tak, to powinna być za to odpowiedzialna pierwsza instrukcja w funkcji "main", czy tak?
Przypuszczam, że musze jakoś przestawić cpu do thumb ponieważ w tej chwili przekompilowanie kodu z flagą -mthumb powoduje pójście w maliny (pojawia się stan Abort).
PS. Nie korzystam z makefile, chce wiedzieć JAK to działa. Dlatego kompiluje z palca:
arm-elf-gcc -mcpu=arm7tdmi main.c startup_SAM7S.S -nostartfiles -O2 -o main.elf