MSP430 - staly adres zmiennej - inicjalizacja

Chcialbym uzywajac kompilatora IAR zadeklarowac 'segment' ( w C nie ma scisle takiego pojecia ) danych w pamieci flash - rodzaj DataFlash. Mialby to byc zbiór zmiennych przylegajacych do siebie w pamieci, z których mozna by np. wyznaczyc CRC. Konkretna lokalizacja zapewniana dyrektywa @ w IAR, pozwala latwiej oblugiwac taki segment danych i zmniejsza prawdopodobienstwo przypadkowego uszkodzenia fragmentu programu podczas zapisu. Jednak nie jest mozliwa inicjalizacja z poziomu deklaracji w C. Jakies pomysly na realizacje? Moze inne kompilatory pozwalaja w wygodny sposób rozwiazac taki problem?

Reply to
ymko
Loading thread data ...

Jacek M. napisał(a):

Tę definicję niebardzo rozumiem, choć ideę owszem. Z tym nie ma problemu, tylko kwestia 'posadzenia' tych zmiennych w konkretnym miejscu pamieci i inicjalizacji ich

Mi też przychodziło do głowy to rozwiązanie i narazie jest najbardziej eleganckie, choć dalej kwestia inicjalizacji. Kompilator nie pozwala inicjalizować zmiennych o sztywno ustalonym adresie.

Reply to
ymko

Użytkownik ymko napisał:

OCzywiście że w IAR C można zadeklarować w C zmienne pod stałym adresem Ale o co chodzi konkretnie?

Adam

Reply to
invalid unparseable

Mam wrażenie że nie do końca sie rozumiemy. Potrafię się posługiwać wskaźnikami, wiem że można sobie wyłuskiwać różne adresy zmiennych i bawić sie nimi. Chodzi o następujący mechanizm :

1.zmienne mają znajdować sie w obszarze flash. Mają znajdować się w jednym, ciągłym bloku. 2.Zmienna musi być zainicjalizowana. Nie chce mi sie na piechotę - używając specjalnego api - wpisywać do każdej zmiennej gdzieś zadeklarowanej wartości 3.Najlepiej by zmienne znajdowały się w sztywno określonym obszarze (dyrektywa @). Takich zmiennych nie wolno inicjalizować. (zmiennych! wskaźniki na ten obszar jak najbardziej).

Jak zatem zmusić kompilator do zainicjalizowania zmiennych w obszarze flash? Oto jest problem :) Sprawa oczywista że zmienna z kwalifikatorem const ląduje we flash (ładnie zainicjalizowana). Tylko po to przenoszę zmienne w pewien ustalony adres, by wiedzieć gdzie one dokładnie są, a nie martwić sie gdzie wrzucił je kompilator.

Reply to
ymko

ymko schrieb:

Nie znam kompilatora do AVR - ale kompilatory C maja zwykle "link command file" - mozna tam zdefiniowac pod jakie adresy maja byc ladowane poszczegolne typy danych i definowac bloki pamieci - w pliku

*.c przed daklaracja zmiennej wskazuje sie w jakim bloku ma sie znalezc. Jak dokladnie sie to robi - musisz przeczytac w dekumentacji twojego kompilatora. Szybkie zapytanie googla o "AVR link command file" wyrzucilo
formatting link
Reply to
abert zielonka

abert zielonka napisał(a):

To jakiś konkretny pomysł, muszę gruntownie się przyjżeć. Dzięki!

Reply to
ymko

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.