[avrgcc] jak wypelnic niewykorzystany flash nopami

Oct 31, 2005 18 Replies

Cześć



procek: atmega16 Jak zbudowac takiego hexa który do niewykorzystanego obszaru flash'a wrzucał nop'y ? Chcę aby w przypadku niepożądanego wskoczenia PC w taki obszar kontroler leciał po tych nop'ach a na koniec ma być skok do procedury obsługi takiego przypadku.



Pozdrawiam Krzysztof Szmurło


U¿ytkownik "Krzysztof Szmur³o" snipped-for-privacy@wyrzuc.to.wp.pl> napisa³ w wiadomo¶ci news:dk4th4$pnt$ snipped-for-privacy@atlantis.news.tpi.pl...

Mo¿e zamiast NOPów od razu wpisaæ skoki do procedury obs³ugi. Tylko tak dobraæ adres, aby wskoczenie w nie pierwszy bajt instrukcji by³o nieszkodliwe.

Jak mia³em tak± potrzebê to zrobi³em to tak: Wygenerowa³em na PC odpowiedni plik binarny (za pomoc± krótkiego programu w C). Naszym bardzo starym programem piccolo.exe (jest jeszcze pewnie na naszej stronie) za³adowa³em go do bufora w trybie bin (wcze¶niej rozmiar EPROMu zgodny z potrzeb±). Na to za³adowa³em w³a¶ciwy program hex (w trybie hex). Potem ca³o¶æ save w trybie hex.

Mo¿e s± gotowe edytory które to robi±, ale zamiast szukaæ szybciej mi by³o napisaæ tê jedn± pêtlê for w C. P.G.

Nie ma takiego założenia ale istnieje pewne prawdopodobieństwo i dobrze jest się zabezpieczyć również na taką przypadłość.

Watchdog też jest załączony i wykorzystywany. Mi się wydaje, że jak urządzenie ma być jak najbardziej odporne to powinno być zabezpieczone ze wszystkich stron, poczynając od dobrego PCB, kondensatorów blokujących itp itd, a kończąc na zabezpieczeniach softwarowych (a może nawet odwrotnie)

hmm... chyba lepiej dmuchać na zimne :)

Pozdrawiam Krzysztof Szmurło

Piotr Gałka snipped-for-privacy@CUTTHISmicromade.pl napisał(a):

Jest jeszcze prostrzy sposób (tak myślę ;-) ) a)Skompilować projekt i zerknąć , ile toto zajmuje bajtów. b)Do projektu dołączamy plik np. "Nopy.s" o takiej treści:

//#define NOPS (całkowita_pamięć_programu/2)-(bajty_zajęte_przez_projekt/2) //Dla ATMega8 #define NOPS (8192/2)-(bajty_zajęte/2)

#if NOPS > 3 .section .progmem.gcc //sekcje można wybrać dowolnie(no prawie) //powyższy przykład umieści nop-y //za tablicą wektorów , a właściwy program na //końcu pamięci //dla .section .fini0 , nop-y na końcu(prawie) // najlepszym miejscem będzie chyba .section .data .rep NOPS-3 nop .endr clr r30 //dla ... clr r31 //.. ATMega8 ... ijmp // ...trza tak ;) #endif c)powtórnie skompilować i ... załadować do proca.

Piotrek

Tylko ze skok JMP ma długość 2 słów, co powoduje, że PC może się ustawić między dwoma słowami w rozkazie. Chyba o wiele lepsze rozwiązanie jest ustawić obszar NOPami i na koniec jego dać skok do procedury obsługi błędów.

Pozdrawiam Krzysztof Szmurło

[...]

Ależ kombinujecie pod górę. A wystarczy wykorzystać możliwości linkera i w pliku sterującym linkowaniem (trzeba skopiować do swojego zamiast używać domyślnego) dodać magiczne słowo FILL z wartością rozkazu NOP.

U¿ytkownik "Adam Dybkowski" snipped-for-privacy@amwaw.edu.pl> napisa³ w wiadomo¶ci news:dk5u3p$chh$ snipped-for-privacy@atlantis.news.tpi.pl...

Ale i tego nie trzeba - choæ FFFF to opcode zastrze¿ony, to w praktyce rdzeñ AVR interpretuje go tak, jak NOPa.

Pzdr, Raf.

Krzysztof Szmurło napisał/a:

Czy to ma jakiś sens, że kod idzie tam gdzie się nie spodziewamy? pytam z ciekawości bo nie zgadza się to z tym, czego mnie uczono o programowaniu

pozdrawiam czerstwy

z calym szacunkiem, uczono cie teorii... w praktyce okazuje sie ze np na wskutek zaklocen, procesor dokonuje skoku do nieuzywanej czesci programu. Mozna z tego wyjsc albo pozwalajac mu przewinac sie przez cala pamiec az do 0000, gdzie zacznei od poczatku, albo wychwycic ten fakt i cos z nim zrobic, czyli sprobowac rozwiazac jakos te sytuacje nie tracac np cennych danych

U¿ytkownik "czebaka" napisa³ w wiadomo¶ci

W laboratorium sie to raczej nie zdarzy, chyba ze specjalnie bedziesz zaklocac prace kontrolera. W swiecie rzeczywistym - hulaj dusza ;)

pzdr mIrO

p.s. Mnie uczono obu przypadkow ;)

mIrO napisał/a:

tylko skąd założenie, że akurat proc wyskoczy do obszaru nieużywanego? w większości projektów, które robiłem flash miał zajętość 50-75% więc skuteczność tej metody jest raczej mała

zewnętrzny watchdog jest chyba sensownym rozwiązaniem w środowisku o dużych zakłóceniach

jakoś nie wierzę w skuteczność ochrony za pomocą tej metody

pozdrawiam czerstwy

W praktyce takich rzeczy siê nie robi, a jak siê robi, to siê powinno wylecieæ z pracy z prêdko¶ci± ¶wiat³a.

Pozdrawiam Piotr Wyderski

Piotr Wyderski snipped-for-privacy@ii.uni.wroc.pl> napisał(a):

Z całym szacunkiem ;) Kolega pytał , więc starałem sie pomóc , nie wnikając do czego mu to potrzebne.Gdybym wiedział , że można za takie "coś" wylecieć z pracy , to nie pisnąłbym słówkiem ;-)

Pozdrawiam Piotrek

U¿ytkownik "Piotr Wyderski" snipped-for-privacy@ii.uni.wroc.pl> napisa³ w wiadomo¶ci news:dk7jqs$iq2$ snipped-for-privacy@news.dialog.net.pl...

Wybacz, ale czego nie robiæ? Zasugerowa³em jedynie, ¿e wype³nianie nieu¿ywanej przestrzeni NOPami bêdzie mia³o ten sam efekt, co brak jakichkolwiek dzia³añ. Znacznie lepszym pomys³em jest wype³nianie rozkazami skoków do podprogramu obs³ugi b³êdu.

Pzdr, Raf.

Nie polegaæ na zachowaniu nieokre¶lonym wynikaj±cym z konkretnej implementacji dekodera rozkazów w danej rodzinie procesorów. Adam Dybkowski poda³ "jedynie s³uszne" rozwi±zanie i tyko w ten, lub równowa¿ny mu, sposób wolno rozwi±zaæ problem nopów.

Masz zupe³n± racjê, ale nie do tego siê odnios³em.

obs³ugi b³êdu.

Bezdyskusyjnie.

Pozdrawiam Piotr Wyderski

Przecie¿ nie do Twojej rady odnosi³ siê mój komentarz. Zaproponowane przez Ciebie rozwi±zanie równie¿ jest dobre, tylko mo¿e mieæ problemy podczas ³±czenia wielu niezale¿nych plików, bo nie znasz sumy rozmiarów poszczególnych sekcji. Jednoplikowo jednak jest OK.

Ech, w³±cz sobie "widok drzewa" przy sortowaniu wiadomo¶ci, to zobaczysz, ¿e mój post znajduje siê w zupe³nie innym miejscu ni¿ Twój... :-)

Pozdrawiam Piotr Wyderski

U¿ytkownik "Piotr Wyderski" snipped-for-privacy@ii.uni.wroc.pl> napisa³ w wiadomo¶ci news:dk819p$tq2$ snipped-for-privacy@news.dialog.net.pl...

Moje pytanie mia³o na celu tylko wprowadzenie wyja¶nienia - oczywi¶cie wiem, formalnie masz racjê. Jednak w tym szczególnym przypadku mo¿na na to przymkn±æ oko - rozwi±zujemy problem, do którego teoretycznie dochodziæ nie powinno. Wynik ka¿dego rozwi±zania innego ni¿ zerowanie uk³adu jest z definicji niepewny i jest podobnego kalibru wykroczeniem, jak korzystanie z wiedzy niepodpartej dokumentacj±.

Pzdr, Raf.

P.S. W 8085 wprowadzono kilka nowych rozkazów wzglêdem 8080, jednak... nie udokumentowano ich oficjalnie. Mimo to, by³y one znane i... wykorzystywane (nie pochwalam, przytaczam anegdotê ;) ).

Piotr Wyderski snipped-for-privacy@ii.uni.wroc.pl> napisał(a):

"Testowałem" toto , na 12-toplikowcu ;) KamAVR - po kompilacji - pokazuje całkowitą ilość "zużytego" flash-u , więc obchodzę się bez kalkulatora ;-)

Moje drzewo(Firefox) powiedziało mi ,że "pijesz" do mnie ;) Jednakże Thunderbird wyprowadził mnie z błędu.Przepraszam Cię.

Pozdrawiam Piotrek

U¿ytkownik "Krzysztof Szmur³o" snipped-for-privacy@tlen.do.wyciecia.pl> napisa³ w wiadomo¶ci news:dk89mv$921$ snipped-for-privacy@atlantis.news.tpi.pl...

Racja, przeoczy³em tê mo¿liwo¶æ.

Pzdr, Raf.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required