Witam.
Mam problem z funkcjami w RAMie.
Chcę zrobić update firmwaru. No więc zrobiłem funkcję updatującą, oraz funkcję piszącą text po LCD. Mam wiele funkcji piszących text, ale ta jedna ma być specjalna bo być w RAMie. Funkcja updatująca firmware oczywiście też.
No i okazało się że to nie działa.
Albo update zawiesza się zaraz po skasowaniu FLASHa (co wskazuje na to że ta funkcja wcale nie trafia do RAMu), albo jak chcę dodać wyświetlanie komunikatów za pomocą tej funkcji piszącej to wywala mi jakieś dziwne błędy przy próbie kompilacji.
Więc od rana robiew testy i doszedłem do takich wniosków:
1. Zmiana jakiejś funkcji na funkcję w RAMie najwidoczniej w ogóle nie działa.
2. Jeżeli funkcja zadeklarowana jako funkcja w RAMie będzie wywołana więcej niż 1 raz, nie ważne skąd, z przerwania, z programu głównego, z przerwania FIQ, to wywala mi błędy przy kompilacji.
Przykłady na zupełnie innych funkcjach:
1: Normalna funkcja (oczywiście działająca):
2. Przerobiona na RAM (też działa ale podejrzewam że wcale nie trafia do RAMu):
3. Inna funkcja. Ta jest wywoływana z 8 razy. I już kompilacja nie powodzi się:
Nawet nie wiem co mam umieścić. Cały kod źródłowy? 7500linijek?
Próbowałem bez align. Albo z innymi align. W pliku ld w sekcji data też zmieniałem parametr align. Z 4 na 8 albo 16 i dalej nic.
Gdzieś znalazłem informacje że kod ma być z sekcji text. Zmieniłem. Wtedy program kompiluje się bez błędów, ale w pliku lss widzę że nadal kod jest we FLASHu, a program dalej nie działa.
Ręce opadają. Pomoże ktoś?
Mam problem z funkcjami w RAMie.
Chcę zrobić update firmwaru. No więc zrobiłem funkcję updatującą, oraz funkcję piszącą text po LCD. Mam wiele funkcji piszących text, ale ta jedna ma być specjalna bo być w RAMie. Funkcja updatująca firmware oczywiście też.
No i okazało się że to nie działa.
Albo update zawiesza się zaraz po skasowaniu FLASHa (co wskazuje na to że ta funkcja wcale nie trafia do RAMu), albo jak chcę dodać wyświetlanie komunikatów za pomocą tej funkcji piszącej to wywala mi jakieś dziwne błędy przy próbie kompilacji.
Więc od rana robiew testy i doszedłem do takich wniosków:
1. Zmiana jakiejś funkcji na funkcję w RAMie najwidoczniej w ogóle nie działa.
2. Jeżeli funkcja zadeklarowana jako funkcja w RAMie będzie wywołana więcej niż 1 raz, nie ważne skąd, z przerwania, z programu głównego, z przerwania FIQ, to wywala mi błędy przy kompilacji.
Przykłady na zupełnie innych funkcjach:
1: Normalna funkcja (oczywiście działająca):
2. Przerobiona na RAM (też działa ale podejrzewam że wcale nie trafia do RAMu):
3. Inna funkcja. Ta jest wywoływana z 8 razy. I już kompilacja nie powodzi się:
Nawet nie wiem co mam umieścić. Cały kod źródłowy? 7500linijek?
Próbowałem bez align. Albo z innymi align. W pliku ld w sekcji data też zmieniałem parametr align. Z 4 na 8 albo 16 i dalej nic.
Gdzieś znalazłem informacje że kod ma być z sekcji text. Zmieniłem. Wtedy program kompiluje się bez błędów, ale w pliku lss widzę że nadal kod jest we FLASHu, a program dalej nie działa.
Ręce opadają. Pomoże ktoś?