-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Konop <k...@g...pl>
Newsgroups: pl.misc.elektronika
Subject: Re: Dlaczego ATmega128 przekłamuje?
Date: Wed, 14 Oct 2009 15:17:47 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 69
Message-ID: <hb4j1q$gq2$1@inews.gazeta.pl>
References: <hb1sbu$qoq$1@news.lublin.pl> <hb1uet$fia$7@news.dialog.net.pl>
<hb206d$t7q$1@news.lublin.pl> <hb46v6$5vf$2@atlantis.news.neostrada.pl>
<hb48sg$8gj$1@news.task.gda.pl> <hb4bmb$t3a$1@srv.cyf-kr.edu.pl>
<hb4efi$i1n$1@news.task.gda.pl>
NNTP-Posting-Host: apc206.internetdsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: inews.gazeta.pl 1255526266 17218 83.17.136.206 (14 Oct 2009 13:17:46 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Wed, 14 Oct 2009 13:17:46 +0000 (UTC)
X-User: konoppo
X-Antivirus: avast! (VPS 091013-0, 2009-10-13), Outbound message
In-Reply-To: <hb4efi$i1n$1@news.task.gda.pl>
X-Antivirus-Status: Clean
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
Xref: news-archive.icm.edu.pl pl.misc.elektronika:573333
[ ukryj nagłówki ]>>> w sumie liczą. Jak zrobić żeby stałe te były pobierane z pamięci
>>> programu we Flashu? Dlaczego powielane są do RAM-u? Czy słowo "const"
>>> oprócz
>> http://www.nongnu.org/avr-libc/user-manual/pgmspace.
html
> Dzięki za linka. Prawdopodobnie to rozwiąże ten problem. Szkoda tylko że
> trzeba odwoływać się do różnych chytrych sztuczek żeby uzyskać, tak
> wydaje się, podstawowe i częste pożądane działania.
Witam!!
Proponuję Tobie zapoznanie się z architekturą AVRów!! To nie jest
prosta sprawa w tym procku... są instrukcje LPM i SPM, wymagają
adresowania rejestrem Z. To nie jest ARM, w którym wszystko leży w
jednej przestrzeni adresowej i możesz odwoływać się do pamięci Flash tak
jak do pamięci RAM. Uważam, że dobrze, że pamięć Flash w AVRze obsługuje
się nie jak zwykłe zmienne, bo wymusza to na programiście odpowiednie
podejście do tego typu zmiennych. Poza tym, język C powinien być
standardowy, niezależnie od architektury docelowej. Stała obsługiwana
jest jak zwykła zmienna. W komputerach klasy PC stałe (const) trzymane
są w pamięci RAM, bo nie ma innego wyjścia. W ARMach trafiają do pamięci
Flash z reguły, bo jest jedna przestrzeń adresowa. Czemu dla AVRów
miałby być wyjątek??
> programowanie, gdzie nie jest przewidziany binarny sposób zapisu liczby.
> Jedynie dec lub hex. Prawdziwy horror, kiedy wciąż trzeba manipulować na
> pojedynczych bitach zmiennych czy rejestrów.
Jeśli chodzi tylko o zapis liczby, to ja tam wolę pisać 0x31fc zamiast
0011000111111100 ;)...
> A za to jest bardzo fajna właściwość, bo można zadeklarować zmienne
> pełniące rolę dwustanowych flag jako "bool". Podejrzewam, że nie zajmują
> wtedy całego bajtu. Jeśli tak , to przydało by się coś takiego w
> programowaniu ATmegi. Kupę RAM-u zajmują flagi. Duże marnotrawstwo.
> Bawienie się w maski, to znów przystosowywanie się do kaprysów komputera.
Hmmm... no to używaj DWUKROPKA :)... albo zrób sobie proste makra...
fakt, samemu musisz pogrupować flagi w bajty, no ale przynajmniej możesz
w łatwy sposób wpisywać "komplet" wartości... ja to robię na przykład
tak - definiuję sobie każdą zmienną stanu oraz kolejne jej bity:
#define STAN_URZADZENIA ucDeviceStatus
#define URZADZENIE_WLACZONE 0
#define URZADZENIE_ZAJETE 1
...
#define URZADZENIE_ZEPSUTE 7
później tworzę (wspólne dla wszystkich zmiennych stanu) makra do obsługi:
#define SET_FLAG(x,y) (x) |= (1<<(y))
#define CLR_FLAG(x,y) (x) &= ~(1<<(y))
#defien CHECK_FLAG(x,y) ((x) & (1<<y))
deklaruję zmienną:
unsigned char ucDeviceStatus;
i używam:
SET_FLAG(STAN_URZADZENIA , URZADZENIE_WLACZONE);
if (CHECK_FLAG (STAN_URZADZENIA , URZADZENIE_ZAJETE) )
CLR_FLAG (STAN_URZADZENIA, URZADZENIE_ZEPSUTE);
to taki przykład, nie jest to super, ale jest za to czytelne... mniej
pisania jest oczywiście, jak się używa DWUKROPKÓW :)...
Pozdrawiam
Konop
Następne wpisy z tego wątku
- 14.10.09 13:15 DJ
- 14.10.09 13:21 Konop
- 14.10.09 13:23 Darkac
- 14.10.09 13:41 T.M.F.
- 14.10.09 13:31 Darkac
- 14.10.09 13:52 Darkac
- 14.10.09 19:24 John Smith
- 14.10.09 19:25 MiSTER
- 14.10.09 20:10 John Smith
- 14.10.09 20:19 T.M.F.
- 14.10.09 20:28 T.M.F.
- 14.10.09 20:41 John Smith
- 14.10.09 20:42 John Smith
- 14.10.09 21:19 T.M.F.
- 14.10.09 21:27 John Smith
Najnowsze wątki z tej grupy
- Co z Fideltronikiem?
- Zamiana aku żelowych w UPS na LiFePo4
- stara idea nowe hardware
- Dzwonek gong z transformatorem
- espnow przerywa na jeziorze?
- 8080
- Portowanie CP/M
- radyjko
- Re: Basen i chłodzenie w w wentylacji mechanicznej
- Akumulatory VRLA
- ładowarka zmarła
- Podstawa bezpiecznikowa jako rozłącznik DC
- Napięcie akumulatora wyłączające UPS / jakie nowe akumulatory do UPS?
- nawigacja satelitarna
- SmartLife/Tuya i osuszanie -- mordowanie z zimną krwią...
Najnowsze wątki
- 2024-07-18 Plaj blokuje usuwanie swoich kontaktów. A to SZMATY
- 2024-07-19 Re: Zgody...
- 2024-07-19 Octavia 2011r vs Audi A3 2007r
- 2024-07-18 ANNA BRYŁKA - RZĄD MANIPULUJE INFORMACJAMI O PODATKACH OD AUT SPALINOWYCH
- 2024-07-19 Co z Fideltronikiem?
- 2024-07-18 Zamiana aku żelowych w UPS na LiFePo4
- 2024-07-19 Warszawa => Head of International Freight Forwarding Department <=
- 2024-07-19 Kraków => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-07-19 Gdańsk => Technical Lead ( (Java Background)) <=
- 2024-07-19 Warszawa => Senior Rust Software Engineer <=
- 2024-07-19 Poznań => UX/UI Designer <=
- 2024-07-19 Łódź => Senior PHP Developer <=
- 2024-07-19 Ryga => Junior NOC Engineer <=
- 2024-07-19 Ulm => Technischer Rollouter (d/m/w) <=
- 2024-07-19 Warszawa => International freight forwarder <=