Zaciatocnicke otazky – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zaciatocnicke otazky – Assembler – Fórum – Programujte.comZaciatocnicke otazky – Assembler – Fórum – Programujte.com

 

M4x0
Duch
25. 10. 2017   #1
-
0
-

Ahojte,

Začal som študovať externe vysokú skolú kde sa učíme assembler. S programovaním nemám veľké skúsenosti. V škole používame  AVRstudio4 ale zatiaľ sa učím len čisto na papier písať a iba keď prídem na cvičenia  čo je 1x za 2 týždne tak to skúšam nahodiť do programu a vyskúšať reálne čo to robi  vtedy mi  pri práci s AVRkom mi pomáha profesor. (napríklad minulú hodinu sa mi podarilo rozblikať 8 diód, raz 4 po sekunde ďalšie 4  )  Doma ako som spomenul to robil len čisto tak že sa učím chápať aký kód čo prečo robí a potom skúšať písať na papier. Keďže po prvé vôbec neviem ako sa skúša v tom AVRku ci je kód správny alebo nie a keď je kód správny tak neviem ako si to skúsim reálne otestovať keďže nemám doma žiaden kit s procesorom.  Týmto by som sa ešte chcel opýtať je AVRko správne pre úplného začiatočníka?

Príkaz delay

 Na nete som našiel kalkulačku a ta mi vyhodila tento príkaz.

; Delay 8 000 000 cycles
; 1s at 8.0 MHz

    ldi  r18, 41
    ldi  r19, 150
    ldi  r20, 128
L1: dec  r20
    brne L1
    dec  r19
    brne L1
    dec  r18
    brne L1

Ako sa to vlastne rata ? .. prečo pravé tieto čísla 41,128,150 spomalia procesor o 8000000 cyklov?? Existuje na to vzorec ?? Ako by som zistil aké čísla mam použiť ak by mal procesor 12Mhz ? A chcel by som ho "spomaliť" napríklad na 1,5 s alebo 15 min ..

A nakoniec vedeli by ste mi odporučiť dobru literatúru kde podľa ktorej by som sa mohol učiť.   

Ďakujem a prajem pekný deň.

Nahlásit jako SPAM
IP: 212.37.65.–
JerryM0
Věrný člen
25. 10. 2017   #2
-
0
-

#1 M4x

pauzu mužeš dělat několika způsoby např. přes časovač, přes algoritmus jako 2 vnořené cykly nebo víc vnořených cyklů a podobně. každá instrukce vyžaduje určitý počet hodinových cyklů, např instrukce NOP vyžaduje jeden a instrukce RET čtyři. Pro např. ATmega8535 trvá při 16MHz krystalu jedna instrukce NOP celkem 1/16000000 sekundy. Jak dlouho instrukce trvá najdeš v manuálu. Když máš dva vnořené cykly tak vnitřní cyklus muže udělat max. 256 cyklů a vnější taky 256 takže 256x256=65536 cyklů pro dva vnořené cykly a to nám dává 65536x(1/16000000) sekundy což je 0.004096 sekundy což je pauza opravdu velmi krátká na blikádí diody takže potřebuješ třetí cyklus což je 256*0.004096=1.048576 sec. počet cyklů v každém cyklu mužeš nastavit jinak než na max hodnotu 256 (proměnná byte 0..255 = 256 různých hodnot) takže kombinací 3 čísel si volíš délku pauzy. Jinak řečeno vynásobíš tebou zvolený počet průchodů cyklem v jednotlivých cyklech X1*X2*X3*(1/16000000)=vysledna pauza. To je samozřejmě ideální stav protože pauza v nejvíce vnořeném cyklu nebude trvat 1/16000000 sekundy protože počet instrukcí v nejvíce vnořeném cyklu je větší než jedna a takyněco zaberou instrukce typu BRNE apod.  takže v reálném světě místo hodnoty 1/16000000 musíš vložit dobu, která odpovídá součtu trvání instrukcí ve všech cyklech resp. sečteš dobu trvání instrukcí v algoritmu pause a vynásobíš ji zvoleným počtem průchodů v cyklech což jsou např. 3 čísla (41,150,128) takže je vynásobíš. Jak dlouho trvá instrukce třeba BRNE najdeš v manuálu. Jinak AVR studio je zadara a programátor stojí 500kč ten luxusní a kolem 70kč ten obyč. A 2700 originál z ATMELU. k tomu potřebuješ napájecí zdroj stabilizovaný a nějaké zapojení procesoru na desce což se tu řešilo na foru asi tak před 4 měsíci a je tam aj fotka takový desky spájená na kusu papírový čtvrtky. takže krystal + reset obvod + konektor na napájení a nějaký diody s odporama a pár dalších kravin a zdroj asi 5V stabilizovaný !!!. Takže za asi tak za 300 si to mužeš pořídit domu a nemusíš čekat až to budete mit ve škole.

https://www.banggood.com/AT-AVRISP-AVR-ISP-mkII-In-System-Programmer-ATAVRISP2-AVRISPmkII-Compliant-p-1140507.html?rmmds=search

https://www.banggood.com/Wholesale-Programmer-and-Logic-Analyzer-c-2362-0-1-3-45-0_page1.html?sortType=asc


https://www.banggood.com/AT-AVRISP-AVR-ISP-mkII-In-System-Programmer-ATAVRISP2-AVRISPmkII-Compliant-p-1140507.html?rmmds=search

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:505:6...–
KIIV
~ Moderátor
+43
God of flame
25. 10. 2017   #3
-
0
-

Ze me neprekvapuje, ze delate v 10 let starym IDE (a nejmene 7let ho uz nikdo neaktualizuje).

AVR je vcelku jednoducha architektura, s ne moc slozitym nastavovanim periferii, takze se da povazovat za vhodnou pro zacatecniky.

To se neda moc rici o pouzivani ASM, ten se hodi spis kdyz uz vis, jak co beha v C a chces vice pochopit jak je to implementovane na urovni strojoveho kodu.

Pokud by ses spokojil jen s testovanim, jak kod beha, tak by melo stacit koupit jedno Arduino a to programovat primo z AVR studia (bootloader se tam vetsinou tvari jako AVR-ISP nebo neco takoveho). Jen netusim, jestli to umi i automaticky reset Arduina, tak aby se bootloader vubec zapl. Pokud ne, tak bys musel ve spravny cas zmacknout reset a tlacitko programovani (nic moc komfortniho). Nebo mit dve Arduina a do jednoho nahrat Arduino-ISP sketch a druhe pomoci prvniho programovat (pokud by Arduino vyslo levneji nez AVR-ISP, tak se o tom da uvazovat). Zaroven bys s Arduinem mohl zkusit, jak se snadno pracuje v C (respektive C++). Za cenu toho, ze je vse vyrazne pomalejsi, nez kdyz se to dela v cistem C bez Arduino knihoven. Ale ma to pak vetsi sanci, ze te to zaujme a treba u toho i zustanes, nez kdyz se budes topit v ASM.

To pocitani cyklu neni tak jednoduche, jak popsal JerryM, jelikoz se ty hodnoty 41,150 a 128 nastavuji jen jednou. Takze 150 a 128 slouzi jen k drobnemu doladeni poctu strojovych cyklu. V dalsich kolech se uz pocita celych 256. Ale nevidim smysl to pocitat rucne. A kolik jaka instrukce zabira strojovych cyklu se da snadno zjistit nekde z datasheetu nebo popisu instrukcni sady (vcetne toho, co instrukce dela, co nastavi za flagy a tak)

Nahlásit jako SPAM
IP: 185.163.41.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 253 hostů

Podobná vlákna

C++ otázky — založil Andrej

Otázky k C++ — založil Andrej

Otázky — založil ukulele

C++ otázky , — založil Andrej

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý