pamięci flash ARM7 w gcc

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ć?

Reply to
Sebastian Biały
Loading thread data ...

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

Reply to
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.

Reply to
Sebastian Biały

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

Paweł

Reply to
Paweł

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.