ARM Cortex-M0+ a rozdil LDM a LDR
Tomáš Hamouz
hamouz na divesoft.cz
Středa Červenec 8 14:31:55 CEST 2015
Zkuste mu vnutit rozdělení těch operací.
Na starších ARMech funguje
*ptr = data;
asm volatile (""); // ano, opravdu prazdny kus assembleru
ptr++;
pripadne tam ten nop vnutit
*ptr = data;
asm volatile ("nop\r\n");
ptr++;
Na Cortexech jsou na to nějaké pseudoindstrukce.
Prostudujte také toto http://www.efton.sk/sk/volatile.htm
Tomáš
> Tato oblast je defaultne typu "Device". MPU nepouzivam, defaultne by
> melo byt vypnute.
> Instrukci LDM tam prekladac Keil cpe sam od sebe. Presunutim
> inkrementace se dari donutit k pouziti LDR.
> Pro opacny pristup to vzdy pouziva STM, ale tam se mi zatim vubec nedari
> presvedcit prekladac pouzit STR instrukci... a STM instrukce nefunguje...
> Asi to nakonec budu muset napsat v assembleru, aby to fungovalo vzdy
> spravne.
> Hynek
> Dne 8.7.2015 13:50, Josef Štengl napsal(a):
>> Někdy nejde použít LDM instrukce pro některé typy pamětí – většinou je
>> to HW bug, nebo nastavení MPU.
>> Zkuste změnit nastavení MPU pro danou preriférii na na strongly
>> ordered nebo device, pokud to tak už nemáte.
>> Možná budou přístupy k periférii o něco pomalejší, ale mohlo by to
>> dávat očekávané výsledky.
>> Pokud je nastaveno normal, tak se nemusí čekat na konec operace a číst
>> něco jiného. S MPU si člověk užije spoustu zábavy :-)
>>
>> A podívat se do erraty, jestli se tam o tom něco nepíše. Pokud
>> používáte kompilátor, který podporuje výrobce čipu, tak se podívat do
>> dokumentace, jestli na to není nějaká volba pro kompilátor.
>>
>> LDM se používá převážně při práci se zásobníkem a poli/strukturami. Dá
>> se ušetřit několik CPU cyklů při čtení/zápisu více registrů (záleží
>> ovšem na okolnostech).
>>
>> ced
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list