[elektro] Nuvoton Cortex-M0
hg12345
hg12345 at freemail.hu
Fri Nov 11 15:19:49 CET 2011
Info <info at kiralyelektronika.hu> írta:
> >>Megjegyzem, attól, hogy valami volatile még nem lesz taszkbiztos !!!!>
>
> A NuvoTon-os AppNote alapján csináltam.>
> Megjegyzem, közben meglett a hiba.>
> Az AppNote-ban sz at rul van megirva az SPI DMA kezelés.>
> Mondjuk, elindulni jó volt. De megint a doksi olvasásnál jöttem>
> rá hol hibáztak. Persze az AppNote-ban nem volt több IT, úgy>
> jó volt.>
>
Először a Nuvot akkor tettem le amikor két doksi két külön adattáblát>
adott meg az A/D-nek, aztán végleg amikor a timerjénél írtak valami>
apróságot má' nem is tom. Aztán maradtam nxpnél, aztán rá kellett>
jönnöm, hogy ugyanolyan kapkodásban vannak mint mások...itt a doksiban>
benne van maradva olyan regiszter ami már rég nem is létezik és azért>
nincs erratában mert há' az rég nem is létezik akkor minek :), az>
AEABI_divrom csak félig van implementálva, stb. Szóval eljött az idő>
amikor csak próba után lehet elhinni a doksinak amit ír.>
>
No, ha télleg a volatile volt akkor próbálom nem elbszva elmondani a>
működését: azt mondja meg a fordítónak, hogy két hozzáférés között>
megváltozhat az értéke. Tehát pl ha multiprocesszor van>
MEMÓRIAVEZÉRLŐVEL !!!!! lockolási lehetőséggel, és ezt sokan>
elfelejtik. >
>
Szóval:>
volatile x;>
void func()>
{>
for (x = 15; x < 20; x++) ...>
>
ilyenkor egyrészt sosem fogja regiszterbe optimalizálni, hanem mindíg>
foglal ramban helyet az x-nek, másrészt minden egyes hozzáféréskor>
LEMENTI majd BEOLVASSA, azaz itt ciklusonként 3x. Tehát lehetőséget ad>
rá, hogy valaki kismanó közben átírhassa az értékét.>
>
Az, hogy felhasználhasd megszakításhoz felejtős a köviért:>
main task it task>
...>
olvas olvas>
módosít>
ír>
módosít>
ír <- hoppá kisnyúl van>
...>
>
szóval memória-lockolás nélkül felejtős. Bizony meg kellene várni míg>
az egyik végez, ezért kellene elé-mögé disable-enable IT. >
Tulképpen meg lehetne nélküle lenni, mert fölösleges műveleteket végez>
a folytonos beolvas-visszaír ténykedésével. Staticként mégsem jó ehez>
a IT szemaforosdihoz, mivel a függvény optimalizációja megengedi, hogy>
mondjuk a végén mentse le a ramba, hiába lenne előtte disable it akkor>
is hibásan működne. Szóval amikor azt írtam Neked, hoyg nem kell annak>
volatilenak lenni megint átgondolatlan volt, sorry.>
>
Ha valaki meg valódi multitaszkkal próbálkozik ott teljesen>
fölösleges, mivel megszakadhat a lementés írás előtt is, ott>
kíméletlenül kell vagy lock vagy magának kell mentenie taskváltás>
esetén minden ilyen semaforos változót.>
>
----------------------------------------->
Egy kicsit szükíteném a kezelést, mivel tartalmazhat a program nem maszkolható IT-ket van belőle néhány az ARM-ban még az IT tiltás is kevés lehet az üzembiztos szemafor kezeléshez (nem kell hozzá multiprocesszálás). Beépített proc intenal TIMER-re is müködhet nem maszkolható IT-ként is!
Semaforhoz ATOMIC memória müvelet szükséges, ha elegendő egy bit hozzá, akkor a bit címzésű területen ezt megteheted....ezt próbáltad? Ez elvileg három belső lépésből bonthatatlanul READ-MODIFY-WRITE egy bitre... (és tényleg három órajel) persze volatile-vel kell jelezni, hogy véletlenűl se optimálja ezeket a változókat.
NXP-ből használsz többprocessoros ARM-t?
üdv
More information about the Elektro
mailing list