- Motorola Moto G56 - bátyja árnyékában
- Azonnali mobilos kérdések órája
- Samsung Galaxy S23 Ultra - non plus ultra
- Hat év támogatást csomagolt fém házba a OnePlus Nord 4
- Google Pixel topik
- Légies iPhone halvány színei
- iPhone topik
- Fotók, videók mobillal
- Milyen okostelefont vegyek?
- Vékonyabb lett, jobb kamerát kapott, de az akku maradt a régi: itt a Fold7
Új hozzászólás Aktív témák
-
CPT.Pirk
Jómunkásember
válasz
bambano #1046 üzenetére
Az etc-ben nincs alternatives könyvtár. (arch alapú disztrón vagyok most) Viszont csomagkezelőben megnézve, a gawk 3.1.8-3 van telepítve, más awk-s dolog nincs.
Azt az openes sort megnéztem, ott írja is, hogy rossz ioctl eszköz, aztán alatta pár sorral meg már ott van az open után a /dev/ttyUSB0.
Beírtam a kért printf dolgot, itt van a friss pastebin: [link]
-
bambano
titán
válasz
CPT.Pirk #1045 üzenetére
biztos vagy benne, hogy gawk-ot használsz? mit mutat a
ls -l /etc/alternatives/awk
?a második pastebinben van a 82. sor:
open("0", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
erről nem tudom, hogy jó-e, itt szerintem /dev/ttyUSB0-nak kellene lennie, hacsak az nem egy link.A substr-t tartalmazó sor végére írj már egy printf "%d\n",NR; -t, hogy lássuk, jól számolja-e a sorokat.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1044 üzenetére
Kimentettem a lényeget pastebinra: [link]
A read(4, ... sorok ismétlődnek egészen addig, amíg ki nem húzom a csatlakozót, ekkor van a close(4) = 0 sor, az alatta lévők meg az eredmények kiírása. Szóval kb. addig olvas, amíg ki nem húzom a csatlakozót.
Valamint másik probléma, hogy bár 2 helyen is van az "x11" elküldése, de egyiknél sem csinál semmit. Tegnap a bash-ból küldve ugyanezeket, ott simán működött.
Itt van a pastebin eleje is, kicsit zagyva, de hátha találsz valamit benne: [link]
-
CPT.Pirk
Jómunkásember
válasz
bambano #1036 üzenetére
Igen, ez megoldotta az értékeket.
BEGIN { printf ("\x11")>/dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
END {
printf ("\x11") > /dev/ttyUSB0
for(i=1;i<41;i++) if(b[i] > 0) printf ("%d,%d,%f\n",a[i],b[i],20*(log(b[i]/a[i])/log(10.0)));
}A logaritmus számolást kicsit átalakítottam, de még mindig nem jó, pedig szerintem ugyanaz van ott, mint ami korábban egy függvénybe írtam:
function log10(x) {\
return log(x)/log(10.0);\
}\ -
CPT.Pirk
Jómunkásember
válasz
bambano #1034 üzenetére
Jah, b > 0, ez logikus.
Nézd meg az értékeket, a második szám első értéke az első szám utolsó számjegye.
4091,1409,0.462918
4090,0409,1.000000
4090,0409,1.000000
4091,1409,0.462918
4092,2409,0.230099
4091,1409,0.462918
4091,1409,0.462918
4098,8409,-0.312172
4090,0409,1.000000A második oszlopban el van tolódva minden szám egyel jobbra.
cat /dev... -el nézve nincs ilyen gond, ott a második oszlop hibátlan. -
CPT.Pirk
Jómunkásember
válasz
bambano #1032 üzenetére
Pici igazítás után:
BEGIN { printf ("\x11")>/dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,0,4); b[NR]=substr($0,4,4); }
END {
printf ("\x11") > /dev/ttyUSB0
for(i=1;i<41;i++) if(a[i] > 0) printf ("%d,%d,%f\n",a[i],b[i],log(a[i]/b[i])/log(10));
}erre jutottam:
4091,1409,0.462918
4090,408,1.001063
4091,1409,0.462918
4091,1409,0.462918
...
...A kódba megint kellett az a[ i ]> 0 , mert jött megint a 0-val osztás dolog, mint korábban. Az elemek száma a kimeneten stimmel, de amíg nem húzom ki az USB-t a portból, addig nem látok semmit.
Valami még nem stimmel a számolásnál. No meg érdekes, hogy 1-2 számjegy eltűnik, akár csak korábban. -
bambano
titán
válasz
CPT.Pirk #1031 üzenetére
BEGIN { printf ("\x11")>/dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,0,4); b[NR]=substr($0,4,4); }
END {
printf ("\x11')>/dev/ttyUSB0
for(i=1;i<41;i++) printf ("%d,%d,%f\n",a[i],b[i],log(a[i]/b[i])/log(10));
}kb. ennyi. ezt kirakod egy fájlba, majd gawk -f awkfile /dev/ttyUSB0
-
CPT.Pirk
Jómunkásember
válasz
bambano #1029 üzenetére
Igen, kis - nagy betű különbség az megvan. Beírva szóközt, már más a helyzet. Ha a feltétel < a "kacsacsőr", akkor ez a baja: $COUNT: kétértelmű átirányítás.
Ha -lt vagy -ne (gondolom a "kevesebb mint" és a "nem egyenlő" röviden, ilyen példákat találtam neten) van a kacsacsőr helyén, akkor meg végtelen ciklusban kapom az almát.
A másik dologra visszatérve, jelenleg egy while ciklust akartam írni, ami soronként olvassa a soros portot dd, vagy a read paranccsal.
Ma még fájlba írni nem tudtam, a cat, meg mindennek a kimenete egy csomó új állományt hozott létre, a beolvasott 2 szám volt a nevük. Tehát 40924091, és így tovább állományok.
nem, nem olvassa az idők végezetéig a portot, ha a csővezeték következő lépcsője lebontja a csövet. - ezt hogy kell elképzelni?
-
bambano
titán
-
CPT.Pirk
Jómunkásember
Ebben mi a rossz?
i="0"
count="42"
while [$I < $COUNT]
do
echo alma
(( i++ ))
doneA while-os sorrarl van problémája, azt írja: ]: nincs ilyen fájl vagy könyvtár. Akkor is ez van, ha i < 42 van feltételnek megadva, csak akkor ]: helyett 42]: van a szövegben.
-
-
CPT.Pirk
Jómunkásember
válasz
bambano #1022 üzenetére
#!/bin/bash
INPUTFILE="/dev/ttyUSB0"
OUTPUTFILE="/home/patch/awk/output.txt"
rm $OUTPUTFILE
touch $OUTPUTFILE
printf "\x11" > $INPUTFILE
$INPUTFILE | awk '{a = substr($0,0,4);b = substr($0,4,4); if (a > 0) printf "%d,%d,%f",a,b >> $OUTPUTFILE}'
cat $OUTPUTFILE | while read line ; do
echo $line
#itt majd lesz valami awk megint
done
printf "\x13" > /dev/ttyUSB0Na most ezt alkottam, nagyobb részt bash, ahhoz több segítséget találtam. Az a terv, hogy az awk hívásnál menti fájlba az értékeket, majd később a cat-es rész soronkénti visszaolvasással meg egy másik awk rész fog számolni.
Viszont az awk-s sorral baja van: # ./teszt.awk
./teszt.awk: sor: 10: /dev/ttyUSB0: Engedély megtagadvaAmit nem tudom, hogy miért van.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1018 üzenetére
Megvan, printf "\x11" >... küldi el megfelelően.
Valamint implementáltam az xon figyelés dolgot, most csak akkor küld az adó, ha 000010001 beérkezett és csak addig, amíg ez van.
Tudsz valami leírást, linket mutatni, ahol egyértelműen le van írva, hogy ilyesmihez hogyan csináljak ciklust, ciklusokat az awk-ban? Valahogy baromira nem áll kézre ez a nyelv. -
CPT.Pirk
Jómunkásember
válasz
bambano #1013 üzenetére
Megírtam az uart RX részét FPGA-n.
Ha kiküldök így egyszerűen valamit terminálban: printf("2") > /dev/ttyUSB0, akkor frankón a 2 ascii megfelelője, vagyis 00110010 ér oda az fpga-ra.
Viszont a vezérlő karakterek, mint a DC1, DC3 az xon xoff -nál, azt hogyan kell kiküldeni? Azt hiszem a printf az karakterenként szétbontva küldi el.
Mondjuk simán számokkal is helyettesíthetem a vezérlő karikat, de az olyan hülye megoldás lenne. -
bambano
titán
válasz
CPT.Pirk #1012 üzenetére
nem jól érted. az xon-t neked kell kiadni awk-ból, annak érkezésekor kezdhet el adni az fpga, és adhat mindaddig, amíg nem kap xoff-ot. tehát a gép felől az fpga felé megy az xonxoff és az fpga felől a gép felé menő forgalmat akasztja meg.
az rts/cts szerintem nem hardveres, de a linux driver kezeli. [link]
-
CPT.Pirk
Jómunkásember
válasz
bambano #1011 üzenetére
Izé, de akkor jól értem az xon xoff dolgot? Egyszerűen csak a DC1 / DC3 ascii vezérlő karaktereket illesszem be az adásom elejére és végére és ezekre figyeljek az awk-ban?
Amúgy a cts,rts kezelését nem a HW végzi el? Mivel az fpga figyeli a dolgokat, egy cts kérés után csak akkor kezd küldeni, ha (és ameddig) az rts szignál '1'.
Ez a dolog nekem csak annyi lenne, hogy az rts vezeték állapotváltozását fel lehetne használnom a vizsgáló szinuszjel frekvenciájának arrébb léptetésére, amit írtam neked. Most úgy van, hogy akkor léptet, mikor az AD-t követő latch betöltötte a két mért értéket, és kész küldeni őket az uart modulnak.(ez a latch csak arra kell, hogy mindkét AD-ről szinkronban kerüljenek az adatok továbbításra, nélküle lenne 5-10 órajel késés a második értéknél az elsőhöz képest)
-
CPT.Pirk
Jómunkásember
-
CPT.Pirk
Jómunkásember
válasz
bambano #1007 üzenetére
Próbálom összehozni a dolgokat kicsit, de a log. végeredménye elég random.
function log10(x) {\
return log(x)/log(10.0);\
}\
OUTPUTFILE="/home/patch/awk/output.txt"
{a=substr($0,0,4);
b=substr($0,4,4);
if (a > b)
printf("%4.2f\n", 20 * log10(b/a)); }Arra gondoltam, hogy bele kellene foglalni egy ciklusba ezt az egészet, már ha majd működik, mert akkor megoldanám fpga-ban, hogy csak akkor küldjön újabb 2 értéket, mikor ez már fel lett folgozva. Meg lehet azt csinálni, hogy amikor az a és a b be van olvasva, akkor "elengedje" a soros portot? Mert azt az eseményt tudom figyelni fpga-ból a handshaking jeleken keresztül.
-
bambano
titán
válasz
CPT.Pirk #1006 üzenetére
valahol kevered: a és $a is előfordul.
lehet, hogy érdemes lenne eredeti formája szerint bezárójelezni a printf-et:
printf("%d,%d,%f",... ) >>$outputfileigen, ha írsz valamit a kimeneti fájlba >$outputfile alakban, az csonkolni fogja.
viszont ha további feldolgozást fogsz csinálni, akkor a 10-es logaritmust lehet, nem awk-ból kellene csinálnod, nehogy lekésse a beolvasást az awk.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1005 üzenetére
Beépítve a számolós sorba, sikerült fájlba írnom. Mondjuk csak a két érték ment be, a művelet eredménye nem.
function log10(x) {\
return log(x)/log(10.0);\
}\
OUTPUTFILE="/home/patch/awk/output.txt"
{a=substr($0,0,4); b=substr($0,4,4); if (a > 0) printf "%d,%d,%f\n",a,b,20*log10(b/a) $a >> $OUTPUTFILE; }Mára szerintem ennyi, holnap megpróbálok összehozni egy ciklust ehhez. Van valami opció a kimenet tároló fájl felülírására, vagy töröljem minden alkalommal a program elején és csináljak újat?
-
CPT.Pirk
Jómunkásember
válasz
bambano #1003 üzenetére
Jah oké.
A fájlon belül próbáltam ugyanezt, de ott meg ha van pont a fájlnévben, akkor syntax errort dob. Mikor leírtam külön az output fájlt egy változóba, majd $output néven próbáltam használni, az sem volt jó. Valamint le kellene korlátozni a kimenetet.
Olyanra gondoltam, hogy kellene egy fix "számú" ciklus, amiben csak 2 értéket olvas be, oszt, logaritmust számol, majd pedig kiírja az eredményeket és ezt kezdi előről, a megadott elemszámig. Egy egyszerű for ciklus vagy while megteszi. (a log mellé majd egy freki értéket is oda szeretnék írni, de ez egyszerű lesz, csak a ciklus száma alapján fog oda kerülni - megnézem majd, hogy ez a 2 oszlopos értéksor megoldás megfelel-e a gnuplot elvárásainak)
A lemaradó nullákat nem tudom hogyan vizsgáljam, a cat-al nézve mindig minden érték jó. Ha az od -An -t x1 -el nézem, akkor is. Pont az jön be, amit elküd az fpga-m. (csomószor újranéztem ezekkel, nem volt hiba egyszer sem)
-
CPT.Pirk
Jómunkásember
válasz
bambano #1001 üzenetére
Utánanézek majd, de nem egyszerű megtalálni a problémát, mert nem jelentkezik mindig. Amikor igen, akkor 1-2 számjeggyel kevesebb a 2. szám, vagyis 1234 helyett 234 vagy 34 lesz. Közben az 1. szám meg jó, amit nem teljesen értek, mert 1 összefüggő kód a teljes uart kommunikáció fpga-n.
A kimenet fájlba küldésére van valami ötleted?
Új hozzászólás Aktív témák
Hirdetés
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Motorola Moto G56 - bátyja árnyékában
- Xbox Series X|S
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Mesterséges intelligencia topik
- Milyen alaplapot vegyek?
- Azonnali mobilos kérdések órája
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Világ Ninjái és Kódfejtői, egyesüljetek!
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- További aktív témák...
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Vírusirtó, Antivirus, VPN kulcsok
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Telefon felvásárlás!! Huawei P20 Lite/Huawei P20/Huawei P30 Lite/Huawei P30/Huawei P30 Pro
- AKCÓÓÓ!!! Panasonic CF-XZ6 AIO all-in-one laptop tablet 2k touch i5-7300u speciális ütésálló
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- Újszerű Asus ExpertBook B1 B1500 - 15.6" FullHD IPS - i5-1235U - 16GB - 512GB SSD - Win11 - Garancia
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest