- Motorola Edge 50 Neo - az egyensúly gyengesége
- Honor 400 Pro - gép a képben
- Samsung Galaxy Watch7 - kötelező kör
- Milyen okostelefont vegyek?
- iPhone topik
- Motorola Razr 60 Ultra - ez a kagyló könnyen megfő
- Netfone
- Karaktere biztos lesz az első Nothing fejhallgatónak
- Apple Watch
- Samsung Galaxy S20 és S20+ duplateszt
Új hozzászólás Aktív témák
-
CPT.Pirk
Jómunkásember
válasz
CPT.Pirk #2321 üzenetére
Ez a pipe dolog tényleg hasznos.
Most itt tartok:
for f in $files
do
if [[ $f = *"log."* ]]; then
#bizonyos fájlokat eleve nem nézünk meg
if [[ $f != *".gz"* ]] && [[ $f != *".nmbd"* ]] && [[ $f != *".smbd"* ]]; then
echo "Processing $f..."
egrep "$grepcmd1" "$grepcmd2" "$f" | awk '!/--/' | \
sed -e 's/smbd.*e)//' -e 's/read.*)//' -e 's/, .* //' -e 's/, .* //' -e 's/^.//' | \
perl -ne 'print unless $seen{$_}++' | \
egrep "$grepcmd1" "$grepcmd3" | \
awk '!/--/' > $tempfile
paste -d ' ' - - < $tempfile > $tempfile2 #minden második (elsővel kezdve) sor végéről törli az újsor karaktert, hogy az idő a névvel egy sorba ker$
cat $tempfile2 > ${f##*/}.txt
else
echo "Excludeing $f..."
fi
else
echo "Exludeing $f..."
fi
done
rm $tempfile
rm $tempfile2Jelentősen gyorsabb, de arra még nem jöttem rá, hogy a paste-es sort hogyan kellene beépíteni a pipe folyamatba.
Ennek mintájára próbáltam:
kill $(ps aux | grep 'ython csp_build.py' | awk '{print $2}')
ahol a $-os részre ment az, amit összepipeoltam, de valami nem sikerült és megállt a szkript. -
CPT.Pirk
Jómunkásember
Igazából volt mindössze fél órám, hogy gyorsan csináljak valamit különösebb bash előképzettség nélkül, ez lett a végeredménye.
Holnap ránézek és megpróbálom megfaragni kicsit.
-
CPT.Pirk
Jómunkásember
Összeszedtem minden tudásomat (ami nem sok van
) és tegnap írtam egy shell scriptet, ami a samba ilyen, elég bőséges logjaiból:
...
[2018/06/22 14:42:18.106095, 2] smbd/close.c:696(close_normal_file)
CsLev closed file fileserver/__MUNKAK/CSL/21_KM Mech/KM_ID/HELL/HP/KM MAM 2016.xlsx (numopen=6) NT_STATUS_OK
[2018/06/22 14:42:18.110089, 2] smbd/open.c:746(open_file)
CsLev opened file fileserver/__MUNKAK/CSL/21_KM Mech/KM_ID/HELL/HP/KM MAM 2017 egész év.xlsx read=No write=No (numopen=7)
[2018/06/22 14:42:18.114096, 2] smbd/close.c:696(close_normal_file)
CsLev closed file fileserver/__MUNKAK/CSL/21_KM Mech/KM_ID/HELL/HP/KM MAM 2017 egész év.xlsx (numopen=6) NT_STATUS_OK
...csinál ilyen, táblázatkezelőbe is betölthető fájlokat:
2018/06/22 14:42:17.770334 CsLev opened file fileserver/__MUNKAK/CSL/21_KM Mech/KM_ID/HELL/HP/KM MAM 2017 egész év.xlsx
2018/06/22 14:42:17.824866 CsLev opened file fileserver/__MUNKAK/CSL/21_KM Mech/KM_ID/HELL/HP/Palyazati_Felhivas-18.pdf
2018/06/22 14:42:17.870417 CsLev opened file fileserver/__MUNKAK/CSL/21_KM Mech/KM_ID/HELL/HP/IA_GAZD_99-1.pdfEzzel a csodával:
#!/bin/bash
files=/var/log/samba/*
tempfile=tmp.log
tempfile2=tmp2.log
fact=activity.log
grepcmd1='-B1'
grepcmd2='read=Yes|write=Yes'
grepcmd3='file'
for f in $files
do
if [[ $f = *"log."* ]]; then
#bizonyos fájlokat eleve nem nézünk meg
if [[ $f != *".gz"* ]] && [[ $f != *".nmbd"* ]] && [[ $f != *".smbd"* ]]; then
echo "Processing $f..."
egrep "$grepcmd1" "$grepcmd2" "$f" > $tempfile2 #kiszedjük a read vagy write soroka$
awk '!/--/' $tempfile2 > $tempfile #kiszedjük az egrep blokk határoló sorokat
sed 's/smbd.*e)//' $tempfile > $tempfile2 #a nem releváns szövegrészek törlése
sed 's/read.*)//' $tempfile2 > $tempfile
sed 's/, .* //' $tempfile > $tempfile2 #[ , rész törlése
sed 's/^.//' $tempfile2 > $tempfile #kezdő karakter eltávolítása
perl -ne 'print unless $seen{$_}++' $tempfile > $tempfile2 #duplikált sorok eltávol$
egrep "$grepcmd1" "$grepcmd3" "$tempfile2" > $tempfile #a maradékot újra leszűrjük
awk '!/--/' $tempfile > $tempfile2 #blokkhatár
paste -d ' ' - - < $tempfile2 > $tempfile #minden második (elsővel kezdve) sor végé$
cat $tempfile > ${f##*/}.txt #megfelelő névvel elmentjük a végleges szöveget
else
echo "Excludeing $f..."
fi
else
echo "Exludeing $f..."
fi
done
rm $tempfile
rm $tempfile2Amit csináltam, az kissé ronda. Oda-vissza írogat két tempfile-t, azokon dolgozom. Lehet, hogy lehetne ezeket memóriában csinálni, arra nem jöttem rá.
Így is lefut elég hamar a dolog, de biztos van szebb megoldás rá. -
CPT.Pirk
Jómunkásember
Buék.
Egy cowsay-es motd.dynamic fájlt szeretnék csinálni, valahogy így:
do_start () {
#/usr/bin/screenfetch > /var/run/motd.dynamic
#/sbin/ip -o addr show | awk '/inet/ {print $2, $3, $4}' >> /var/run/motd.dynamic
exec /usr/games/cowsay -f [exec /usr/bin/screenfetch], [exec /sbin/ip -o addr show | awk '/inet/ {print $2, $3, $4}' ] > /var/run/motd.dynamic
}Tehát annak a két parancsnak a kimenete kellene hogy bekerüljön egyetlen cowsay parancsba, a cowsay kimenetét meg betenném egy fájlba. Viszont ez így nem jó.
-
CPT.Pirk
Jómunkásember
Egyikkel sem sikerült. Az awk-s megoldást én is próbáltam, de az kb. 8 sornyi cuccot tol ki, a másik megoldás meg nem talál ilyen fájlt. Próbáltam variálni, de továbbra sem.
-
CPT.Pirk
Jómunkásember
Még egy kérdésem akadt most.
Hogyan tudom rögzíteni az fstab -l kimenetéről a partíció kezdet / vég értékeket?
Tehát pl:
PART1_START=`fdisk -l /dev/$SDCARD | és ide jönne valami`
Gugliztam egy kört, de kifogytam az ötletekből.
-
CPT.Pirk
Jómunkásember
No hát nekem sem jött össze.
A DD-s sor végére kellene betenni így seek=$cucc'M' a "$cucc" helyére, ha ez megoldható.
-
CPT.Pirk
Jómunkásember
Hogyan tudok egy tört számból egész számot csinálni?
DD-nek kellene beadnom egy MB értéket, de a 606.488M-et nem szereti, fel kellene konvertálni 607M-re, vagy lehagyni a tört részt, itt nem fontos a pontos méret. Simán egy változóban van tárolva az érték, M nélkül, csak számok.
-
CPT.Pirk
Jómunkásember
Ez előzőleg linkelt script ezen részében találtok valami hibát?
echo "This script can initialize the destination disk with a partition"
echo "structure copied from the currently booted filesytem and then resize"
echo "partition 2 (the root filesystem) to use all space on the SD card."
echo -n "Do you want to initialize the destination /dev/$DST_DISK? (yes/no): "
read resp
if [ "$resp" = "y" ] || [ "$resp" = "yes" ]
then
# Image onto the destination disk a beginning fragment of the
# running SD card file structure that spans at least more than
# the start of partition 2.
#
# Calculate the start of partition 2 in MB for the dd.
PART2_START=$(parted /dev/mmcblk0 -ms unit MB p | grep "^2" \
| cut -f 2 -d: | sed s/MB// | cut -f 1 -d.)
# and add some slop
DD_COUNT=`expr $PART2_START + 8`
echo ""
echo "Imaging the partition structure, copying $DD_COUNT megabytes..."
dd if=/dev/mmcblk0 of=/dev/$DST_DISK bs=1M count=$DD_COUNT
# But, though Partion 1 is now imaged, partition 2 is incomplete and
# maybe the wrong size for the destination SD card. So fdisk it to
# make it fill the rest of the disk and mkfs it to clean it out.
#
echo "Sizing partition 2 (root partition) to use all SD card space..."
expand_rootfs
mkfs.ext4 $DST_ROOT_PARTITION > /dev/null
echo ""
echo "/dev/$DST_DISK is initialized and resized. Its partitions are:"
# fdisk -l /dev/$DST_DISK | grep $DST_DISK
parted /dev/$DST_DISK unit MB p \
| sed "/^Model/d ; /^Sector/d"
SRC_ROOT_VOL_NAME=`e2label /dev/mmcblk0p2`
echo ""
echo "Your booted /dev/mmcblk0p2 rootfs existing label: $SRC_ROOT_VOL_NAME"
echo -n "You may enter a label for the destination rootfs $DST_ROOT_PARTITION: "
read resp
if [ "$resp" != "" ]
then
e2label $DST_ROOT_PARTITION $resp
fi
else
echo -e "Aborting\n"
exit 0
fi
fiLényegében az van, hogy az első FAT partíció és annak a tartalma létrejön, felmásolódik, de mikor a második partíciót kellene létrehozni, akkor az fdisk közli, hogy nem tud hozzáférni a /dev/sda -hoz (ez az sd kártya), valamint az mkfs is közli, hogy nem tudja megcsinálni.
szerk: 199. sortól a scriptben.
-
CPT.Pirk
Jómunkásember
válasz
Jester01 #1155 üzenetére
Debian Wheezy -n alapul a raspbian image, van benne dash is meg bash is.
Az explicit módon indítva tovább jut, viszont akkor meg a 134-es sorban lévő EOF-el van baja, azt ő a fájl végére várja.
134: fdisk /dev/$DST_DISK > /dev/null <<EOF
Talán az ASCII megfelelője kellene az EOF-nek?
./rpiclone.s: line 392:warning: here-document at line-134 delimited by end-of-line (wanted 'EOF')
./rpiclone.sh: line 393: syntax error: unexpected end of file -
CPT.Pirk
Jómunkásember
Szeretném használni ezt a klónozó scriptet Raspberry-n: [link] Aki írta, azt írta, hogy aktívan használja.
Viszont mikor futtatom a megadott sudo ./rpiclone.sh sda -v formában, akkor azt kapom vissza, hogy:
./rpiclone.sh: 26: ./rpiclone.sh: function: not found
plusz kitolja ez alá a használati útmutatót.A 26-os sor innen kezdődik:
function usage
{
echo ""
echo "usage: $PGM sdN {-f|--force-initialize} {-v|--verbose}"
echo " Example: $PGM sda"
echo " -v - list all files as they are copied."
... -
CPT.Pirk
Jómunkásember
válasz
bambano #1104 üzenetére
Most mérges vagyok, mert megint egy hót egyszerű dolgot kérdeztem meg, ami rá kellett volna jönnöm!
Am. a végére már nem tettem ki a ] jelet, mert akkor a bash csinál egy cleart, és lefut a gnuplot, valamint a cowsay közli, hogy a mérés befejezve. Le is videóztam az egészet: [link]
-
CPT.Pirk
Jómunkásember
Még egyszer, elvileg utoljára kérnék egy apró segítséget. Szeretnék egy egyszerű, állapotjelzőt csinálni a lenti, már ismert kódhoz. Most úgy van, hogy 1 másodpercenként érkezik adat, mikor ez megtörténik, akkor szeretnék egy karaktert kiírni a képernyőre.
[#### ]
Valami ilyen totál egyszerű formában, zárójelek se kellenek.
NR<43 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
NR>43 { exit 0; }
END{
for(i=1;i<43;i++) if(a[i] > 0) printf ("%4.3f,%d,%d,%d,%4.3f\n",20*(log(a[i]/4095)/log(10.0)), i, a[i], b[i], ((a[i] + a[i+2$
}Egyébként szépen működik a kód és vele együtt a komplett Wobbler szkóp is. Ezúton is köszönöm a segítséget mindenkinek.
-
CPT.Pirk
Jómunkásember
Na az én problémám megoldódott. Semmi hiba, valszeg a fejlesztő környezet szívat engem.
-
CPT.Pirk
Jómunkásember
Nem teljesen értem mi van. Az awk-s progi helyett OD-vel fájlba küldtem a kimenetet, minden alkalommal ilyen (különös tekintettel az első 3 számra, az értékük is pontosan ez minden alkalommal):
od -An -t c -N256 /dev/ttyUSB0 > $OUTPUTFILE
3 314 316 1 4 0 9 0 \n 4 0 9 1 4 0 9
0 \n 4 0 9 9 4 0 8 8 \n 4 0 9 0 4
0 8 9 \n 4 0 9 0 4 0 8 8 \n 4 0 9
1 4 0 9 1 \n 4 0 9 0 4 0 9 0 \n 4
0 9 3 4 0 9 1 \n 4 0 9 2 4 0 9 0
\n 4 0 9 2 4 0 9 1 \n 4 0 8 9 4 0
8 9 \n 4 0 9 0 4 0 8 8 \n 4 0 9 0
4 0 8 8 \n 4 0 9 1 4 0 9 1 \n 4 0
9 0 4 0 8 8 \n 4 0 9 1 4 0 9 1 \n
4 0 9 1 4 0 9 1 \n 4 0 9 1 4 0 9
0 \n 4 0 9 2 4 0 9 0 \n 4 0 9 1 4
0 9 1 \n 4 0 9 0 4 0 9 0 \n 4 0 9
0 4 0 8 8 \n 4 0 9 1 4 0 9 1 \n 4
0 9 0 4 0 8 9 \n 4 0 9 1 4 0 9 0
\n 4 0 9 1 4 0 9 1 \n 4 0 9 1 4 09 1 \n 4 0 9 3 4 0 9 1 \n 4 0 9 0
Az első 4 értéket nem tudom hova tenni. Ott is ~4090 körül kellene lennie a számoknak.
Az awk progi meg ezekkel a számokkal random dolgokat ment a kimeneti fájlba. Az értékek többsége -Inf, vagyis - végtelen, meg akad egy-két random negatív szám. Valamint a kiszámolt értékek száma is változó, pedig minden esetben ugyanannyi értékpárat küld az fpga, ezt figyelem az OD-vel egy másik terminálban.
-
CPT.Pirk
Jómunkásember
Ebben az AWK-ban a printf-s részt hogyan lehetne kihagyni? Ebben a formában nem csinál semmit, nem küldi el az xon karaktert, viszont nem jöttem rá, hogyan lehet kiiktatni ezt a sort.
Lehet van ott másik gond is, mert valamiért nem igen akar újabban letárolni fájlba értékeket, pedig eddig ment, aztán hozzá nem nyúltam...
BEGIN { printf ("\x11") > /dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
NR>41 { exit 0; }
END{
for(i=1;i<41;i++) if(a[i] > 0) printf ("%4.3f\n",20*(log(b[i]/a[i])/log(10.0))) > "/home/patch/awk/output.txt";
}Úgy tervezem, hogy ebből a scriptből kerül meghívásra a fenti awk:
#!/bin/sh
INPUTFILE="/dev/ttyUSB0" #bemenet
OUTPUTFILE="/home/patch/awk/output.txt" #kimenet a plot számára
AWKFILE="/home/patch/awk/alma" #awk fájl
PLOTFILE="/home/patch/awk/plotfile" #paraméterek a gnuplot számára
WORKDIR="/home/patch/awk/"
stty -F /dev/ttyUSB0 9600 -clocal -cread -crtscts cs8 cstopb -parenb || exit 1 #soros port paraméterezés
if [ $OUTPUTFILE ]; then
rm $OUTPUTFILE #kimeneti fájlok előkészítése
fi
touch $OUTPUTFILE
if [ $PLOTFILE ]; then
rm $PLOTFILE
fi
touch $PLOTFILE
printf "set grid nopolar\nset xlabel \"frekvencia logaritmikus skalan [HZ]\x22\nset ylabel \x22amplitudo [dB]\x22\nset xrang$
printf "\x11" > $INPUTFILE #XON karakter küldése az FPGA-nak
awk -f $AWKFILE < $INPUTFILE #mért értékek letárolása
printf "\x13" > $INPUTFILE #XOFF karakter küldése az FPGA-nak
cd $WORKDIR
gnuplot ./plotfile -presistEbben a formában jól működik a karakterek elküldése.
-
CPT.Pirk
Jómunkásember
Meg lehet valahogy oldali, hogy a shell script lépjen ki, mikor az stty -F .... soros port konfiguráló parancs nem tud lefutni, mert "helytelen ioctl hívás az eszköznek" hibaüzenet van? Ilyenkor megáll a script, amíg ki nem húzom az USB-t.
A hiba okát nem tudom, egy reset után helyrejön.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1078 üzenetére
Köszönöm!
Tudod miért számoltam el? Mert a Windows7 számológépe programozó módban volt, így nem mutatta a tizedeseket.Amúgy ez a pici eltérés, a 115273,77521613832853025936599424 Hz úgy tapasztaltam, még benne van az uart tűrésében. Majd holnap / (ma) átdolgozom a 38400 baudra a kódot.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1068 üzenetére
Hoppá hoppá, meglett az "od" parancs "elcsúszásának" az oka.
Mióta ma betettem a 120MHz-es quartz oszcillátort és azt használom a +- 0.5% frekvencia erroros szilícium oszcillátor helyett, egyszer sem tévesztett az od és az sem fordult elő, hogy a kiküldött x11 helyett mást látott volna az fpga, korábban ez is gyakori volt.Szerencsére még pluszban a 120MHz az egész számú többszöröse a 115200-nak, így kerekítési hiba sincs.
740Ft volt ez a 120-as quartz, francnak nem vettem meg korábban.
-hamarosan remélem lesz egy videó róla, hogy végül is mit tud a rendszer. -
CPT.Pirk
Jómunkásember
-
CPT.Pirk
Jómunkásember
Lehet olyat csinálni a printf-el, hogy a szövegen belül idézőjel is legyen? A gnuplot paramétereket szeretném fájlba írni, ahol ilyen sorok vannak:
set valami...
set ylabel "amplitudo"
set valami...\n, meg ilyenek megvannak, csak az idézőjellel nem tudom mit kezdjek.
awk '{print "set valami\nset ylabel "amplitudo"\nset valami"}' > /home/patch/awk/plotfile
Ha awk-s printet hívom meg, az nem ad hibát, de megakasztja az egész fájlt. -
CPT.Pirk
Jómunkásember
válasz
bambano #1063 üzenetére
Köszönöm!
Most egyébként rendeltem rendes quartz oszcillátorokat, mert végre megtaláltam a leírásban, hogy egy "szilícium oszcillátor" van gyárilag a nyákon, ami egyrészt nem elég pontos a freki tartásban, másrészt +-0,5% freki hibája van, ami 50MHz-en elég cinkes. (szerintem még több is van neki, mert 47.8MHz körül szokott menni)
Csütörtök - péntek körül meglesz az új quartz, addig tökéletesítgetem a mostani cucost. Nem tudtam foglalkozni vele és ma se érzem valami frankón magam ehhez (hülye frontok), így még nincs gnuplot rajzom, de már nagyon szeretném.
-
CPT.Pirk
Jómunkásember
-
CPT.Pirk
Jómunkásember
válasz
bambano #1050 üzenetére
Volt egy kis fennakadás a Xilinxesek miatt, így nem tudtam tesztelni eddig.
Beírtam, így kétszer olvas be 41 számpárt, a második beolvasás során számol és ír fájlba. Ennek nem jöttem rá az okára, hogy miért nem megy egy kör alatt.
BEGIN { printf ("\x11") > /dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
NR>41 { exit 0; }
END{
for(i=1;i<41;i++) if(a[i] > 0) printf ("%4.3f\n",20*(log(b[i]/a[i])/log(10.0))) > "/home/patch/awk/output.txt";
} -
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]
-
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. -
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?
-
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. -
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.
-
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?
-
CPT.Pirk
Jómunkásember
No, megvan végre a log_10() funkció is.
function log10(x) {\
return log(x)/log(10.0);\
}\
{a=substr($0,0,4); b=substr($0,4,4); if (a > 0) printf "%d,%d,%f\n",a,b,20*log10(b/a); }Így már jók a kiszámolt erősítés értékek. Ezeket kellene átirányítanom egy fájlba kezdésnek. Per pill még nem sikerült.
Valamint néha a 2. szám elcsúszik 1-2 értékkel, ezzel kezdenem kell valamit.
-
CPT.Pirk
Jómunkásember
Tehát ilyen formában, "egysorosként"?
awk ' {a=substr($0,0,4); b=substr($0,4,4); printf "%d,%d,%f\n",a,b,log(b/a); }' /dev/ttyUSB0
Ebben az esetben gondja van a filenévvel.
awk: (FILENAME=/dev/ttyUSB0 FNR=1) fatal: 0-val osztás kísérleteMindenképpen bele kellene terveznem valami "start karakter" felismerést majd, azt fixen bele fogom tenni az fpga programjába. Ahogy nézem, csak úgy biztosítható, hogy a jó számjegytől kezdjek el rögzíteni.
-
CPT.Pirk
Jómunkásember
Na arra rájöttem, hogy ilyen formában gondolod az awk indítását terminálban:
awk -f program.awk /dev/ttyUSB0
Ebben az esetben ha jól értem a FAQ-ot, a "FILENAME" változó jelenti a /dev/... -t, és ezzel kell hivatkozni rá, vagyis ez a standard input.
Egyszer ennyit írtam az awk fájlba (a txt fájl létezik):
OUTPUT="/home/pa.... /output.txt
FILENAME > OUTPUT
Ez annyit csinál, mintha azt írnám a terminálba, hogy cat /dev/ttyUSB0. Szóval csak kiírja az értékeket. Innen jó lenne egy kis segítség valamilyen szinten. Gugliztam egy kört, de valahogy nem akar előjönni egy érthető awk leírás, amivel tovább tudnék lépni.
-
CPT.Pirk
Jómunkásember
Tehát akkor ez úgy van, hogy írok egy .awk fájlt ilyen módon:
#!/bin/awk -f
BEGIN {
számolós kód
.
..
...
exit;
},majd pedig az egészet meghyvom így a terminálban:
awk -f program.awk ?
Nem egy soros terminálos cuccban gondolkodok, mert később még jó lenne a pontokat betenni egy egyszerű 2D koordináta rendszerbe. Bár ez már hyper advanced lesz nekem. -
-
CPT.Pirk
Jómunkásember
Megvan a válasz, a cat érti az új sor (decimális 10) karakterét, valszeg a többi vezérlő karaktert is. Gyönyörűen írogatja a dolgokat ilyen formában, ha 9. byte az új sor byte-ja.
xxxxyyyy
xxxxyyyy
xxxxyyyyMost annyi kellene, hogy valamilyen módon szétszedem xxxx yyyy -ra a 8 számjegyet, hogy lehessen osztani yyyy -t xxxx -el. Tegyek be valami szeparáló karaktert, amire egy függvény rá tud keresni, vagy számolgassak karaktereket?
Mondjuk ez a bin -> bcd átalakítás nem volt éppen egyszerű téma.
-
CPT.Pirk
Jómunkásember
Ez jó ötlet.
Tehát ha hozzáadok a 0-hoz 48-at, akkor kapom az ascii beli 0-t. Magyarul ha elküldöm az 110000 -t a terminálnak, akkor egy 0-t kell lássak a cat-al. (és így tovább)
Még hozzáadni sem kell, egy "case" függvénnyel kvázi statikusan le lehet írni, hogy ha x a bemenet, akkor y a kimenet, a mindössze 10 érték miatt ez nem is bonyolult.
Ha az egészet befoglalom STX, ETX karakterek közé (vagy valamelyik hasonló közé), akkor a cat ezt meg fogja érteni, vagy kitolja ezeket is a fájlba?
-
CPT.Pirk
Jómunkásember
Ahogy nézem, ez nem is egyszerű feladat. FPGA-ban nem nagyon van olyan, hogy ascii.
Talán az járható út, hogy BCD átalakítást csinálok, majd pedig a számjegyeket egy LUT táblában leírtak szerint átalakítom az ASCII kódjukra, és azt küldöm el. Trükkös lesz. [link]
Kicsit egyszerűbb lenne az od, csak hogy miért téveszti el a kezdést, az jó kérdés.
-
CPT.Pirk
Jómunkásember
Nem mikrovezérlő, ott nem tudom hogyan zajlik a soros port móka.
Szóval arra gondolsz, hogyha decimális formában küldöm át, pl. BCD kódban, akkor a cat parancs már számokat fog nekem kiadni? Ezt relatíve könnyen meg tudom csinálni, mert van egy kész bin - bcd konverterem.
-
CPT.Pirk
Jómunkásember
válasz
CPT.Pirk #973 üzenetére
Na jó, rájöttem, annyira nem nehéz az alapokat megírni. Szóval írtam egy pici scriptet, ami kitolja egy txt fájlba az értékeket. Viszont ha od-vel csinálom, akkor az előzőben vázolt probléma fent áll, ha rossz helyen kapja el a számokat, akkor minden érték hibás lesz.
cat-al pedig csak ascii karakterek mennek a fájlba, ahogy nézem, ez nem is alkalmas arra, amit szeretnék.
Tudtok valamit, ami az od-t kiváltaná?
-
CPT.Pirk
Jómunkásember
Na most valami tanácsot szeretnék kérni. Még mindig a soros port olvasás gondom van.
Ha od-val nézem a /dev/ttyUSB0 -t, akkor vagy eltalálja, hol kezdek adatot küldeni, vagy nem. Úgy csináltam meg az adat szerkezetet, hogy 00 00 a kezdést jelöli, FF FF pedig a végét, és a közte lévő 2 darab szám értékére van szükségem.
Amikor jó, akkor ilyen formátuma van a kimenetnek: (od -An -t x1 /dev...)
00 00 xx 0x xx 0x FF FF 00 00 xx 0x xx 0x FF FF(xx 0x a normális adat forma a 12 bites számaimhoz)
Más esetekben meg ott indul, ahol gondolja. Tehát van, hogy 00 xx 0x xx 0x FF FF ..., van hogy FF 00 00 xx 0x xx 0x FF FF 00 00 xx 0x xx 0x FF
Amikor jó helyen kapja el, akkor minden érték stimmel. Ha nem, akkor meg rossz párokat rak össze, pl. utolsó példánál az FF 00, az 00 xx, és az 0x FF fogják alkotni a számpárokat, ami nem jó.
Nem tudom hova tenni az od ilyen viselkedését. Olyanra tudtok mondani egy egyszerű szkriptet, hogy egyszerűen pl. lementi a cat /dev/ttyUSB0 kimenetét egy fájlba, de olvasható formában? Terminálban ez a parancs kidob egy rakás kérdőjel szimbólumot és semmi mást.
-
CPT.Pirk
Jómunkásember
Megpróbáltam -crtscts, crtscts-el és ezek nélkül is, mindegyik esetben az stty szerint a baudrate 38400, az od-s parancsot kiadva meg a modulom abbahagyja a küldést. Mikor kihúzom az USB-t, akkor 7 darab 0 a kimenet.
Ezután ha visszadugom, a modul újra küld csomagokat, nem kell semmit csinálnom. -
CPT.Pirk
Jómunkásember
Elvileg kézfogás mentes uart protokoll van, mert az FPGA felé megy egy CTS és RTS, viszont onnan a modul felé csak a TX, és mérések szerint a CTS, RTS logikai '1'-en vannak, amint végez a modul az USB-s kapcsolat felépítésével.
Végül is mindegy, mert a modulom küldi a cuccot, lehet, hogy külön kezeli az adó és a vevő oldalt.Am igen, már lejárt a szerkesztés, mikor rájöttem, hogy az N4 az nem fájl akar lenni.
Viszont akkor az a kérdésem, hogy konkrétan hogyan tudnék lementeni beeső 4*8 bitet? Milyen környezetben használjam ezt az OD parancsot? -
CPT.Pirk
Jómunkásember
válasz
Jester01 #895 üzenetére
stty -F /dev/ttyUSB0 9600 cread crtscts cs8 -cstopb -parenb Ez így már működik, ha így írom be, akkor villog az adás led, tehát a modulom és a gép között létrejött a kapcsolat. Viszont az stty szerint továbbra sem változott a baudrate, bár ha az lenne a valóság, akkor szerintem nem küldözgetne a modulom.
Csináltam egy N4 nevű fájlt, majd kiadtam az od-s parancsot:
od -An -d -N4 /dev/ttyUSB0, ami után már nem küld a modulom semmit a gépnek, a fájlba nem kerül semmi. Milyen formában kellene ezt kiadni? Ha terminálban adom ki, akkor csak kilépni lehet a terminálból.
-
CPT.Pirk
Jómunkásember
válasz
Jester01 #895 üzenetére
stty -F /dev/ttyUSB0 9600 cstopb -parenb
Ez terminálban rootként lefut, probléma nélkül. Viszont ha megint beírom az stty parancsot, akkor meg továbbra is 38400 baud-ot ír.
Szóval nem tudom, hogy átállt-e.
od -An -d -N4 /dev/ttyUSB0
Igen, decimális számot szeretnék. Tehát össze kell pakolni 2*8 bitet egybe ahhoz, hogy a korrekt értéket lássam. Ehhez a parancshoz tudsz mutatni valami leírást? Nem nagyon találtam most hirtelen. -
CPT.Pirk
Jómunkásember
Mi a menete egy Shell scritpben annak, hogy benyeljem az adatokat USB-s uartomról?
Windowson így megy:
Fel kell építeni a kapcsolatot (egy packet monitor programban csináltam), megadva, hogy 9600baud, 2 stop bit, nincs paritás bit. Ez után tud csak küldeni az uart modulom csomagokat a PC-re.Valamint ilyen formában jönnek az adatok 4* 8 biten, ez 2 darab 12 bites AD kimenetéről származik:
1. 8 bit: AD1 7..0 bitek
2. 8 bit: "0000" és AD1 11..8 bitek
3. 8 bit: AD2 7..0 bitek
4. 8 bit: "0000" és AD2 11..8 bitekEzeket kellene az eredeti, 12 bites formában letárolnom. Az egyszerűség kedvéért kezdésnek elég az is, ha csak az AD1 2*8 bitjével foglalkozunk.
-
CPT.Pirk
Jómunkásember
No odáig eljutottam, hogy a /dev/serial... alatt is létrejön eszköz, mikor csatlakoztatom a modult, valamint a /dev/ttyUSB0 is. Ahogy nézem, ez utóbbit szokták kezelni.
Nem igazán találtam utalást Linux alatt az "online" loggolására, csak Windowsos megoldásokat, valami ilyesmit találtam Linuxra:
exec </dev/ttyUSB0
stty igncr
while read -r; do
echo "[$(date)]: $REPLY"
done </dev/ttyUSB0 >>/usb/BigDrive/CurrentCost/CurrentCost.log -
CPT.Pirk
Jómunkásember
Szóval ez úgy soros port, hogy az FPGA-m felé néz 4 port, RX,TX, RTS, CTS, a kis panelon egy FT232RQ IC van, erről meg már rendes USB port jön le, az van összekötve a számítógéppel. Így néz ki egészben: [link]
Akkor a logaritmus csúszik kicsit, max összeszenvedek rá egy C programot, vagy valami.
Viszont ami fontos lenne, olyat lehet csinálni, hogy valahogy detektáljam PC-n, ha valamit elküld ez a kis modul? Bőven megfelelne, ha egy fájlba kiíródna a beesett 8 bit, vagy látnám terminálban valahogy, stb.
szerk: bc/dc -ről még nem igen halottam, a DC valami C szerű cucc a wiki szerint. C, DC, BC közül melyiket ajánljátok?
C-t ugyan tanultam kicsit, de az nem sok.
-
CPT.Pirk
Jómunkásember
Haladok a projectemmel. Olyan kérdésem lenne, hogy önmagában a bash script elég-e az alábbi feladatok elvégezésre:
- USB-ről "értékcsomagok" beolvasása, ezekben 12 bit tartalmazná az érdemi adatot, előtte lévő x (mondjuk 16) bit meg azt, hogy hányadik mérés adata érkezett meg, a megadott maximumig kellene letárolni az értékeket. Ezeket külön kellene választani mondjuk bitszám alapján. Esetleg eleve külön is elküldhetem őket, ha úgy egyszerűbb.
- A 12 bites bináris értéket át kellene alakítani decimális számmá (ezek Uki és Ube lennének), majd el kellene végezni rájuk ezt a képletet: Au = 20* log_10 (Uki / Ube).
De mindenek előtt, egyszer olyat kellene csinálnom, hogy figyelem, mi esik be USB porton. Nincs túl sok bash script tapasztalatom, szóval a fenti kérdéseket ennek megfelelően értékeljétek.
-
-
CPT.Pirk
Jómunkásember
Olyan kérdésem van, hogyha van egy szabvány RS232 -> USB eszköz, amit felismer a kernel és látszik az lsusb -nál, akkor az eszközön beeső értékeket le lehet-e menteni egy fájlba?
Kicsit konkrétabban, egy fpga-ra van kötve egy RS232-USB modul, én kiküldök egy frekvencia és egy erősítés értéket a modulon át, ez bemegy az USB portra, onnan le kellene menteni egy fájlba, majd a következő érték párost egy új sorba, és így tovább. Végén meg tudnék belőle grafikont rajzolni pl. libreofficeban.
Új hozzászólás Aktív témák
Hirdetés
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Sea of Thieves Premium Edition és Egyéb Játékkulcsok.
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- ÁRCSÖKKENTÉS Lenovo ThinkPad T570, T580, P51s, P52s eredeti Lenovo, belső akkumulátor eladó
- Bomba ár! Dell Latitude E5570 - i5-6300U I 8GB I 256GB SSD I 15,6" FHD I HDMI I CAM I W10 I Gari!
- Csere-Beszámítás! RTX Számítógép játékra! I5 13400F / 32GB DDR5 / RTX 4070 Super / 1TB SSD
- Azonnali készpénzes nVidia RTX 3000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
- Honor Magic7 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest