- Vivo X200 Pro - a kétszázát!
- Mobil flották
- Xiaomi 11 Lite 5G NE (lisa)
- Azonnali mobilos kérdések órája
- Android alkalmazások - szoftver kibeszélő topik
- Redmi Note 10S - egy a sok közül
- Google Pixel topik
- iPhone topik
- Fotók, videók mobillal
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
Ú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
- Napelem
- Kormányok / autós szimulátorok topikja
- Facebook és Messenger
- Call of Duty: Black Ops 6
- Luck Dragon: Asszociációs játék. :)
- Lalikiraly: Astra kalandok @Harmadik rész
- Milyen nyomtatót vegyek?
- Milyen billentyűzetet vegyek?
- (nem csak) AMD FX / Ryzen tulajok OFF topikja
- LEGO klub
- További aktív témák...
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Eladó Steam kulcsok kedvező áron!
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- AKCIÓ! HP Elitedesk 800 G1 USDT mini asztali számítógép - i7 4770S 16GB RAM 128GB SSD Intel HD
- Xiaomi Redmi Note 14 Pro 256GB Kártyafüggetlen 1Év Garanciával
- ÁRGARANCIA!Épített KomPhone i5 13400F 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- Bitcoin miner Bitmain Antminer S9 S9I 13.5 - 14 Th 1250W eladó
- Bomba ár! Lenovo ThinkPad X260 - i5-6G I 8GB I 256GB SSD I 12,5" HD I HDMI I CAM I W10 I Gari!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest