Fórum témák

» Több friss téma
Fórum » PIC programozás assemblyben
 
Témaindító: sonajkniz, idő: Máj 30, 2015
Témakörök:
Lapozás: OK   26 / 32
(#) majkimester válasza nedudgi hozzászólására (») Márc 11, 2022 / 1
 
2n byte legyen (16, 32, 64 ... stb.)
(#) pipi válasza nedudgi hozzászólására (») Márc 11, 2022 /
 
Nyilván ahány éves a kapitány.
(#) sonajkniz válasza nedudgi hozzászólására (») Márc 11, 2022 / 1
 
Idézet:
„egy FiFo puffert kell deklarálni”

Kicsit slampos vagy! Az "egy" és a "kell" véletlenül magyarul maradt.
Nos, ha engem kérdezel, asm-ben nincs ilyen. Vagy legalábbis én nem tudok róla.
Mivel asm.-ben (különösen a 18-as szériától fölfelé) direkt, és indirekt (ha már szereted az idegen kifejezéseket) úton elérhető és címezhető a RAM, így oda és akkora adatálományt pakolok ahová és amekkorát akarok. (Na jó, azért a RAM mérete befolyásoló tényező.)
Elérhetek ramokat közvetlenül, elő és utóinkrementálással, elő és utó dekrementálással. (hú de csúnya idegen szó) Ráadásul többszörösen is, azaz ugyanazt a területet egyidejűleg (ne köss bele, tudom, hogy egyszerre csak egy művelet lehetséges) sorban írhatom és olvashatom anélkül, hogy ez bekavarna.
Amúgy meg, hogy mekkora? Mindíg az adott feladat határozza meg.
Persze az is lehet, hogy nem értem a kérdést, és hülyeségeket írogatok.
Ez esetben röhögj egy jót!
(#) cua válasza nedudgi hozzászólására (») Márc 11, 2022 /
 
Irtam mar par tucat soros porton dolgozo programot de en nem tudok egyetlen optimalis meretet vagy kepletet sem.
Altalanossagban akkor jo, ha a leheto legkisebb mennyisegu megszakitassal tudom kezelni az adatfolyamot. Ez pedig ugye totalisan feladat- es hardwarefuggo.
Szoval az egyszavas valaszom: ¯\_(ツ)_/¯
(#) nedudgi hozzászólása Márc 12, 2022 /
 
Mindössze azt szerettem volna megtudni, hogy ki az, aki 2n pufferméretet definiálna - szerintem ez jelzi, hogy az illető kolléga "bináris gondolkodású".
Elnézést kérek, ha feleslegesen, túlkomplikáltam a kérdést.
A hozzászólás módosítva: Márc 12, 2022
(#) nedudgi válasza sonajkniz hozzászólására (») Márc 12, 2022 /
 
Nem röhögök, mert igazad is van.
A kérdést szándékosan úgy fogalmaztam meg, hogy gyakorló programozóknak szóljon.
A FiFo, és a deklaráció helyett nem találtam frappáns magyar kifejezést, de örömmel fogadok minden javaslatot. Ezen ne vesszünk össze, ha legközelebb feléd járok, vendégem vagy egy sörre.
(#) nedudgi válasza pipi hozzászólására (») Márc 12, 2022 /
 
Nem a kapitány kora, hanem a processzor szómérete a döntő.
(#) cua válasza nedudgi hozzászólására (») Márc 12, 2022 / 1
 
Azt hittem valami furfangosabb . Bevallom erre nem gondoltam mert ez nekem eleg alap.
Azt hiszem pont iden 30 eve, hogy megirtam az elso gepi kodu programomat, hexa bevitellel egy intel sdk-en, es epp most is egy pdp-11/70-en mokolok, meg mindig assembly-ben es erosen fontolgatom, hogy heggesztek ra egy C forditot is (csak basic es fortran van).
Sajnalatos modon en a mai napig - teljesen feleslegesen - a ketto hatvanyait hasznalom, akar java vagy epp python/django kornyezetben is.
Mar tobszor megszoltak (jogosan), hogy semmi ertelme a 16/32/64 vagy epp 128 karakteres mezoknek (SQL)
En nem tekintem hibanak, tehat tovabbra is hasznalom.
(#) nedudgi válasza Bakman hozzászólására (») Márc 12, 2022 /
 
Én nem guglizok ebben a témában. közel ötven éves tapasztalat/gyakorlat alapján szólok hozzá. Arra szerettem volna rámutatni, hogy annak ellenére, hogy egy algoritmus leprogramozása magas szintű nyelven egyszerűbb, a gépi kód ismerete alap.
(#) nedudgi válasza cua hozzászólására (») Márc 12, 2022 /
 

Jól teszed, neked van igazad.
A "bináris gondolkodás" végét a merevlemezek méretének meghatározása indította el. A markecing, és a hétköznapi emberek dilemmája, mekkora is az a vincseszter, mennyi RAM van abban a gépben. Ennek eredménye kiB, miB, satöbbi szörnyűségek.
(#) pipi válasza nedudgi hozzászólására (») Márc 12, 2022 /
 
Ez csak akkor játszik normálisan, ha a puffer kezdetét is "olyan" címre teszed, különben tök mindegy, semmit nem spórol sehol.
(#) oszitrek hozzászólása Márc 14, 2022 /
 
Szervusztok,
Látom ti rendesen értitek a dolgokat, ezért gondoltam jelzem nektek, hogy porosodik a szekrényemben egy MPLAB PM3 minden tartozékával. Érdekel valakit?
(#) benjami válasza nedudgi hozzászólására (») Márc 14, 2022 /
 
Ez ugyan se nem PIC. se nem ASM, de teljesül a feltételed.
(#) moltam hozzászólása Márc 30, 2022 /
 
Helo.
Kikészít egy érdekes hiba. 16F1615 ösön akarom használni az UART tx részét megszakítással, de valamiért nem igazán sikerül. Biztos én rontok el valamit, ez az első assemblyben írt valamim amit már toldozgatok egy ideje. A gond az FSR0 regiszterrel van. Nem piszkálom sehol máshol, csak a megszakításban szeretném növelni hogy végigmenjen a bufferemen, de valami mindig visszarakja egy fix értékre, az első két bájt kimegy utána csak a másodikat ismételgeti. 1,2,3,4,5 helyett 1,2,2,2,2. Mit rontok el? Ez a main végén van:
  1. MOVF TXCOUNT,f
  2.         BTFSS ZERO      ;if txcount != 0 goto main
  3.         BRA main
  4.         ;MOVF RPM,w
  5.         MOVLW 1
  6.         MOVWF TXBUFFER
  7.         ;MOVF RPM+1
  8.         MOVLW 2
  9.         MOVWF TXBUFFER+1
  10.         ;MOVF TBLL,w
  11.         MOVLW 3
  12.         MOVWF TXBUFFER+2
  13.         MOVLW 4
  14.         MOVWF TXBUFFER+3
  15.         MOVLW 5
  16.         MOVWF TXBUFFER+4
  17.        
  18.         MOVLW 0X33;LOW TXBUFFER
  19.         MOVWF FSR0L
  20.         MOVLW 0X00;HIGH TXBUFFER
  21.         MOVWF FSR0H
  22.         MOVLW TX_BUFFER_SIZE
  23.         MOVWF TXCOUNT
  24.         MOVIW 0[FSR0] ; FSR0++
  25.         INCF FSR0L
  26.         BANKSEL TX1REG
  27.         MOVWF TX1REG
  28.         BANKSEL PIE1
  29.         BSF TXIE

Ez pedig a megszakításban:
  1. txcomplete:
  2.    
  3.     BANKSEL TXCOUNT
  4.     DECF TXCOUNT
  5.     BANKSEL PIE1
  6.     BTFSC ZERO
  7.     BCF TXIE
  8.     MOVIW 0[FSR0]
  9.     INCF FSR0L
  10.     BANKSEL TX1REG
  11.     MOVWF TX1REG
(#) benjami válasza moltam hozzászólására (») Márc 30, 2022 / 1
 
Az incf utasítás két paraméteres. A második paraméterben mondod meg, hogy a megnövelt érték W regiszterbe vagy a memóriába íródjon vissza, és a W az alapértelmezett. Próbáld ki így:
  1. INCF  FSR0L, f
(#) moltam válasza benjami hozzászólására (») Márc 30, 2022 /
 
Sajnos ugyanaz van így is, az fsr0 beragad 0x34 en, illetve a kezdőcímet és plusz egyet küld ki, utána csak a kettes ismétlődik háromszor. Valamiért sem a külön incf sem a moviw fsr0++ nem azt csinálja amit szeretnék. Hamarabb futna le az újabb main loop minthogy kiküldené az első byteot aztán újra lefut aminek nem kéne csak ha a buffer végére ért? De már az első alkalommal nullától különböző a txcount... Most ilyesmire gyanakszom bár lehet tévúton járok, megnézem mit tudok tenni...
A hozzászólás módosítva: Márc 30, 2022
(#) benjami válasza moltam hozzászólására (») Márc 30, 2022 /
 
A DECF TXCOUNT esetén is ugyanaz a helyzet, oda is kellene a " ,f" kiegészítés. Amúgy meg nézd meg szimulátorban mit csinál rosszul.
(#) moltam válasza benjami hozzászólására (») Márc 30, 2022 /
 
Kipróbálom, de debug módban a txcount szépen csökken, csak az fsr0 nem akarja amit szeretnék. Sőt, bocs most nézem azt is átírtam de mindhiába.
A hozzászólás módosítva: Márc 30, 2022
(#) benjami válasza moltam hozzászólására (») Márc 30, 2022 /
 
A MOVIW utasításnak vannak olyan változatai, amik automatikusan csökkentik (vagy növelik) az FSR regiszter értékét. Miért nem azt használod?
(#) moltam válasza benjami hozzászólására (») Márc 30, 2022 /
 
Azt szerettem volna alapból, a moviw fsr0++. Csak nem működik valamiért. Mintahogy a külön incf sem.
(#) Hp41C válasza moltam hozzászólására (») Márc 30, 2022 / 1
 
Mekkora a TX_BUFFER_SIZE értéke?
Az indexnek -32 és +31 között kell lennie.
A hozzászólás módosítva: Márc 30, 2022
(#) moltam válasza Hp41C hozzászólására (») Márc 30, 2022 /
 
5. A buffer a bank0 ban van.
(#) ktamas66 válasza moltam hozzászólására (») Márc 30, 2022 / 1
 
Próbáld így: ADDFSR FSR0, 1. A cím betöltésnél a LOW/HIGH nem biztos hogy jó, az inkább a program memória betöltésre való.
Inkább:
MOVLW 0X33
MOVWF FSR0L
CLRF FSR0H
(#) moltam válasza ktamas66 hozzászólására (») Márc 31, 2022 /
 
Így sem működik. Egyszerűen nem tudom növelni az fsr0 regisztert a megszakításban, semelyik módszerrel sem. Próbából csináltam külön flaget, azt beállítom, a főprogram pedig hozzáad egyet az fsr0 hoz. Ellenőrzöm hogy a txcount nulla e, ha nem nulla ellenőrzöm hogy a megszakítás állította e a flaget. Ha igen akkor törlöm és növelem fsr0 regisztert. Így meg az elsőt kétszer küldte. 1,1,3,4,5. Érdekes hogy nem 1,1,2,3,4. Az átvitel indításából kivettem az fsr növelést, csak akkor növel a főprogram ha a txif megszakítás lefutott. De a txif megszakítás már rakja a következő bájtot a tx regiszterbe, ha nem növelek az első után, akkor hogy a francba működhet mégis? Valami nagyon nem jó Szerk.: Erre elvileg megvan a válasz, az uart megszakításhoz nem szükséges semmit elsőként a tx regiszterbe írni, csak engedélyezni kell és ha üres a tx fut is le. De így sem tudok fsr t növelni megszakításból.
A hozzászólás módosítva: Márc 31, 2022
(#) nedudgi válasza moltam hozzászólására (») Márc 31, 2022 / 1
 
A teljes megszakítást kellene látni, ellenőrizni. (Regiszterek mentése/visszaállítása).
(#) moltam válasza nedudgi hozzászólására (») Márc 31, 2022 /
 
Ez lesz a baj! Ennél már nem kell elvileg menteni, megcsinálja magának. És persze hogy az fsr t is menti, most láttam az adatlapon. A shadow regisztert kell növelnem. Köszönöm mindenkinek a segítséget, elvileg jó lesz.
(#) nemgyuri hozzászólása Jún 16, 2022 /
 
Sziasztok!
Elvi vagy módszer megoldást keresek. Két különböző eszközről soros porton kell fogadnom adatokat és ezeket továbbítani ugyancsak soros porton. (kicsit átalakítva) Problémám a következő: A két eszköz bármikor küldhet adatokat, (Adatvesztést szeretném elkerülni!) Amikor én (PIC) küld adatokat akkor is jöhet bármikor új adat.
Ezeknek a feldolgozási metódusa érdekelne, hogy ne legyenek ütközések. Minden ötletet szívesen fogadok.
(#) nedudgi válasza nemgyuri hozzászólására (») Jún 16, 2022 /
 
Ehhez ugye három hardver soros portod van?
A hozzászólás módosítva: Jún 16, 2022
(#) nemgyuri válasza nedudgi hozzászólására (») Jún 16, 2022 /
 
Igen 2 input, 1 output
(#) nedudgi válasza nemgyuri hozzászólására (») Jún 16, 2022 /
 
Akkor sima megszakításban lekezelt vétel, és adás: FIFO a megoldás.
Következő: »»   26 / 32
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