( bucko | 2017. 01. 24., k – 11:16 )

Ebben az a legszomorúbb, hogy ez nem is tizenéves processzor.

Az első probléma: Relatív ugrásnál bekövetkező IT esetén megsérülhet a stack.
A megoldás további lehetőségei:
A BRA/GOTO esetén itt a GOTO nem hosszabb tehát mindegy. Az ugrótábla előtt tiltani kell az IT-t, majd minden ágon engedélyezni. Ronda, de működik.
A BRW helyett computed jump-ot kell használni. Hosszabb, de még hordozható is.

A másodig probléma: Ping-Pong mód beállítasakor megsérülhet az USB RAM.
A megoldás oda van írva: Csak inicializálás után írjál az USB RAM-ba.

A Ping-Pong módnak egyébként sincs sok értelme. Ha egy buffer nem elég, akkor miért pont kettő igen? ;)
A megoldás egyszerű.
Az adatokat rögtön az USB RAM-ban levő bufferekbe kell írni. Ekkor elmarad az (adat buffer) -> (user buffer) -> (USB buffer) adatmozgatás. Az aktuális buffer címét a TxReport hívása előtt be kell írni a BDnADR(L,H) regiszterekbe. Ezzel kész a sokszoros Ping-Pong mód. A rossz hír: a 64kB/s sebességet ezzel sem lehet túllépni. (HID, interrupt mód, maximális 64B buffer) Persze ekkor at kell írni a fantasztikusan megkomponált drivert. ;)

A C compiler biztosan figyelembe veszi. Inkább az a baj, hogy az inicializálás sokszor a programozó feladata és nem minden eset kompatibilis a lib-ekkel. No, meg néha nem működő ostobaságokat is szokott fordítani. Éppen ezért komolyabb feladatok megoldására nem merném használni.

Jótanács: Vásárlás előtt előszor az errata-t olvasd el, ne az adatlapot! :D