- posted
16 years ago
ARM7 i przerwania
- posted
16 years ago
CodiJack napisał(a):
"Opakowanie" funkcji obsługi przerwania napisz w asemblerze ARM, skąd wywołuj funkcję THUMB (instrukcją bx).
Możesz też skompilować oddzielny plik .c w trybie ARM jeżeli nie dasz flagi kompilacji -mthumb. Aby taki kod mógł współpracować z funkcjami THUMB, dodaj flagę -mthumb-interworking dla kompilatora i linkera.
- posted
16 years ago
- posted
16 years ago
CodiJack napisał(a):
Jeżeli tak to chyba będzie zbyt trudne jak na początek. Chodziło mi o napisanie oddzielnego pliku w asemblerze (.s), gdzie będą zrzucone na stos niezbędne rejestry (te, które są wspólne dla trybu IRQ i tego, w którym normalnie działasz, np. USER) i skok do właściwej funkcji obsługi przerwania napisanej w Thumbie.
Gdyby napisać to w samym C, wystarczy funkcję obsługi przerwania (tą twoją RTC_interrupt) skompilować w trybie ARM. Stamtąd możesz wywołać funkcję właściwą z innego pliku, już w Thumbie. Musisz mieć to napisane oddzielnie w makefile, aby dla pliku z funkcją RTC_interrupt kompilator nie dostał flagi -mthumb. Wszystkie pliki i linker muszą mieć flagę
-mthumb-interworking aby były możliwe wywołania między trybami ARM i Thumb. Linker może mieć flagę -mthumb i wtedy doczepi biblioteki standardowe (libc) w trybie Thumb. Jeżeli tej flagi nie będzie, zostaną użyte biblioteki ARMowe - co ma znaczenie wydajnościowe gdy chodzisz z zewn. pamięci albo wewnętrznego wolnego Flasha w procesorach AT91SAM7Sxx.
- posted
16 years ago