książka o programowniu AVR w C - Page 2

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

Translate This Thread From Polish to

Threaded View
Re: ksišżka o programowniu AVR w C
W dniu 31.01.2011 16:38, J.F. pisze:
Quoted text here. Click to load it
W tym celu trzeba sprawdzić w dokumentacji kompilatora co ląduje na
stosie przy danej konwencji wywołań.

Quoted text here. Click to load it
Jakie to ma znaczenie w kodzie C?

Quoted text here. Click to load it
Ale to wynika z dokumentacji a nie ze znajomości asm. Można napisać w
assemblerze adresujący IO pośrednio i tak samo się zastanawiać dlaczego
nie działa.


Quoted text here. Click to load it
To jest w dokumentacji przy opisie rejestru. To czy blokować, czy nie
jest niezależne od tego czy asm czy c.

Quoted text here. Click to load it
Hasło:
Division by invariant integers using multiplication

Quoted text here. Click to load it
Ale ja nie twierdzę, że nie trzeba wiedzieć co się robi, tylko, że
wiedza wynikająca z programowania w ASM nie jest konieczna.

P.S.
Pisanie na początku w asm potrafi zostawić brzydkie nawyki jak
przesunięcia binarne zamiast dzielenia, czy "optymalizację" liczników w
pętlach, które nie mają praktycznego znaczenia a zaciemniają kod. Imo
optymalizować należy jeżeli są problemy z wydajnością a nie "na zapas".

--
Pozdrawiam
Michoo

Re: ksišżka o programowniu AVR w C
On Mon, 31 Jan 2011 18:00:48 +0100,  Michoo wrote:
Quoted text here. Click to load it

I w dokumentacji procesora jaki ten stos moze byc.

Quoted text here. Click to load it

Na przyklad okresla co jest niemozliwe czy tez bardzo pracochlonne.
Pamietasz 51 z jej pamieciami ?

Quoted text here. Click to load it

Jak juz znasz dokumentacje na takim poziomie to znasz i asma

Quoted text here. Click to load it

albo nie mozna, bo nie ma takiego rozkazu. Przy czym latwiej da sie
przeczytac w opisie konkretnej instrukcji niz sie zastanawiac o co
temu glupiemu kompilatorowi chodzi przy banalnej instrukcji
out(p,v).


Quoted text here. Click to load it

C moze to kompilowac inaczej niz myslisz.

Quoted text here. Click to load it

O ile pamietam wyniki nie zawsze sa calkowicie zgodne.

Quoted text here. Click to load it

No, polemizowalbym nieco czy to brzydki nawyk.
Za to brak w C operacji "obrotu" bitow, i to juz jest czasem problem.

Quoted text here. Click to load it

Od procka zalezy, bo jak sie ma 16 rejestrow po 32 bit to sie pisze
fajnie, a jak trzy po 8 to kompilator musi sie bardzo mocno wykazac, a
i programista, zeby sie nie okazalo ze zapasu nie ma :-)

J.


Re: ksišżka o programowniu AVR w C
[.....]
Quoted text here. Click to load it
Tzn. rzeźbiarz w assemblerze nie musi wiedzieć takich rzeczy? :-)

Każdy programista systemowy musi mieć jakieś pojęcie o sprzęcie. I to
nie tylko o CPU/MCU ale również musi wiedzieć np. jak wygląda mapa
pamięci czy też w jaki sposób są podłączone i jak się komunikują z MCU
peryferia, np. jakiś RTC na I2C. Poza tym żaden programista systemowy
rzeźbiący w C dla MCU raczej nie uniknie chociażby szczątkowego kontaktu
z assemblerem. Natomiast rzeźbiarstwo w assemblerze "dla zasady"
najzwyczajniej w świecie nie jest uzasadnione ekonomicznie.

Re: ksišżka o programowniu AVR w C
On Mon, 31 Jan 2011 22:27:33 +0100,  JDX wrote:
Quoted text here. Click to load it

Widze jakies nieporozumienie.

Oczywiscie niezaleznie od jezyka dokumentacje trzeba przeczytac.
A jak sie przeczyta to juz sie umie pisac w asmie, i do tego pije :-)

Aczkolwiek pewne kwiatki czlowiek zauwaza dopiero wtedy jak usiluje
cos rzeczywiscie napisac.

J.


Re: książka o programowniu AVR w C

Quoted text here. Click to load it

    Takie, że jak się pisze w C na scalaki typu Tiny13, które mają "aż" 64
bajty RAMu to się można zdziwić, jaką sieczkę odwala (a raczej odkłada na
stos) kompilator C wchodząc w przerwanie. A zasada jest prosta zrzuca się na
stos SR i używane w przerwaniu rejestry, a nie wszystko co się da na zapas
jak robi to kompilator C.

Quoted text here. Click to load it

    Tak, szczególnie jak masz np. 1K Flash-a i 64B ramu :)
Ale wtedy co robi programista w C? Zamiast ATtiny13, ładuje się ATtiny2313 i
problem rozwiązany.

Quoted text here. Click to load it

    Po pierwsze zajmuje 2 takty samo mnożenie, ale jego wynik ląduje w
rejestrach R0/R1, co powoduje, że tracimy nast. kilka taktów aby je stamtąd
wydobyć. A przypominam, że R0-R15 są rejestrami w pewnym stopniu
upośledzonymi i nie wszystkie instrukcje dostępu do nich działają (np. ldi).
Rolowanie zajmuje jednak mniej.

Quoted text here. Click to load it

Do momentu jak mu się program "zesra", bo stos wlezie na zmienne.

Podsumowując - pisanie w C wymaga sporo mniej czasu, jednak pewne rzeczy
dostępne w asm od ręki C ma wyjątkowo upierdliwie rozwiązane (np. dostęp do
zmiennych w pamięci FLASH). Poza tym, jak ktoś zna assembler, to sobie ze
wstawkami w newralgicznych miejscach poradzi.


Re: książka o programowniu AVR w C
Quoted text here. Click to load it

To bug w kompilatorze jeśli wrzuca za dużo. Nikt nie twierdzi ze avr-gcc
jest doskonały bo sam wiem że *za* dużo rejestrów używa w przerwaniach.

Quoted text here. Click to load it

Kompilator C tak nie robi. Tak robi tylko *zły* kompilator C.

Quoted text here. Click to load it

I ma wiele racji. Dla $0.50 oszczędności per sztuka może sie okazać że
nie ma co robić rekodzieła w kodzie asm przez 4 miesiące aż się
*zmieścisz* co do bajta tylko od razu wziąść na zapas i program napisać
w dwa wieczory.

Quoted text here. Click to load it

Jesli kompilator nie potrafi zamienić a *= 2; na operacje shift bitów to
jest marnym kompilatorem.

Quoted text here. Click to load it

Zapewne asm jest tak magiczny że to się nie ma prawa popsuć w ten
sposób, nie?

Quoted text here. Click to load it

To raczej brak supportu ze strony kompilatora. C nie ma nic do tego że
są jakieś rózne pamięci, choć było by miło gdyby miał.

Quoted text here. Click to load it

Rzecz w tym że:

a) niektórzy programisci starej daty w C piszą dokładnie tak samo jak w
asm (wlacznie z uzywaniem goto). Dla nich nie ma różnicy bo i tak nie
potrafia w gruncie rzeczy wykorzystać C.

b) niektórzy uważają że wstawką może być cały program.

Wiec jest kwestią zdrowego rozsądku sensownie to podzielić. Osobiście
jestem zdania że najlepszy jest podział 100% C++ i 0% asm.

Re: książka o programowniu AVR w C

Quoted text here. Click to load it



    Ale jak piszesz w asm to z pewnością wiesz co to stos, tym bardziej, że
sam musisz go sobie ustawić na RAMEND (lub tam gdzie ci wygodnie), bo nikt
tego za Ciebie nie zrobi. Tak samo jak mogę sobie wpisać pod jakiś adres w
RAM-ie (gdzie planowany jest koniec stosu) jakąś wartość i nawet podczas
wykonywania programu sprawdzać, czy stos tego nie zamazał.
    Natomiast jestem przekonany, że istnieje niezerowy odsetek osób, które
zaczynały przygodę od C, czy co gorsza BASCOM-a używają w swoim programie
przerwań na zasadzie dołączania gotowych bibliotek, czy wywołań
rekurencyjnych, zbytnio sobie nie zdając sprawy, że takie coś istnieje, a
jak nawet słyszał ten ktoś magiczną nazwę "stos", to ma mgliste pojęcie jak
działa.


Re: książka o programowniu AVR w C
(a):

82% w wiadomoC5%9Bci  =

Quoted text here. Click to load it
87% w ten  =

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it
82%.
Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Ale taki gcc naprzykC5%82ad sam oblicza gC5%82C4%99bokoC5%9BC4%87 s=
tosu i wg tego ustawia
jego wskaC5%BAnik, teC5%BC nie masz na to C5%BCadnego wpC5%82ywu.
Quoted text here. Click to load it


-- =

Pozdr
JanuszK

Re: książka o programowniu AVR w C
Ale taki gcc naprzykład sam oblicza głębokość stosu i wg tego ustawia
jego wskaźnik, też nie masz na to żadnego wpływu.

A jeżeli programowo będę umieszczał jakies swoje dane na stosie albo je
ściągał to czy gcc to też obliczy ? :)
A jeżeli będę chciał programowo zmienić wskaźnik DPTR po to aby wrócić z
podprogramu celowo w inne miejsce niż te z którego wyskoczyłem to też ?
Nie wiem jak w C gdyz się dopiero go uczę ale w ASMie często takie tricki
wykorzystuję.

Marek


Re: książka o programowniu AVR w C

Quoted text here. Click to load it
z

Miało byc SP nie DPTR oczywiście.

Marek


Re: książka o programowniu AVR w C
C5%82(a):

9B%ci  =

82%(a):
Quoted text here. Click to load it

Quoted text here. Click to load it
IMHO ustawi po swojemu.

Quoted text here. Click to load it
BA%nik DPTR po to aby wrC3%B3ciC4%87 z  =

Quoted text here. Click to load it
82%em to teC5%BC ?
Ale to musisz zrobiC4%87 wstawkC4%99 w asm. Nie wiem co zrobi gcc, nie=
 C4%87wiczyC5%82em  =

tego.

Quoted text here. Click to load it

Quoted text here. Click to load it
Ale asm to nie kompilator tylko translator ktC3%B3ry zapis mnemoniczny =
 =

przekC5%82ada na kod,
kompilator C robi znacznie wiC4%99cej.


-- =

Pozdr
JanuszK

Re: książka o programowniu AVR w C

Quoted text here. Click to load it

Uśmieszków moich nie dostrzegłeś :)
Chodziło mi tylko o to że gcc nie ma szans obliczyć głębokości stosu
jeĹźeli
będziemy zmieniali wartośc wskaźnika SP programowo. Tak ironizowałem tylko.

Marek


Re: ksišżka o programowniu AVR w C
On Wed, 2 Feb 2011 12:09:49 +0100,  4CX250 wrote:
Quoted text here. Click to load it

kompilator C zasadniczo w ogole nie ma szans obliczyc glebokosci stosu
na etapie kompilacji, chyba zeby tak budowal drzewo zagniezdzen i
sprawdzal rekurencyjnosc.

Moze sprawdzac na etapie wykonania, ale to strata na szybkosci i
kolejny klopot.

Programista ma zadbac o wystarczajacy stos.

J.


Re: ksišżka o programowniu AVR w C
W dniu 02.02.2011 12:28, J.F. pisze:
Quoted text here. Click to load it
Kompilator zna początek stosu i zna jego koniec, więc oczywiście, że się
przystosuje do zmiany rejestru  i nawet będzie działać kontrola
głębokości stosu, jeżeli ją wkompilujemy. A do kontroli "za darmo" można
użyć pułapki sprzętowej o ile procesor obsługuje.

Quoted text here. Click to load it
Problem stopu jest nierozwiązywalny ;)

--
Pozdrawiam
Michoo

Re: ksišżka o programowniu AVR w C
[.....]
Quoted text here. Click to load it
Także początek i koniec stosu dynamicznie tworzonych wątków/zadań? :-)

Re: ksišżka o programowniu AVR w C
W dniu 2011-02-03 13:06, JDX pisze:
Quoted text here. Click to load it

Use RTOS Luke. We Freertosie definiujesz wielkoB6%E6 stosu dla kaBF%dego=
 taska.

--20%
Pozdrawiam
MD


Re: ksišżka o programowniu AVR w C
[.....]
Quoted text here. Click to load it
No popatrz, to podobnie jak pod Linuksem. Lub pod Windows. Lub pod
NutOS. Lub pod "moim własnym" OS-em. :-) Pytanie jest tylko skąd
kompilator C ma wiedzieć jaką wielkość stosu dla jakiegoś wątku wymyślił
sobie użytkownik i pod jakim adresem postanowił umieścić jego dno. :-)

Re: ksišżka o programowniu AVR w C
W dniu 2011-02-03 14:05 JDX napisał(a):

Quoted text here. Click to load it

Jeżeli używasz nieco większych procków niż AVR (powiedzmy chociażby
ARM7TDMI) to kompilatorowi gcc możesz powierzyć sprawdzanie
przekroczenia stosu na początku każdej funkcji. Oczywiście jest to
sprawdzane podczas wykonywania kodu i nieco go zwalnia a nie podczas
kompilacji. Jeden rejestr procesora wtedy jest zarezerwowany na adres
końca obszaru stosu i twój system operacyjny musi go odpowiednio
przełączać przy zmianie wątku (podobnie jak przełącza sam wskaźnik stosu
i inne rejestry). Poczytaj o opcji kompilatora -fstack-check.
Teoretycznie to samo można by zrobić w AVRach ale nie wiem czy
kompilator avr-gcc obsługuje tą opcję. Przy procesorach z ochroną
pamięci (np. ARM926EJ-S) jest jeszcze prościej.

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

We've slightly trimmed the long signature. Click to see the full one.
Re: ksišżka o programowniu AVR w C
W dniu 2011-02-03 14:05, JDX pisze:
Quoted text here. Click to load it

ByB3%a mowa o programowaniu mikrokontrolerF3%w.

Lub pod
Quoted text here. Click to load it
tku wymyB6%liB3%
Quoted text here. Click to load it

A co mnie obchodzi jak on to znajduje. Jest skrypt xTaskCreste ktF3%ry20%
uBF%ywam do tworzenia zadania. W nim podajEA% wielkoB6%E6 stosu. Jak to =
w20%
czasie kompilacji gcc odczyta i gdzie umieB6%ci poczB1%tek stosu to juBF%
 nie20%
moja sprawa. Nie jestem programistB1% systemowym. Po to piszEA% w c i pod=
20%
rtosem BF%eby nie zarzB1%dzaE6% pamiEA%ciB1% podczas pisania aplikacji. J=
ak20%
pisaB3%em w asemblerze teBF% robiB3%em durnowate sztuczki BF%eby zdjB1%E6=
 coB6% ze20%
stosu i wyskoczyE6% na chama z procedury ale nie jest to wystarczajB1%cy =

powF3%d BF%eby trwaE6% we wB3%asnorEA%cznym generowaniu kodu maszynowego =
ubranego20%
w sB3%F3wka MOV, ADD czy LJMP.

--20%
Pozdrawiam
MD


Re: ksišżka o programowniu AVR w C

Quoted text here. Click to load it

Nie znam gcc, uczę się dopiero.
"Kompilator" kodu dla 8085 jaki napisałem dawno temu przelatywał przez
listing asm 2 razy gdyż za jednym razem nie był w stanie sprawdzić
wszystkich etykiet skoków i przypisać adresy do odpowiednich ich wywołań.
Więc program podczas tłumaczenia zapisywał sobie kolejne wywoływane etykiety
skoków na własnym coś jakby stosie i przy drugim przebiegu jeśli trzeba było
uzupełniał brakujące adresy etykiet etykiet przy skokach. Ilość kolejnych
odwołań do etykiet była więc ilością adresów odkładanych na stos gdyby
jeszcze uwzględnić polecenia push i pop to można by było normalnie wyliczać
głębokośc stosu ale nadal nie dałoby się zrobić tego jeżeli wskaźnik stosu
zmieniany miałby być programowo.

Quoted text here. Click to load it

O właśnie. Dlatego zawsze jak pisałem w ASM to sobie robiłem arkusz pod
tytułem mapa pamięci który na bieżąco aktualizowałem.

Marek


Site Timeline