Goto page Previous 1, 2, 3, 4, 5, 6, 7 Next
DJ
Guest
Wed Oct 14, 2009 11:30 am
On 2009-10-14 12:23:26 +0200, "Darkac" <darkac2@wp.pl> said:
Quote:
Jak zrobić żeby stałe te były pobierane z pamięci programu we Flashu?
AFAIR było wałkowane kiedyś już na grupie. Przeszukaj archiwum.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
Michał Lankosz
Guest
Wed Oct 14, 2009 12:16 pm
Quote:
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
Michał
Darkac
Guest
Wed Oct 14, 2009 12:59 pm
Użytkownik "Michał Lankosz" <mike2001@tlen.pl> napisał w wiadomości
news:hb4bmb$t3a$1@srv.cyf-kr.edu.pl...
Quote:
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.
Czasem odnoszę wrażenie, że jednak czasem komputer nie jest dla człowieka, a
raczej człowiek dla komputera.
Ostatnio mam do czynienia z procesorem DSP i środowiskiem do jego
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.
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.
DJ
Guest
Wed Oct 14, 2009 1:11 pm
On 2009-10-14 13:59:08 +0200, "Darkac" <darkac2@wp.pl> said:
Quote:
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.
Oj, kłania się C...
http://en.wikipedia.org/wiki/Bit_field
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
Darkac
Guest
Wed Oct 14, 2009 1:36 pm
Użytkownik "DJ" <johnny12-WYTNIJTO-@poczta.onet.pl> napisał w wiadomości
news:hb4f5g$v2f$1@news.dialog.net.pl...
Quote:
On 2009-10-14 13:59:08 +0200, "Darkac" <darkac2@wp.pl> said:
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.
Oj, kłania się C...
http://en.wikipedia.org/wiki/Bit_field
--
DJ
Ale to przecież nic innego jak zabawa w maski. Stosowanie chytrych sztuczek
i obiegnięć do osiągnięcia, wydawałoby się, prostego celu. Kompilator robi
miliony różnych automatycznych operacji, mógłby robić również i to. Wszystko
powinno być podporządkowane wygodzie człowieka. Po co zaśmiecać głowę i
treść programu operacjami które może zrobić maszyna.
Szybkość, łatwość i wygoda, to powinny być priorytety w pracy programisty.
T.M.F.
Guest
Wed Oct 14, 2009 1:38 pm
Quote:
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.
Bo gcc nie byl projektowany do architektury harvardzkiej i nie ma
koncepcji roznych typow pamieci zajmujacych te same adresy. Co byc moze
sie zmieni, ale i tak niewiele z tego wyniknie. Natomiast jesli jest to
takim problemem to sa platne narzedzia.
Quote:
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.
Przejrzyj liste instrukcji AVR i nie bedziesz mial zludzen. Mozesz
zadeklarowac zmienna bool, mozesz wykorzystac pola bitowe, ale to ciagle
bedzie tlumaczone na operacje na bitach typu ustawianie, zerowanie itd.
--
Inteligentny dom -
http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
T.M.F.
Guest
Wed Oct 14, 2009 1:39 pm
Quote:
Ale to przecież nic innego jak zabawa w maski. Stosowanie chytrych
sztuczek i obiegnięć do osiągnięcia, wydawałoby się, prostego celu.
Kompilator robi miliony różnych automatycznych operacji, mógłby robić
również i to. Wszystko powinno być podporządkowane wygodzie człowieka.
Po co zaśmiecać głowę i treść programu operacjami które może zrobić
maszyna.
Szybkość, łatwość i wygoda, to powinny być priorytety w pracy programisty.
Postaraj sie zrozumiec na czym polega problem, bo to co piszesz jest
odpowiednikiem populizmu.
--
Inteligentny dom -
http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
DJ
Guest
Wed Oct 14, 2009 2:15 pm
On 2009-10-14 14:36:32 +0200, "Darkac" <darkac2@wp.pl> said:
Quote:
Użytkownik "DJ" <johnny12-WYTNIJTO-@poczta.onet.pl> napisał w
wiadomości news:hb4f5g$v2f$1@news.dialog.net.pl...
On 2009-10-14 13:59:08 +0200, "Darkac" <darkac2@wp.pl> said:
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.
Oj, kłania się C...
http://en.wikipedia.org/wiki/Bit_field
Ale to przecież nic innego jak zabawa w maski.
struct?
i nawet nie przejrzałeś całej strony...
Quote:
Szybkość, łatwość i wygoda, to powinny być priorytety w pracy programisty.
Może jeszcze żeby się program sam napisał, podczas kiedy programista na
wakacjach.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
Konop
Guest
Wed Oct 14, 2009 2:17 pm
Quote:
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??
Quote:
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

...
Quote:
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
Konop
Guest
Wed Oct 14, 2009 2:21 pm
Darkac pisze:
Quote:
Piszę program na ATmega128 za pomocą edytora AVRSide i kompilatora WinAVR.
Program jest juz trochę rozbudowany i zawiły. Jest obsługa przerwań
czasowych co mniej więcej 1ms i używane jest sporo zmiennych globalnych.
Program obrabia równolegle dwa sygnały A i B z przetwornika A/C.
Jeśli sygnał A lub B spełni pewien warunek badany w przerwaniu, w pętli
głównej wchodzi w odpowiadającą swojemu kanałowi jedną z dwóch
bliźniaczych procedur (dość zawiłych).
Jedna ze zmiennych ustawiana jest w menu (wyświetlacz LCD i klawiatura
multipleksowana) i przyjmuje wartości 1 lub 0.
Bliźniacze procedury - tzn. ta sama procedura wywoływana z różnymi
parametrami, czy jednak dwie różne funkcje? Może nie są do końca
bliźniacze??

...
Quote:
Dziwne zjawisko występuje, kiedy program wejdzie w wykonywanie procedury
tylko dla kanału B. W trakcie jej wykonywania powoduje samoistne
wyzerowanie wspomnianej wcześniej zmiennej. Zmienna ta nie występuje w
ogóle w tej procedurze. W całym programie jej wartość może być zmieniana
ręcznie tylko w pewnym menu które trzeba specjalnie wywołać sekwencją
działań.
ZAWSZE zeruje?? Nie używasz gdzieś tablic, wskaźników?? Wystarczy drobna
pomyłka, przekazanie jako wskaźnika nie adresu zmiennej tylko jej
wartości i już... zapis masz nie tam, gdzie trzeba... przy
niesprzyjających okolicznościach możesz zawsze zerować pewną pechową
zmienną...
Proponuję to, co już ktoś napisał - zostawić tą zmienną w starym
miejscu, dodać nową i używać nową

... jak problem zniknie, to łapać
moment zapisu do starej zmiennej

...
Pozdrawiam
Konop
Darkac
Guest
Wed Oct 14, 2009 2:23 pm
Użytkownik "T.M.F." <tmf@nospam.mp.pl> napisał w wiadomości
news:hb4gsl$bd$1@atlantis.news.neostrada.pl...
Quote:
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.
Bo gcc nie byl projektowany do architektury harvardzkiej i nie ma
koncepcji roznych typow pamieci zajmujacych te same adresy. Co byc moze
sie zmieni, ale i tak niewiele z tego wyniknie. Natomiast jesli jest to
takim problemem to sa platne narzedzia.
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.
Przejrzyj liste instrukcji AVR i nie bedziesz mial zludzen. Mozesz
zadeklarowac zmienna bool, mozesz wykorzystac pola bitowe, ale to ciagle
bedzie tlumaczone na operacje na bitach typu ustawianie, zerowanie itd.
No tak, kopilator i edytor są bezpłatne. Darowanemu koniowi nie zagląda się
w zęby.
Nie powinienem narzekać.
Darkac
Guest
Wed Oct 14, 2009 2:31 pm
Użytkownik "Konop" <konoppo@gazeta.pl> napisał w wiadomości
news:hb4j1q$gq2$1@inews.gazeta.pl...
Quote:
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
Hmmm... no to używaj DWUKROPKA
Nie wiem o co chodzi z tym dwukropkiem, możesz przybliżyć?
T.M.F.
Guest
Wed Oct 14, 2009 2:41 pm
Quote:
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

...
Oj, jednak pola bitowe sa czytelniejsze. No i jesli zmienisz ich
kolejnosc to nie pociaga to potem zazwyczaj uperdliwej zmiany we
wszytkich plikach.
--
Inteligentny dom -
http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
Darkac
Guest
Wed Oct 14, 2009 2:52 pm
Użytkownik "Konop" <konoppo@gazeta.pl> napisał w wiadomości
news:hb4j99$hoj$1@inews.gazeta.pl...
Quote:
Darkac pisze:
Piszę program na ATmega128 za pomocą edytora AVRSide i kompilatora
WinAVR.
Program jest juz trochę rozbudowany i zawiły. Jest obsługa przerwań
czasowych co mniej więcej 1ms i używane jest sporo zmiennych globalnych.
Program obrabia równolegle dwa sygnały A i B z przetwornika A/C.
Jeśli sygnał A lub B spełni pewien warunek badany w przerwaniu, w pętli
głównej wchodzi w odpowiadającą swojemu kanałowi jedną z dwóch
bliźniaczych procedur (dość zawiłych).
Jedna ze zmiennych ustawiana jest w menu (wyświetlacz LCD i klawiatura
multipleksowana) i przyjmuje wartości 1 lub 0.
Bliźniacze procedury - tzn. ta sama procedura wywoływana z różnymi
parametrami, czy jednak dwie różne funkcje? Może nie są do końca
bliźniacze??

...
Na tyle są bliźniacze, że mają treść w zasadzie taką samą, ale wszelkie
dane, parametry, flagi stanów i tabele na których operują pamiętane są w
innym zestawie (A lub B). Jakby się uprzeć, to może dałoby się napisać jedną
procedurę, która co chwila musiałaby się pytać, który kanał jest w tym
momencie obrabiany albo jako parametry trzeba by przesłać kilkadziesiąt
zmiennych. A większość tych parametrów i tak jest globalnych i znów przy
wyjściu trzeba by je odzyskiwać z procedury.
Historycznie tak było łatwiej i szybciej i bezpieczniej. Najpierw był w
programie tylko jeden kanał i kiedy powstała potrzeba dwóch, łatwo było
powielić procedurę na dwie i dodać do każdej nie wspólnej w niej zmiennej,
końcówkę _a w jednej i _b w drugiej. Pamięci programu jest jeszcze bardzo
dużo.
John Smith
Guest
Wed Oct 14, 2009 8:24 pm
Quote:
Za to kocham MSP430, w hardware-owym debugerze można ustawić pułapkę
na zapis do obszaru pamięci i już wiadomo w wyniku jakiej instrukcji
nastąpił problem. Sprawę rozwiązuje się w chwilkę.
Przeciez korzystajac z JTAG na ATMedze128 moze zrobic to samo...
Za to kocham JTAG.
To czemu tego autor wątku nie zrobi, a Wy nie doradzacie od początku?
Nie odpowiedziałeś na pytanie, to ja spróbuję.
Twoja miłość do JTAG-a chyba nie jest odwzajemniona, nie widzę
możliwości aby samodzielnie łącze JTAG-a miało możliwości
debugowania w systemie uC. W ATMega jest dodatkowo
moduł OCD w MSP430 jest moduł EEM.
Sugeruję zapoznać się z dokumentem SLAA263B, mozliwości tego modułu
są niesamowite i znacznie przerastają założenie prostej pułapki.
K.
Goto page Previous 1, 2, 3, 4, 5, 6, 7 Next