[elektro] STM32f4 interrupt : volatile tombok

potyo potyo.ada at gmail.com
Wed Dec 11 18:20:55 CET 2013


Ezt a típust nem ismerem, de a Blackfin tud olyat, hogy különféle DMA
konfigurációkat beállítani, és azokat egymás után hajtja végre. Hasonlóra
használom én is, egyik puffert tölti bejövő adattal, míg a másik pufferben
levő adattal csinálok valamit. Amikor átjött X mennyiségű adat (ezt én
konfigurálom, hogy mennyi legyen), akkor ad egy IT-t, és akkor indítom a
feldolgozást az adott pufferen. Maga az adatfogadás automatikusan átáll a
másik pufferre, tehát nem kritikus az IT kiszolgálása. Ugyanez kimeneti
irányban is, egyik puffert töltöm, addig a DMA a másik pufferből rakja ki
az adatokat. Amikor a puffer minden adata kiment, akkor magától átvált a
másik pufferre, és szintén ad egy IT-t, hogy ez a puffer szabad, lehet bele
pakolni. Meg még egy rakás dolgot tud, pl. időmultiplexeléssel egymás után
beérkező külön csatornák adatait kétdimenziósan szétpakolni, ugyanez
visszafelé, stb. Talán ennek a DMA-ja is tud ilyesmit.


2013. december 11. 17:02 Pal Lukacs írta, <ekegep at yahoo.com>:

>
> Sziasztok !
>
> Ujra kerdes :)
>
> Azt hiszem a konstrukciot korabban felvazoltam,.. Ha nem ujra roviden:
>
> ADC IT, DAC IT, adat be, adat kivitel
> ADC IT adc pufferek allapotait is allitgatja, meg a main-nek a szures
> flageket (hogy melyi puffert szurje)
> DAC IT a sajat puffereit kezeli (ezeknek allapotait)
>
> A rendszer mukodesehez feltetel, hogy a szures legyen kesz az egyik
> pufferen, amig a masik megtelik.
> A ket IT nehany us tavolsagra fut be egymastol.
>
> Egy ilyen konstrukcioba hogyha DMA-t hasznalnek adatbehozashoz, kiirashoz,
> mennyit nyernek vele?
> Az emlitett flagaket valahol allitgatnom kellene igy is, gondolom szinten
> IT lenne (DMA IT) ? Mekkora csomag behozasa/kiirasa utan tudok IT-t
> generalni DMA-val ?
>
>
>
>
>
> On , Pal Lukacs <ekegep at yahoo.com> wrote:
>
> Sziasztok !
>
> Problema megoldodott.
> Egy elem a beirasnal, egy elem a kiolvasasnel kiesett a rossz elgondolas
> miatt.
> Tokeletesen atviszi mindket csatorna a jelet a szuressel egyutt.
>
> Koszi mindenkinek.
>
>
> Udv.
> Szabi
>
>
>
>
> On Wednesday, December 11, 2013 4:24 PM, hg12345 <hg12345 at freemail.hu>
> wrote:
>
> Hi,
>
> Nem akarok
>  kötözködni, de mi a feltételezés, hogy 11(12) általánosan használható
> regisztere van, vagy hogy egy méretes tömb nem fér bele. :-()))
>
> Már elnézést, de honnan gondolod, hogy egy méretes tömb minden elemét
> 11(12) regiszterben képes tárolni.
> Persze ha ez egy semafor tömb, akkor és csak egy elemét használod akkor
> már más a felállás, de ez azért benne van az erediti mondatba :-)
>
> Ha igazad lenne és a fordító nem változó alapon dolgozna fordítási
> egységenként, hanem memória alapon, ami eléggé lehetetlen, mert ezt a
> linker csinálja, akkor nem kéne a volatile-vel foglalkozni, mert látná hogy
> ennek máshol is értéket adnak.
>
> Gondolom láttál már asm listát ARM esetén és szintén megnézted az ARM
> "risc" utasítás készletét.
> Ha igen akkor jól látható, hogy egy -O0 tömb
>  címzés  esetén nagyon nagy százalékban ill. majdnem mindig végig csinálja
> a teljes eljárás, BASE + index*(sizeof()) ez azért barátok között is több
> elemi utasítás.
> De ha kihasználja az ARM  index + offset & displacment utasítását egy
> lépésben sajnos ez se jelenti azt hogy egy utasítás egy óra ciklus, hanem
> inkább 6 belső óra ciklus. Az ARM utasítás készlet egy utasítás egy
> óraciklus csak a belső regiszter regiszter műveletekre vonatkozik, és még
> az se igaz hogy mindig ugyanannyi órajel alatt végzi el a műveletet.
> (Nagyon befolyásolja busz mátrix foglaltsága, és a CORTEX,
> megvalósításoknál a belső buffer töltöttsége..., arról nem is beszélve hogy
> az egyes összetett elemi utasításokba még az IT is beférkőzik)  Persze erre
> már utaltam is, hogy az CORTEX magokon az ATOMIC utasítások nem
> megvalósíthatók, kivéve  BITBANDIG megvalósítást mert
>  ezt belső 3 lépésből álló utasítás LOAD,XOR,STORE nem tudja megszakítani
> az IT, de ha tényleg akarod használni akkor a buffert a következő lépésben
> ürítésre kell kényszeríteni.
>
> Az STM32F2 és F4 sorozatokban csak a uC kapcsolt ram olvasható 0.ws  ez
> egy 64K terület ami  kikerüli a buszmátrixot, és ha innen fut a program
> akkor 5-8% teljesítmény többletet lehet kihozni belőle a nem közvetlen
> kapcsolt ram a buszmátrix sebessége és a ram sebessége miatt lassabban
> olvasható.
>
> Egyébként ha mindent volatile-nek definiálnak abból se lesz baj,  kicsit
> nagyobb és egy kicsit lassabb lesz a program de üzembiztosan fog futni. Az
> optimalizáslással buffer, tömb kezelés esetén azért 50% nagyobb
> teljesítmény javulás nehezen érhető el. HW <-> memória között sokkal
> célszerűbb a DMA gyorsabb, tisztább, érthetőbb.
>
>
>
>
>
> "Móczik Gábor" <pm_levlista at progzmaster.hu> írta:
> >2013.12.11. 9:39 keltezéssel, hg12345 írta:
> >> Egy nagyméretű tömb esetén, ha nem csak egy elemét használod akkor ezt
> alapból nem tudja megcsinálni a forditó, nincs annyi regisztere :-)
> >
> >Ez azonban feltételezés.
> >
> >Ugyanis a fordítónak a tömb is csak egy ugyanolyan memóriaterület mint a
> >mondjuk a BSS szegmens, és egyszerre nem az egész tömbbel végzel
> >műveleteket, hanem egy elemmel. Ha olvasod és ugyanazzal a változóval
> >több műveletet végzel, valószínű hogy
>  kiolvassa egy regiszterbe, és
> >onnan használja.
> >
> >Ennek van is értelme akkor, ha a RAM lassabb mint a CPU, vagy több
> >(nagyobb opcode) utasítás kell a címzéséhez. Ez mondjuk komolyabb
> >hardveren és/vagy CISC utasításkészletek esetén így is van, de az
> >STM32-ben egy ciklus alatt olvasható a RAM, ugyanolyan mintha
> >regiszterből olvasnád, semmi lassulást nem fog okozni ha volatile-ként
> >deklarálod.
> >
> >-----------------------------------------
> >          elektro[-flame|-etc]
> >
>
> -----------------------------------------
>           elektro[-flame|-etc]
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list