RTV forum PL | NewsGroups PL

Znikająca zmienna globalna w programie na ATmega128 przy obsłudze przerwań

Dlaczego ATmega128 przekłamuje?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Znikająca zmienna globalna w programie na ATmega128 przy obsłudze przerwań

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next

MiSTER
Guest

Wed Oct 14, 2009 8:25 pm   



Quote:
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.

W kwestii ogólnej:

To przeciez przesyła się do procedury wskaznik na strukturę i po sprawie.
Zamiast kilkudziesięciu zmiennych tylko jeden parametr, nic nie trzeba
zwracać, procesor nie musi mielić danych etc
Strukturę też mozna banalnie powielać - same plusy.

A zwracać procedura powinna tylko char lub int syknalizującego OK lub ERROR

Pozdrawiam
MiSter

John Smith
Guest

Wed Oct 14, 2009 9:10 pm   



Quote:

Bo to wcale nie jest takie super narzedzie. Wyobraz sobie, ze zmienna
ktora sledzisz jest modyfikowana w wielu miejscach i ciagle twoj program
jest przerywany, mozna zeswierowac sledzac cos takiego.

Zawsze da się rozwiązać problem, albo ustawiając pułapkę warunkową,
a jeśli takiej nie można, to można wyłączyć, na czas debugowania,
zapis do zmiennej ze znanych miejsc, a ustawić pułapke na zapis
na zmienną.
Przepelnienie stosu jest o tyle proste do wykrycia, że często jest
nie używany obszar między stertą a zadeklarowanym stosem. Tu
ustawia się pułapke na zapis i po sprawie.
K.

T.M.F.
Guest

Wed Oct 14, 2009 9:19 pm   



Quote:
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.

Wszyscy sie niesamowicie z tego powodu cieszymy. ATMega tez umozliwia
zalozenie pulapki warunkowej.

--
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 9:28 pm   



Quote:
Zawsze da się rozwiązać problem, albo ustawiając pułapkę warunkową,

Jaki warunek proponujesz tu zastosowac, zeby wyeliminowac zapisy, ktore
nas nie interesuja?

Quote:
a jeśli takiej nie można, to można wyłączyć, na czas debugowania,
zapis do zmiennej ze znanych miejsc, a ustawić pułapke na zapis
na zmienną.

Zartujesz, prawda?

Quote:
Przepelnienie stosu jest o tyle proste do wykrycia, że często jest
nie używany obszar między stertą a zadeklarowanym stosem. Tu
ustawia się pułapke na zapis i po sprawie.

To bys musial ustawic pulapke na zakres adresow, bo przeciez one nie
musza byc zapisywane sekwencyjnie.
Prosciej to zrobic wpisujac do pamieci jakis wzor i sprawdzac okresowo
czy sie nie zmienil.


--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

John Smith
Guest

Wed Oct 14, 2009 9:41 pm   



Quote:
Zawsze da się rozwiązać problem, albo ustawiając pułapkę warunkową,


Jaki warunek proponujesz tu zastosowac, zeby wyeliminowac zapisy, ktore
nas nie interesuja?

Tak złożonych warunków nie musiałem stosować w EEM ale z dokumentacji widzę,
że to możliwe. Przetestuję w wolnej chwili. Do tej pory nie miałem
takiego problemu programistycznego a więc debugowania. Programy
od początku piszę starannie.


Quote:
a jeśli takiej nie można, to można wyłączyć, na czas debugowania,
zapis do zmiennej ze znanych miejsc, a ustawić pułapke na zapis
na zmienną.

Zartujesz, prawda?
Nie, to jest proteza na _chwilę_. Program w tym czasie nie musi działać

zgodnie z założeniami. Trzeba wykryć gdzie jest problem i to jest celem.
Sam opis problemu przez Autora wątku, sugeruje radosną twórczość,
w takiej też stylistyce działania powinien szukać błędów.


Quote:
Przepelnienie stosu jest o tyle proste do wykrycia, że często jest
nie używany obszar między stertą a zadeklarowanym stosem. Tu
ustawia się pułapke na zapis i po sprawie.


To bys musial ustawic pulapke na zakres adresow, bo przeciez one nie
musza byc zapisywane sekwencyjnie.
Prosciej to zrobic wpisujac do pamieci jakis wzor i sprawdzac okresowo
czy sie nie zmienil.

W EEM mam ustawioną taką pułapkę (na zapis do obszaru) od początku i wiem
gdzie nawala stos. Zresztą zdarza mi się to tylko z funkcjami bibliotecznymi.
K.

John Smith
Guest

Wed Oct 14, 2009 9:42 pm   



Quote:
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.


Wszyscy sie niesamowicie z tego powodu cieszymy. ATMega tez umozliwia
zalozenie pulapki warunkowej.

Jednej?
K.

T.M.F.
Guest

Wed Oct 14, 2009 10:19 pm   



Quote:
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.


Wszyscy sie niesamowicie z tego powodu cieszymy. ATMega tez umozliwia
zalozenie pulapki warunkowej.

Jednej?

Czterech.

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

John Smith
Guest

Wed Oct 14, 2009 10:27 pm   



T.M.F. wrote:

Quote:
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.



Wszyscy sie niesamowicie z tego powodu cieszymy. ATMega tez umozliwia
zalozenie pulapki warunkowej.


Jednej?


Czterech.


Masz dokument opisujący OCD w ATMega?
K.

Adam Dybkowski
Guest

Wed Oct 14, 2009 10:38 pm   



T.M.F. pisze:

Quote:
Przepelnienie stosu jest o tyle proste do wykrycia, że często jest
nie używany obszar między stertą a zadeklarowanym stosem. Tu
ustawia się pułapke na zapis i po sprawie.

To bys musial ustawic pulapke na zakres adresow, bo przeciez one nie
musza byc zapisywane sekwencyjnie.
Prosciej to zrobic wpisujac do pamieci jakis wzor i sprawdzac okresowo
czy sie nie zmienil.

Taaa. Tylko od chwili przekroczenia stosu do momentu sprawdzenia, czy
wzór nie został nadpisany (choćbyś to robił nawet co 1 ms), mija
wystarczająco dużo czasu aby program skutecznie poszedł w maliny. Bo
raczej nie ustawiasz ograniczenia małego stosu gdy masz dużo RAMu.

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

T.M.F.
Guest

Wed Oct 14, 2009 10:45 pm   



W dniu 14.10.2009 23:38, Adam Dybkowski pisze:
Quote:
T.M.F. pisze:

Przepelnienie stosu jest o tyle proste do wykrycia, że często jest
nie używany obszar między stertą a zadeklarowanym stosem. Tu
ustawia się pułapke na zapis i po sprawie.

To bys musial ustawic pulapke na zakres adresow, bo przeciez one nie
musza byc zapisywane sekwencyjnie.
Prosciej to zrobic wpisujac do pamieci jakis wzor i sprawdzac okresowo
czy sie nie zmienil.

Taaa. Tylko od chwili przekroczenia stosu do momentu sprawdzenia, czy
wzór nie został nadpisany (choćbyś to robił nawet co 1 ms), mija
wystarczająco dużo czasu aby program skutecznie poszedł w maliny. Bo
raczej nie ustawiasz ograniczenia małego stosu gdy masz dużo RAMu.


To prawda, ale juz bede wiedzial w czym jest problem. W tym przypadku
identyfikacja problemu == jego rozwiazanie.

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

Adam Dybkowski
Guest

Wed Oct 14, 2009 10:45 pm   



Darkac pisze:

Quote:
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.

Szczerze polecam: przesiądź się na procesory ARM.
Tam przestrzeń adresowa jest wspólna (adresowanie 32-bitowe), co
rzeczywiście w porównaniu z AVRami znacząco ułatwia życie. W ARMach z
wewnętrznym Flashem stałe trzymane są w pamięci Flash i zwykłe napisanie
"const" nie zjada RAMu. No i można wykonywać program z RAMu (np.
załadowany z pliku), co w AVRach jest po prostu niemożliwe.

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

Adam Dybkowski
Guest

Wed Oct 14, 2009 10:49 pm   



Darkac pisze:

Quote:
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.

Pomyliłeś języki, zacznij pisać raczej w Javie.

Tam kod wynikowy wykonywany przez procesor jest znacząco oddalony od
tego, co napisał programista (oprócz kompilatora po drodze jest maszyna
wirtualna tłumacząca bytecode na asembler danego procka). Nawet
skomplikowane akcje pisze się szybciej i krócej niż w C, ale wynikiem
tego jest kod działający znacznie wolniej niż napisany od razu w języku
C no i przy tym znacznie dłuższy (po kompilacji w JRE, bytecode może być
nawet krótszy). No ale jeżeli przedkładasz koszt developmentu nad
wydajność aplikacji to Java będzie w sam raz dla Ciebie.

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

T.M.F.
Guest

Wed Oct 14, 2009 10:53 pm   



Quote:
Masz dokument opisujący OCD w ATMega?

Datasheet procesora sekcja "Using the on-chip debug system".

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

John Smith
Guest

Wed Oct 14, 2009 11:17 pm   



Quote:
Masz dokument opisujący OCD w ATMega?


Datasheet procesora sekcja "Using the on-chip debug system".


Możliwości OCD wyglądają nader skromnie.
K.

T.M.F.
Guest

Wed Oct 14, 2009 11:19 pm   



W dniu 15.10.2009 00:17, John Smith pisze:
Quote:

Masz dokument opisujący OCD w ATMega?


Datasheet procesora sekcja "Using the on-chip debug system".


Możliwości OCD wyglądają nader skromnie.

Mozliwe, a czego konkretnie ci brakuje?

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Znikająca zmienna globalna w programie na ATmega128 przy obsłudze przerwań

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map