Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1288 / 1318
(#) AZoli hozzászólása Márc 20, 2018 /
 
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)
(#) sdrlab válasza AZoli hozzászólására (») Márc 20, 2018 /
 
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
(#) benjami válasza AZoli hozzászólására (») Márc 20, 2018 /
 
volatile az a 16 bites változó?
(#) AZoli válasza sdrlab hozzászólására (») 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
(#) benjami válasza AZoli hozzászólására (») 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:
  1. typedef struct tagBITS {
  2.   unsigned A0:1;
  3.   unsigned A1:1;
  4.   unsigned A2:1;
  5.   unsigned A3:1;
  6.   unsigned A4:1;
  7. } BITS;
  8. volatile BITS Abits __attribute__((__sfr__));

Nem tudom az sfr attribútum mit csinál, de egy próbát megér.
(#) sdrlab válasza AZoli hozzászólására (») Márc 20, 2018 /
 
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.
(#) AZoli válasza benjami hozzászólására (») Márc 20, 2018 /
 
Az __attribute__((__sfr__)) -t már megpróbáltam oda biggyeszteni, de lehülyézett hogy az nem is sfr... Ezt bezzeg tudja...
(#) AZoli válasza sdrlab hozzászólására (») Márc 20, 2018 /
 
Igen, valami olyasmi lesz, csak kíváncsi voltam mások hogy csináljak.
(#) benjami válasza AZoli hozzászólására (») Márc 20, 2018 1 /
 
Á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
(#) icserny válasza AZoli hozzászólására (») Márc 20, 2018 /
 
Idézet:
„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”
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:

  1. #define ChangeBits(reg,val,mask) reg ^= ((reg^val) & mask)

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
(#) n_yálastrubadúr hozzászólása Márc 24, 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, )
(#) usane hozzászólása Márc 26, 2018 /
 
Ü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.
(#) Chipmunk1960 válasza icserny hozzászólására (») Márc 26, 2018 /
 
Ez sem volt kutya, még ezen kezdtem.

R1010.jpg
    
(#) tomi52 válasza Chipmunk1960 hozzászólására (») Márc 26, 2018 /
 
É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
(#) pipi válasza usane hozzászólására (») Márc 26, 2018 /
 
A microchipes MAL-ban is van dyndns lehetőség,
így néz ki.
(#) usane válasza pipi hozzászólására (») Márc 26, 2018 /
 
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
(#) pipi válasza usane hozzászólására (») 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
(#) usane válasza pipi hozzászólására (») Márc 27, 2018 /
 
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.
(#) pipi válasza usane hozzászólására (») Márc 27, 2018 /
 
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...
(#) pajti2 válasza pipi hozzászólására (») Márc 28, 2018 /
 
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.
(#) usane válasza pipi hozzászólására (») Márc 28, 2018 /
 
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
(#) marcellus96 hozzászólása 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!
(#) icserny válasza marcellus96 hozzászólására (») Márc 28, 2018 / 1
 
Adatlap 2. oldal:
Idézet:
„External Oscillator Block with:
- Three crystal/resonator modes up to 20 MHz
(#) Hp41C válasza marcellus96 hozzászólására (») Márc 28, 2018 / 1
 
PLL nélkül max. 20MHz, PLL -lel max. 8MHz.
(#) pajti2 válasza usane hozzászólására (») Márc 28, 2018 /
 
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?
(#) Chipmunk1960 válasza tomi52 hozzászólására (») Márc 28, 2018 /
 
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. De a csavarhúzót jobban szerettem, mint az íróasztalt, így alig programoztam azóta. Most Arduino-val próbálkozok, de úgy érzem, egyre életlenebb a fejsze! Pedig, most van rá csak igazán igény, mert már mindent ucontrollel vezérel... Remélem a két fiam sikerült megfertőznöm, s viszik tovább az "ipart" .
(#) Chipmunk1960 hozzászólása Márc 28, 2018 /
 
A mai javításom, küldök egy sört, annak, aki megmondja mi ez! A uc ott figyel a cimke alatt. Új ára 130$ körül van...
A hozzászólás módosítva: Márc 28, 2018
(#) pajti2 válasza Chipmunk1960 hozzászólására (») Márc 29, 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?
(#) usane válasza pajti2 hozzászólására (») Márc 29, 2018 /
 
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
(#) Chipmunk1960 válasza pajti2 hozzászólására (») Márc 29, 2018 /
 
H-bridge 4 FET, motorvezérlő. Bonyolultabb az öndiagnosztika, mint a PWM szabályozás....
Következő: »»   1288 / 1318
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem