forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Uložení registrů do stacku

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> ARM
 
hazardrok
Profesionál
Profesionál


Založen: 16.1.2012
Příspěvky: 126

PříspěvekZaslal: 20 březen 2015, 10:02    Předmět: Uložení registrů do stacku Citovat

Ahoj, nevíte někdo zda neexistuje v céčku nějaký modifikátor, který zajistí, že při volání určité funkce dojde k uložení všech obecných registrů do stacku? Používám gcc kompilátor na MCU STM32F100. Dík
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2138

PříspěvekZaslal: 21 březen 2015, 15:11    Předmět: Citovat

Překladač automaticky při vstupu do funkce uschová pouze regstry, které bude ve funkci používat. Pro uschování všech registrů lze funkci vytvořit jako "naked" a registry si inline assemblerem uložit/načíst ručně. V manuálu GCC potřebné informace jsou.
K čemu by to bylo dobré? (kromě multitaskingu, na což je lepší použít něco hotového, třeba FreeRTOS)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
hazardrok
Profesionál
Profesionál


Založen: 16.1.2012
Příspěvky: 126

PříspěvekZaslal: 21 březen 2015, 21:21    Předmět: Citovat

Ahoj dík zas odpověď.
K čemu by to bylo dobré, tak na to je jednoduchá odpověď. V podstatě se skutečně jedná o jakýsi pokus o multitasking. Ale je to skutečně jen pokus, protože si myslím, že to multitasking tak jak je definovaný úplně není.

Doufal jsem, že si ušetřím práci tím, že existuje nějaký modifikátor, který rovnou řekne překladači aby to udělal a já nemusel použít ten fígl s inline assemblerem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 450

PříspěvekZaslal: 24 březen 2015, 16:13    Předmět: Citovat

Docela by mě zajímalo jak si ten multitasking zamýšlel. (čistě pro studijní účely)
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
hazardrok
Profesionál
Profesionál


Založen: 16.1.2012
Příspěvky: 126

PříspěvekZaslal: 24 březen 2015, 17:36    Předmět: Citovat

Ahoj, to ti napsat můžu, ale předem upozorňuji, že je to hodně "pseudo-multitasking".

Vycházím z toho, že mám flešku a ramku rozdělenou na dvě části. Jedné říkám "BIOS" a druhé "APLIKACE". V první části běží funkce, které obsluhují vstupy/výstupy, komunikaci, filesystém, ADC, přerušení atd.... V druhé části běží užívatelský program. V tomto programu se provádí výpočty, beží regulace, řeší se interakce s uživatelem a logujou data na SD kartu.

Důvodem rozdělení programů na tyto dvě části je požadavek na upgrade aplikace z SD karty. Funkce biosu se totiž mění s časem jen velmi pomalu (je z 90% dána hardwarem) zatímco aplikace se stále vyvíjí nebo se opravují chyby. Není proto důvod přehrávat celou flešku, ale jen to co se může změnit. Toto mi také řeší to, že pokud se při přehrávání stane nějaký problém, tak se zařízení nestane černou krabičkou.

Celým tímto punkovým projektem jsem si ale parádně nadělal do kalhot, protože mi chybí ještě velmi mnoho znalostí.
Např. nechápu proč po napsání:
kód:
asm("push {r0-r12}");

dojde k takovémuto překladu:
kód:
stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip}

nebo:
kód:
asm("pop {r0-r12}");

dojde k takovémuto překladu:
kód:
ldmia.w   sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip}


Doteď jsem totiž žil v přesvědčení, že to co napíšu jazykem assembler je svaté. No snad to ještě doženu...říkaj že to je jen o těch prvních deseti letech.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 450

PříspěvekZaslal: 24 březen 2015, 22:39    Předmět: Citovat

Takže tam máš nějakej scheduler a něco co přepíná context mezi N vlákny nebo ne ? To mi spíš příjde že máš něco co využívá funkce uložené na absolutníh adresách....
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 450

PříspěvekZaslal: 24 březen 2015, 22:47    Předmět: Citovat

Osobně byh tam měl startup kterej pořeší upgrage (najde na SD soubor s firware, udělá uprade a pustí to, když ne pustí to co už tam je). To je standardní postup.
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 450

PříspěvekZaslal: 24 březen 2015, 22:49    Předmět: Citovat

http://forums.leaflabs.com/topic.php?id=1298
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
hazardrok
Profesionál
Profesionál


Založen: 16.1.2012
Příspěvky: 126

PříspěvekZaslal: 25 březen 2015, 22:15    Předmět: Citovat

No je to skutečně tak...snažím se všechno umisťovat absolutně. Nějak mi příjde, že nad tím mám větší kontrolu. Scheduler není potřeba. Všechny události se časují systémovým časem v 5ms intervalu.

Co se týče tohoto:
citace:
Osobně byh tam měl startup kterej pořeší upgrage (najde na SD soubor s firware, udělá uprade a pustí to, když ne pustí to co už tam je). To je standardní postup.


Toto si myslím, že to je spíš o otázce přístupu a pojmenování. Ve finále stejnak všechno vede ke stejnému výsledku, akorád to má jinou obálku.

Jinak ten odkaz byl zajímavej. Našel jsem tam pár věcí co jsem úplně nevěděl. Bohužel jsem tam ale nenašel proč je ta instrukce assebleru: ''stmdb'' místo mého požadovaného ''push''.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2138

PříspěvekZaslal: 25 březen 2015, 22:55    Předmět: Citovat

http://www.st.com/web/en/resource/technical/document/programming_manual/CD00228163.pdf
The Cortex-M3 instruction set (PM0056), str.68 napsal:
PUSH and POP are synonyms for STMDB and LDM (or LDMIA) with the memory addresses for the access based on SP, and with the final address for the access written back to the SP.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> ARM Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)