Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 sty 2026, o 21:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 20 cze 2015, o 20:03 
Offline
Nowy

Dołączył(a): 20 cze 2015
Posty: 2
Pomógł: 0

Witam Wszystkich,

To mój pierwszy post, więc proszę o wyrozumiałość, jeżeli nie zbyt dobrze uda mi się wytłumaczyć, o co mi chodzi...

W książce (Blue Book) jest przykład z multipleksowaniem na podstawie wyświetlacza LED. Tablica z cyframi:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

została zapisana w pamięci FLASH za pomocą biblioteki pgmspace (parametr PROGMEM), a następnie odczytana (a raczej adres konkretnej komórki tablicy) w funkcji ISR
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

za pomocą polecenia: pgm_read_byte.

Czy tak zostało zrobione w celach dydaktycznych (aby pokazać, jak zapisać dane w pamięci FLASH), czy jest to tzw. "dobra praktyka"?

Pytam się gdyż, jak zdefiniuję tablicę uint8_t cyfry[15] w funkcji ISR(TIMER0_COMP_vect), to i tak zajmie ona pamięć FLASH (nie wiem tylko, czy i jak to wpłynie na czas obsługi przerwania).

PS.
Szukałem podobnego pytania na forum, ale nie znalazłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 20:31 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam.

definiując cyfry w pamięci Flash - korzystając z:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i odczytując jej elementy za pomocą:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zajmujesz wprawdzie miejsce w pamięci Flash, ale tylko w niej, natomiast jeśli zrobisz to za pomocą:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to zajmiesz miejsce w pamięci Flash ( na jej wartości początkowe ) i dodatkowo w pamięci RAM ( na samą tablicę ). dodatkowo, nie warto definiować zmiennych tablicowych wewnątrz funkcji, ze względu na to, że cała tablica jest wtedy zmienną automatyczną, wiec jej elementy umieszczane są na stosie. Jeśli już, to opatrzoną specyfikatorem static, tak aby "wylądowała w sekcji .bss. Co do szybkości dostępu - w tym wypadku rzecz absolutnie pomijalna, choć zwykle dostęp do pamięci RAM ( w tym wypadku SRAM ) jest szybszy niż do pamięci Flash.

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 20:49 
Offline
Nowy

Dołączył(a): 20 cze 2015
Posty: 2
Pomógł: 0

Dzięki za szybką i wyczerpującą odpowiedź odpowiedź. Pozwoli mi ona na uniknięcie niepotrzebnych problemów i stresów w przyszłości.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO