[elektro] ARm programozási kérdés

lvagasi at t-online.hu lvagasi at t-online.hu
Mon Feb 27 09:53:29 CET 2017


  Szia!
   
  Igen érdekes és nem egyszerű témát hoztál fel.
   
  Igen, az M0 és M0+ (ARMv6 architektúra) az elég mostohán kezeli az  
exclusive hozzáférést.
   
  Az M3, M4 (ARMv7) esetében sokkal jobb a helyzet. Ezeknek a magoknak  
vannak kiegészítő jeleik a normál AHB3-Lite signaljai mellet az  
exclusive hozzáférések támogatására, illetve a magon belül is van egy  
egyszerű exclusive access monitor. A belső EAM csak egy megkezdett  
exclusive hozzáférést tud követni. Ez annyit jelent, hogy egy ha egy  
LDREX után egy másik címre is csinálsz egy LDREX-et, akkor az utlsót  
fogja követni és az elsőhöz tartozó write sikertelen lesz.
   
  A cím mellet fontos, hogy a hozzáférés mérete (byte, word, stb  
vagyis a hsize értéke) is megegyezzen. A monitor figyelembe veszi,  
hogy melyik privilege levelről kezdeményezted a transfert, vagyis az  
1-es kérdésedre a válasz az, hogy ha az IT-ben megváltoztatod a  
korábban user space kódból LDREX-el elért címet, akkor amikor  
visszatérsz az IT-ból a user space STREX sikertelen lesz. A fentebb  
írtak miatt egyébként bármilyen exclusive hozzáférést csinálsz az  
IT-ban, a user space-ben megkezdett exclusive hozzáférés sikertelen  
lesz.
   
  A 2. kérdés már rendszer szintű támogatást igényel és a chip  
gyártótól is függ. Az AHB3-Lite protocolnak van egy hmaster signálja,  
ami konfigurálható szélességű lehet és arra szolgál,  hogy a  
hozzáféréseket kezdeményező master-eket meg lehessen különböztetni a  
rendszerben. Ha mondjuk a procin kívül csak egy DMA van még a  
rendszerben, akkor 1 bit is elég. Ha az LDREX és az STREX ugyanattól a  
mastertől jön és közben az adott címre nem volt más írás, akkor  
sikeres a hozzáférés. Ehhez az kell hogy a chip gyártó tegyen egy,  
vagy több Exclusive access monitort a rendszerbe. Hogy ezek hány  
párhuzamosan folyó hozzáférést támogatnak az gyártó specifikus. Az  
biztos, hogy a címen kívül a hozzáférés méretének, a burst típusának  
és a protection controlnak is egyeznie kell a sikerhez. (haddr, hsize,  
hprot, hburst, hmaster)
   
  Joseph Yiu írt egy nagyon jó és nagyon összeszedett könyvet: The  
Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors címmel. A  
Newnes adta ki. A harmadik kiadás 2014-es. Rémlik, hogy rá lehet  
találni a neten pdfben.
   
  Egyébként ugyanez megvan M0 és M0+-hoz is: The Definitive Guide to  
ARM Cortex-M0 and Cortex-M0+ Processors
  Ami még fontos, hogy az M3, M4 támogatja a bitbanding-ot ami szintén  
atomic hozzáférés és nem megy együtt az exclusive access-el.
   
  A témáról elég sok infó hozzáférhető a infocenter.arm.com oldalon  
egy egyszerű regisztráció után. Ami érdekes lehet az az ARMv7  
Architecture Reference Manual, főleg az A3.4-es fejezet. Illetve az  
AMBA 3 AHB-Lite Specification illetve a Cortex-M3 és M4 Technical  
Reference Manual-ja meg a Device User Guide-ok.
   
  Remélem tudtam segíteni. Ha van még kérdés szívesen megpróbálom  
megválaszolni.
   
  Üdv:
   
  Laci



többszörösen használt perifériák esetén mi a célszerűbb konfigurációs  
megoldás.

A M0 és M0+ esetén nincs alternatíva
 1 disableIT
 2 beolvasás
 3 módosítás
 4 kiírás 
 5 enableIT

A M3 felett léteznek LDREX STREX utasításokkal is megoldható
 1  LDREX
 2  módosítás
 3  STREX
Ez alaphelyzetben gyorsabb és nincs IT kizárás, mint az előző  
változat, de változás esetén kétszer hajtja végre a teljes  
programrészletet 

Az utóbbival kapcsolatban lenne kérdésem. 
Mivel ez figyeli az adott cím (LDREX) feldolgozás alatti változását,  
ha ilyen történt akkor újra beolvassa és feldolgozza.
1, mi történek ha egy IT -s beleszakítás esetén szintén egy  
LDREX/STREX utasítás van, vagy akár többszörös beágyazás. Milyen  
mélységig működőképes ez?
2, Ez csak processzor szinten működik vagy rendszer szinten vagyis a  
DMA-s hozzáférést is figyeli?  (Olvastam rendszerben is működik, de  
ott csak heterogén és nem heterogén uC/uP eset szó)


More information about the Elektro mailing list