[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