Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Jak typ danych zastosować?

bastik
-
-
Posty:18
Rejestracja:26 paź 2014, o 23:45
Jak typ danych zastosować?

Postautor: bastik » 28 lut 2018, o 13:29

Witam

Mam stary program z 8051 (w asemblerze) który potrzebuje zamienić na program napisany w C dla STM-a32. I jak to było w przypadku 8051 wiele operacji odbywa się na pojedynczych bitach, do poszczególnych bitów są oczywiście przypisane jakieś symbole np.

Kod: Zaznacz cały

PRG EQU 19H
Jaki typ danych zadeklarować w programie aby jak najefektywniej wykorzystać pamięć mikrokontrolera? Sądzę że taki sposób będzie mało efektywny:

Kod: Zaznacz cały

uint8_t PRG = 0
Zwłaszcza że te zmienne będą przechowywać tylko 0 albo 1 a jest ich w programie dosyć dużo, możecie mi coś doradzić?

Awatar użytkownika
Jacek Bogusz
-
-
Posty:470
Rejestracja:12 maja 2010, o 17:37
Lokalizacja:Poznań
Kontaktowanie:

Re: Jak typ danych zastosować?

Postautor: Jacek Bogusz » 5 mar 2018, o 17:30

Jasne - struktury i unie. A tak na marginesie, programu z 51-ki nie da się przepisać na STM32. Trzeba zrozumieć jak działa i napisać go od nowa. To są CAŁKOWICIE INNE mikrokontrolery, o odmiennej organizacji pamięci, zasobach, sposobie konfigurowania itd.

Awatar użytkownika
r-mik
-
-
Posty:351
Rejestracja:14 cze 2005, o 19:18
Lokalizacja:Wawa
Kontaktowanie:

Re: Jak typ danych zastosować?

Postautor: r-mik » 25 mar 2018, o 17:09

Jasne - struktury i unie.
Trzeba tylko pamiętać, że modyfikacja bitów zadeklarowanych w ten sposób nie jest operacja atomową. Pojawią się więc problemy gdy bity będą modyfikowane w przerwaniu i programie głównym (przerwanie ustawia flagę, program główny kasuje ją). W ARM ATOMIC_BLOCK niekoniecznie musi byc tak prosty jak w AVR czy '51 (sei, cli) bo może działać DMA. ARM ma wielopoziomowy układ przerwań, należałby blokować tylko te poziomy, które mogą modyfikować bity.

Czy warto utrudniać sobie życie?
8051 ma 128 bitów o bezpośrednim dostępie co zajmuje 16 bajtów RAM. 8051 ma 128bajtów RAM ewentualnie 256 adresowanych @Rx. 16*100/256 = 6,25%. ARM mają 8...128KB RAM. 128bajtów to ok 1,6% przy 20KB, 0,19% przy 128KB.
Warto?

Niektóre ARM maja obszary adresowane bitowo.

Wróć do „ARM (STM32, NXP, Stellaris i inne)”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości