Dlaczego ATmega128 przekłamuje? - Page 3

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it

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.


Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

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/
We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it

struct?
i nawet nie przejrzałeś całej strony...

Quoted text here. Click to load it

Może jeszcze żeby się program sam napisał, podczas kiedy programista na
wakacjach.

--
DJ

PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu


Re: Dlaczego ATmega128 przekłamuje?
Darkac pisze:

Quoted text here. Click to load it

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 /

We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it
 
Raczej orginalny pytacz pomylil sie z wyborem zawodu.
Moja rada brzmi :
1. Albo pogodz sie z tematem i zwiaznymi z nim problemami czyli wez sie do
nauki
2. Albo daj sobie spokoj to jest nie dla Ciebie i mam to na mysli tworzenie
kodu jako takiego (bez wzgledu na jezyk) bo zawsze bedzi pod gorke i wiatr
w oczy ;)

Re: Dlaczego ATmega128 przekłamuje?
In the darkest hour on Wed, 14 Oct 2009 23:49:13 +0200,
Quoted text here. Click to load it

Bez przesady znowu z tą wydajnością. Różnice nieistotne zwłaszcza
w przypadku programów z GUI. Dużo programów napisałem w Pythonie, dla
Ciebie pewnie taki program stoi w miejscu i ani piśnie... ;)
A dlaczego w nim? Szybciej, zwięźlej, czytelniej, przenośniej.
Ale to już na jakieś advocacy.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:233B ]
[ 20:14:39 user up 12226 days,  8:09,  1 user, load average: 0.30, 0.10, 0.54 ]

We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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/
We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it

No tak, kopilator i edytor są bezpłatne. Darowanemu koniowi nie zagląda się
w zęby.
Nie powinienem narzekać.


Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it
Przepraszam, że się odzywam w temacie na którym się kompletnie nie znam. Na
temat flag w postaci bitów w bajtach w AVR omawianych w kursie C na AVR w EP
usłyszałem przed kilku laty mniej więcej taką wypowiedź:
"Jak można podawać takie przykłady! Przecież trzeba znać maszynę, na której
program będzie chodził. Widać, że ktoś bezmyślnie przepisał przykład z 51 na
AVR. Potem ludzie tak napiszą i mamy to co mamy."
Z tego co pamiętam to chodziło o to, że przestawienie bitu w bajcie na AVR
wymaga więcej niż jednego rozkazu. No i w przykładzie przyjście przerwania
miedzy tymi rozkazami prowadziło do błędu.
Liczę na to, że ktoś piszący na AVR wypowie się na ten temat (bo nawet nie
jestem pewien, czy te pretensje były uzasadnione).
Z przebiegu wątku wygląda, że jego autor być może powstawia flagi do bajtów
co być może doprowadzi do nowych błędów.
No i chęć zapobiegnięcia temu skłoniła mnie do tej dość mętnej wypowiedzi.
P.G.


Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

AVR ma pewne wydzielone obszary pamieci na ktorych dzialaja instrukcje
umozliwiajace atomowe ustawienie lub wyzerowanie bitu, tylko, ze nie
mozna tego zrobic w SRAM, tylko w niektorych rejestrach IO. Niektore
AVRy maja w tej przestrzeni rejestry, ktore nie maja zadnej funkcji,
poza wlasnie przechowywaniem flag. Wiec da sie to zrobic atomowo, tyle,
ze to juz nie jest standardowe C.

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it

A da się atomowo zapamiętać w bicie flagę przeniesienia, zrobić and czy or
bitu z tą flagą czy odwrócić bit rejestru, bo to mogło też o takie rzeczy
chodzić ?
P.G.


Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

Da sie zapamietac przeniesienie atomowo w szczegolnych przypadkach -
stosujac operacje przesuniecia z przeniesieniem, lub dodawania,
odejmowania - to jak w kazdym procesorze.
Co do OR, AND, XOR flagi C z innym rejestrem to sie nie da atomowo.
Znaczy XOR to by sie nawet dalo, z zastrzezeniem, ze w szczegolnych
przypadkach.
Nie pamietam assemblera '51, ale tam takie operacje jak sadze tez nie sa
atomowe? Zreszta nawet jesli sa to pisanie takich rzeczy w C wcale nie
gwarantuje, ze kompilator to skompiluje zgodnie z intencja autora.
Chociazby stopien optymalizacji bedzie mial wplyw na koncowa sekwencje
rozkazow.


--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it

Sprawdziłem. Niektóre są: CPL bit; MOV bit,C.
Nic więcej nie wiem, poza tym, co napisałem - że gdzieś dzwoni.
Rozumiałem, że program główny robił jakąś operację na jednej fladze bitowej
wymagającą dwu rozkazów (może ją negował), a przerwanie pisało na inną flagę
w tym samym bajcie, co podobno na 51 jest OK, a na AVR nie da się.
P.G.


Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

Niekoniecznie prowadzi do błędu... wszystko zależy od tego, co się z tym
rejestrem w międzyczasie stanie... Typowo ustawianie bitu w jakiejś
zmiennej (która siedzi w RAMie) wygląda tak:
-pobieranie zmiennej do rejestru
-operacja na rejestrze
-zapis zmiennej do RAMu

Jeśli po pobraniu i przed zapisaniem wystąpi przerwanie, które ZMIENI tę
zmienną, wówczas po powrocie z przerwania program główny skasuje zmianę
dokonaną w przerwaniu...
Pisząc program trzeba uważać na takie rzeczy ;)... czasem taka sytuacja
jest po prostu niegroźna. W innym wypadku trzeba rozdzielić zmienne
aktualizowane w programie od tych aktualizowanych w przerwaniach, albo
stosować CLI i SEI ;)...

Pozdrawiam
Konop

Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it
Czyli jest rozwiązanie.
Jeśli kompilatory wykrywają taką sytuację (co wydaje się logiczne) i
otaczają modyfikację wykonaną w programie głównym przez CLI, SEI to
rozumiem, że można sobie swobodnie łączyć flagi i krytykowanie tamtego
przykładu było bezpodstawne. Jedyny problem to nieco mniej optymalny
program.
P.G.


Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

Tylko, ze kompilatory nie wykrywaja takiej sytuacji i programista musi o
to zadbac sam. W avr-gcc libc jest stosowne makro - ATOMIC_BLOCK.
Ja sie jednak bede upieral przy tym, ze jesli ktos robil takie cuda w C
(swoja droga ciekawe jak w C dobral sie do flag i rejestru stanu
procesora) to sam sie prosi o problemy - kompilator kompilujac taki blok
wcale nie musi tego zamienic na jedna instrukcje.

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it

Takie rzeczy robi sie gdy noz na gardle - trzeba zdazyc, a nie ma juz na
czym zaoszczedzic.


Re: Dlaczego ATmega128 przekłamuje?

Quoted text here. Click to load it
Tego nie twierdziłem.
Najpierw myślałem tylko o fagach bitowych w danych.
Potem jak była informacja, że są takie rejestry, w których się da atomowo,
to pomyślałem, że może tam były jakieś inne operacje.
Ja tego nie czytałem, tylko słyszałem krytykę przykładu i było to kilka lat
temu, a sam nic na procesory nie piszę.
P.G.


Re: Dlaczego ATmega128 przekłamuje?
Quoted text here. Click to load it

No ale wydaje mi się, że informacja o "dobieraniu się" do rejestru FLAG
jest małą dezinformacją... chodziło o flagi "własne", trzymane w jakiś
zmiennych ;)...

Pozdrawiam
Konop

Re: Dlaczego ATmega128 przekłamuje?
W dniu 16.10.2009 23:26, Konop pisze:
Quoted text here. Click to load it

To o flagach to z innej galezi tego watku, gdzie PG pisal o fladze Carry
z rejestru stanu.
--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
We've slightly trimmed the long signature. Click to see the full one.

Site Timeline