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