pamięci flash ARM7 w gcc

Nov 13, 2009 3 Replies

Witam.



Chcę tablicę charów umiescić na stale w pamięci flash.



Czy aktualnie poprawna metodą jest:



__attribute__ ((section (".text"))) char t[1000];



i wpis w skrypcie linkera wysylający to do sekcji flash ?



Oglądając wynikowy listing w asm wydaje mi się ze robi co powinno, ale może to zła metoda. Może ktoś podpowiedzieć?


Jeśli jest OK, to o co chodzi? Ja to robiłem w prostszy sposób: const char t[1000] = ... ;

W moim przypadku GCC wrzucał to do Flasha ;)... ale czy to zachowanie domyślne, czy wynika z jakiś ustawień GCC, to nie wiem (makefile wziąłem z FreeRTOS'a ;)). Generalnie w prockach ARM7 nie ma z tym problemu, bo dostęp jest taki sam jeśli idzie o sposób dostępu (do RAM i do Flash jest taki sam). Jedyna różnica to szybkość w działaniu.

Generalnie warto by było żyć określenia const. Bez tego możesz przypadkowo skompilować kod typu t[0]++ albo coś. Kompilator to puści, linker nie będzie się wgryzać w szczegóły, a procek się zawiesi (wejdzie w Abort), bo będziesz próbował zapisać nie tam gdzie trzeba...

Pozdrawiam Konop

:D. To niestety niewystarczający powód żeby zamknąć temat. moze być OK tylko u mnie, na jakiejś wersji kompilatora, bądzi istnieje inny, oficjalny sposób.

Nie wiem czy napewno wyląduje to tam gdzie chcę.

Jest problem, bo dane mogę zostac niepotrzebnie przeniesione z Flash do RAM na inicie programu i chce tego uniknąć możliwie w pewny sposób.

Na codzień robie developing czegoś bardzo dużego, gdzie consty sa powszechne. Więc mam to we krwi i stosuje gdzie się da. Ale czy z const wynika od razu ladowanie się do flash, to pewny nie jestem, dlatego pytam jaka jest poprawna metoda.

Ja robiłem to zawsze przez const i dane były umieszczane w pamięci Flash.

Paweł

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required