Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Sziasztok!
16 bites PIC -re írt programomban szemaforokat használok hogy a megszakítások és a főprogram kommunikálni tudjon egymással. Ezeket az 1 bites szemaforokat -mert 8 biteseknél és assembly-ben megszoktam- struct-ba szerveztem, tehát -jelen esetben- 16 szemafor van egy Word -ben. Amikor egy ilyen szemafort beállítok ( xxx.yyy = 1; ), az XC16 fordító a teljes word-öt kimásolja W0 -ba, ott módosítja (BSET ..), majd visszamásolja a helyére. A problémám az, hogy ez a portoknál is ismert RMW problémához hasonló dolgot okozhat. (Ha ez a 3 utasítás alatt jön egy megszakítás ami ugyan ebben a struktúrában egy másik bitet módosít, akkor hiba lesz) Persze külön tudom szedni a szemaforokat, hogy önálló byte-ok vagy word-ök legyenek, van elég hely, de kíváncsi lennék hogy mások hogy szokták ezt megoldani? Valamint az is érdekelne, hogy SFR esetén miért tudja a fordító normálisan megcsinálni, egyetlen assembly utasítással a dolgot, és itt miért nem? (azon kívül, hogy vegyem meg a magasabb optimalizációs szinteket)
Jó a kérdés!
![]() Csak egy ötlet: a bit állítását kiteszed makróba, vagy függvénybe, ahol is előtte disi utasítással tiltod a megszakításokat, majd módosítás után engedélyezed. Ekkor mindegy, hogy mennyire tré kódon keresztül végzi el a fordító a feladatot, másik megszakítás nem fog belekavarni... Ja és ne feledkezz el volatile -ként deklarálni a struktúrát! A hozzászólás módosítva: Márc 20, 2018
Köszönöm, igen, ez is egy lehetőség, bár akkor már gyorsabb ha egy assembly sort teszek ki makróba, BSET xxx,#y. Szerintem fölösleges megszakítást tiltani, mert egyetlen utasítással elvégezhető lenne a művelet. Csak ezek a megoldások nekem olyan erőltetettnek tűnnek, amikor ezt a fordítónak simán magától tudnia illene.
Ha véletlenül nem nézek rá a disassemby -re, jól megszívatott volna. Kereshettem volna a random, nem egyértelműen reprodukálható hibákat hetekig... Szerk.: Igen, volatile a struct. A hozzászólás módosítva: Márc 20, 2018
Még egy olyan ötletem lenne, hogy ha ugyanolyan módon definiálod, mint az SFR-eket a fordító akkor nem lesz jó? Pl:
Nem tudom az sfr attribútum mit csinál, de egy próbát megér.
Nekem a "kedvencem" a kb 11-12 utasításra leforduló bitállítás, 0 optimalizálási szintnél! )) Egy vicc...!
Az a baj, ha rá is veszed valami trükkös megszólítással, hogy 1 utasításba fordítsa le neked, egyáltalán nem biztos, hogy ez később is úgy marad! és ennél nagyobb szívás nem is kell, mint ha útközben megváltozik ez... Az, amit ajánlottam, nem függ semmitől sem, mindig garantáltan fog működni.
Az __attribute__((__sfr__)) -t már megpróbáltam oda biggyeszteni, de lehülyézett hogy az nem is sfr...
![]()
Igen, valami olyasmi lesz, csak kíváncsi voltam mások hogy csináljak.
Át kell váltani ARM-re. Az tudja azt, hogy a RAM és a periféria minden egyes bitjét el lehet érni külön-külön memória címen. Azonkívül az ingyenes C fordító is normálisan használható, és még optimalizálni is tud (GCC).
A hozzászólás módosítva: Márc 20, 2018
Idézet: Ez nem RMW, hanem az úgynevezett atomi vagy nem atomi művelet problematikája. 9-10 éve a Microchip fórumán RTOS kapcsán jött ez elő, s abból tanultam meg egy érdekes gyógymódot a problémára:„Ha ez a 3 utasítás alatt jön egy megszakítás ami ugyan ebben a struktúrában egy másik bitet módosít, akkor hiba lesz”
ahol reg a módosítandó regiszter neve val a beírandó bit/bitcsoport értéke (helyiértékre tolva) mask a módosítandó bitet/bitcsoportot kijelölő maszk A dolog nyilván csak addig működőképes, amíg az egymással konkuráló folyamatok nem ugyanazt a bitet vagy bitcsoportot módosítják. Kiegészítés: Közben megtaláltam az eredeti, 2009-es beírásomat a témával kapcsolatban. Abban linkelem a releváns Microchip fórumtémát is. A hozzászólás módosítva: Márc 20, 2018
Nem teljesen ide tartozik. De van egy gép amiről megy egy 4k-s tv. Ugyanezen a gépen ugyanez a videókártya dvi portja el van vezetve egy usb3.0 hub-hoz a gép egyik 3.0 -ás USB portja egy 24 colos monitorhoz. Az aster nevű prograomt használom erre. A billentyűzet meg az egér szétosztása sikeres volt. Én a 24 colos monitoron szeretnék fejleszteni az Mplab-ban. De sajnos se a Pickit2 se a Pickit3 ebben a felhasználói fiókban nem megy, mert az első fiók ami " foglakozik vele" az a 4k-s tv reszortja. Hogyan lehetne usb portot kifejezetten egy adott felhasználói fiókhoz rendelni?? Hogy innen legyen alapértelmezett az az egy darab usb 3.0 ás port, amit itt egy hubbal elosztanék a személyes usb -s perifériáimank ( USB oszcilloszkóp , Pickit3, 4, 2, )
Üdv!
A Mongoose-t használta már valaki PIC-en? Egy DDNS updatert szeretnék PIC-en üzemeltetni, és ezt találtam hozzá, mint lehetséges megoldás.
Ez sem volt kutya, még ezen kezdtem.
Én meg R10-en!
![]() A "mi" gépünk még nem tudta mágnesszalagról, csak lyukszalagról olvasni a teszt programokat. Sorjában felmásoltam őket mágnesszalagra, és "írtam" egy boot programot a pult kulcsain, amivel betölthettük mágnesszalagról a sorszámával megadott kívánt tesztprogramot. A napi feldolgozó programokat meg assemblyben írtuk. A hozzászólás módosítva: Márc 26, 2018
A microchipes MAL-ban is van dyndns lehetőség,
így néz ki.
Tényleg. Ennyire még nem néztem bele. Köszi.
szerk. Mégse. Most jut eszembe, miért nem ezt néztem, hanem a Mongoose-t. A board egy router mögött lesz ami nem kapcsolható bridge móda, tehát a board nem látja a külső IP-t, így nem fog rajta a DynDNS működni, tehát kell egy eszköz egy oprendszerrel amin fut egy updater script. A hozzászólás módosítva: Márc 26, 2018
Szerintem a boardnak nem kell "látnia" a külső ip-t, hanem lekérdezi, és azt fogja elküldeni a dyndns-nek...
Amit linkeltem az is router mögött van... 192.168.0.51 (dynamic variable fül alatt nézhető meg). Csinál a mikrogép valami ilyesmit, pl PC-n böngészőből ellenőrizheted: Bővebben: Link és megkapja az ipcímet
Ezeket értem, de ha ez ilyen egyszerű akkor az Asus routeremen miért nem megy a DDNS a másik mögött? Bár lehet az más elven működik. Mindegy, beletúrok a MAL-ba megnézem az mit csinál. Köszi az infot.
Szerintem a ddns működik több router mögül indítva is, de nyilván az első router látszik az internet felől, vagyis az összes routerban befelé meg kell csinálni a kivánt portforwardot a következő routerra, az utolsó routereren meg a cuccod címére, ha valamilyen szervert üzemeltetsz...
Esetleg mindegyiken DMZ-be teszed akövetkező eszközt...
Elvileg nem kell az sem. Ha belülről valami kommunikál, annak a router portot nyit, és X ideig (120..300 sec) jegyzi a port forwardingot. Ha bármi forgalom van a porton (pld tcp keep alive), folyamatosan frissíti.
Hát pedig ástam a témát eleget és nem megy a DDNS másik router mögött, csak ha az a másik vagyis a külső bridge módban megy. De ez itt már kezd off lenni. Mindenesetre megnézem a MAL-t ha lesz időm, hogy az hogy működik.
A hozzászólás módosítva: Márc 28, 2018
Sziasztok!
PIC16F18857-hez szeretnék külső kvarcot csatlakoztatni, viszont az adatlapban nincs információ, hogy ez maximum mekkora frekvenciájú lehet. Van valakinek valami információja erről? A válaszokat előre is köszönöm!
Adatlap 2. oldal:
Idézet: „External Oscillator Block with: - Three crystal/resonator modes up to 20 MHz”
PLL nélkül max. 20MHz, PLL -lel max. 8MHz.
A rejtvény csak az, hogy ugyan mennyit számíthat a DDNS-nek, hogy a külső routered bridge üzemben van-e, vagy sem? És ha történetesen semmit sem tud róla (mert nem is tudhat róla semmit), akkor vajon melyik routered lehet az a kukás vacak, amelyiket én a helyedben még csukot ajtón keresztül is kihajítanám a fenébe?
A Dipl munkám én is abban írtam lyukkártyára, SZM52- tesztrendszer. Nem hiszem, hogy sok ember tudja miről van szó, a vizsgabizottság sem, de lefutott, így 5-ös lett.
![]() ![]() ![]()
A mai javításom, küldök egy sört, annak, aki megmondja mi ez! A uc ott figyel a cimke alatt.
![]() A hozzászólás módosítva: Márc 28, 2018
A relé még könnyen azonosítható, de a másik fekete dobozka mit rejt? Valami trafó van benne, vagy mégis mi?
A külsőt nem tudom kidobni, mert azt a telekom adta, (modem-router). Megy rajta a DDNS, de azt eddig a mögötte levő asus szolgáltatta, az asus ingyenes szolgáltatásán keresztül, a telekomoson, meg be kellett állítanom valami mást és nem tudom, hogy az fogja e frissíteni ha változik az IP.
És nem tudom mit számít, de számít az, hogy brdige módban megy-e vagy nem. A hozzászólás módosítva: Márc 29, 2018
H-bridge 4 FET, motorvezérlő. Bonyolultabb az öndiagnosztika, mint a PWM szabályozás....
|
Bejelentkezés
Hirdetés |