[elektro] Nuvoton Cortex-M0
Info
info at kiralyelektronika.hu
Fri Nov 11 14:41:38 CET 2011
>>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.
More information about the Elektro
mailing list