Buggfix Plus
Aktuellt datum och tid: 22.19 2019-11-13

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 62 inlägg ]  Gå till sida Föregående  1, 2, 3, 4, 5  Nästa
Författare Meddelande
InläggPostat: 21.28 2018-12-10 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Provar så här i stället. Nu är jag nära!

Detta är mitt binära meddelande:
110000101100001100100000000000000000000011111010000

Om man avkodar bitströmmen (längst ner i inlägget) mha sanningstabellen:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. A B O
  2. 0 0 0
  3. 0 1 1
  4. 1 0 0
  5. 1 1 1


så verkar det stämma.
Frågan är då. Finns det något program som kan hjälpa mig så jag slipper göra det här manuellt?

110011000110011001100011001100110011001100110011001100110011001100101100110001101010011000101010110100110011001101010011001010101101001010101011010010101011001101001010101101001011001010101010101010101010101010101010101010110101010100011001010101011001101001100110011001101001011000


Upp
 Profil  
 
InläggPostat: 21.29 2018-12-10 

Blev medlem: 10.06 2010-01-07
Inlägg: 947
Ort: Sandared
Sigrok, kanske kolla om protokollet finns eller du får skapa den själv.

https://sigrok.org/wiki/Protocol_decoders


Upp
 Profil  
 
InläggPostat: 21.39 2018-12-10 
Användarvisningsbild

Blev medlem: 18.06 2010-05-17
Inlägg: 9010
Ort: Växjö/Alvesta
Med den där sanningstabellen kan du ju helt enkelt plocka bort varannan bit, så har du svaret.. :)

Eller så kan du spendera fem minuter på att skriva ett program som avkodar..

https://onlinegdb.com/ryMkkUhyE :vissla:


Upp
 Profil  
 
InläggPostat: 22.13 2018-12-10 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
På ren svenska, fan vilket geni du är Klas-Kenny!
Trodde absolut inte att du skrivit ihop något liknande, utan bara postade en länk!

Är det ok om jag stjäl den koden och försöker göra ett program i RPin där jag bara kan mata in pulståget och ut spottar den resultatet. Kan vara en halvklurig övning för mig att göra.

Tack än en gång! Blev extra glad när jag insåg att det stämde också :D


Upp
 Profil  
 
InläggPostat: 22.21 2018-12-10 
Användarvisningsbild

Blev medlem: 18.06 2010-05-17
Inlägg: 9010
Ort: Växjö/Alvesta
Självklart får du göra vad du vill med koden.
Den är inte optimal på något sätt, men den är enkel och gick snabbt att skriva. :D


Upp
 Profil  
 
InläggPostat: 08.38 2018-12-11 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Tack :tumupp:

Jag slaktade den lite igår... Läste lite hur man använder getopt().
Trodde det gick relativt bra men ju mer jag rättar till, desto fler kompileringsfel.
Har lite problem att flytta text mellan RPin och EF så här kommer bara koden. Ska jobba på att få över kompileringsfelen också, men det är lite många i nuläget.
Nu så, nu är kompileringsfelen nedanför koden.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <getopt.h>
  4.  
  5. void print_usage() {
  6.         printf("Usage: binDecoderv1 -b <bin> | binDecoderv1 -h\n");
  7.         exit(2);
  8. }
  9.  
  10. void main(int argc, char **argv) {
  11.  
  12.     if (argc < 2) {
  13.         print_usage();
  14.     }
  15.  
  16.     int option;
  17.     int bflag = 0;
  18.     int hflag = 0;
  19.  
  20.     while ((option = getopt(argc, argv, "b:h")) !=-1) {
  21.             switch (option) {
  22.                     case 'b' :
  23.                             if (bflag) {
  24.                                     print_usage();
  25.                             } else {
  26.                                     bflag++;
  27.                                     print_decoded_result(atoi(optarg));
  28.                             }
  29.                             break;
  30.                     case 'h' :
  31.                             if (hflag) {
  32.                                     print_usage();
  33.                             } else {
  34.                                     printf("Enter pulsetrain and get it decoded!");
  35.                             }
  36.                             break;
  37.                     default :
  38.                             print_usage();
  39.             }
  40.     }
  41. }
  42.  
  43. int print_decoded_result(char binary) {
  44.    
  45.     char b[] = binary;
  46.    
  47.     for(int i=0; i<sizeof(b); i+=2) {
  48.        
  49.         if(b[i] == '0') {
  50.             if(b[i+1] == '0')
  51.                 printf("0");
  52.             else if(b[i+1] == '1')
  53.                 printf("1");
  54.         } else if(b[i] == '1') {
  55.             if(b[i+1] == '0')
  56.                 printf("0");
  57.             else if(b[i+1] == '1')
  58.                 printf("1");
  59.         }
  60.     }
  61.     printf("\n");
  62.     return 0;
  63. }


Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. binDecoderv1.c: In function ‘main’:
  2. binDecoderv1.c:27:37: warning: implicit declaration of function ‘print_decoded_result’ [-Wimplicit-function-declaration]
  3.                                      print_decoded_result(atoi(optarg));
  4.                                      ^~~~~~~~~~~~~~~~~~~~
  5. binDecoderv1.c: At top level:
  6. binDecoderv1.c:43:5: error: conflicting types for ‘print_decoded_result’
  7.  int print_decoded_result(char binary) {
  8.      ^~~~~~~~~~~~~~~~~~~~
  9. binDecoderv1.c:43:1: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
  10.  int print_decoded_result(char binary) {
  11.  ^~~
  12. binDecoderv1.c:27:37: note: previous implicit declaration of ‘print_decoded_result’ was here
  13.                                      print_decoded_result(atoi(optarg));
  14.                                      ^~~~~~~~~~~~~~~~~~~~
  15. binDecoderv1.c: In function ‘print_decoded_result’:
  16. binDecoderv1.c:45:16: error: invalid initializer
  17.      char b[] = binary;
  18.                 ^~~~~~
  19.  


Upp
 Profil  
 
InläggPostat: 08.54 2018-12-11 
Användarvisningsbild

Blev medlem: 18.06 2010-05-17
Inlägg: 9010
Ort: Växjö/Alvesta
Inte provkört programmet, men det kompilerar i alla fall. :)

Flyttade main() till sist i programmet (funktionen print_decoded_result() var annars inte deklarerad innan den användes), bytte namn på variabeln binary till bara b och tog bort det misslyckade försöket att kopiera binary till b (för att göra som du försökte hade det krävt att allokera minne till b med malloc, sen kopiera med memcpy. Arrayhantering är inte alltid helt trivialt i C), samt lade till variabel hflag.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <getopt.h>
  4.  
  5. void print_usage() {
  6.         printf("Usage: binDecoderv1 -b <bin> | binDecoderv1 -h\n");
  7.         exit(2);
  8. }
  9.  
  10.  
  11.  
  12. int print_decoded_result(char b[]) {
  13.    
  14.     for(int i=0; i<sizeof(b); i+=2) {
  15.        
  16.         if(b[i] == '0') {
  17.             if(b[i+1] == '0')
  18.                 printf("0");
  19.             else if(b[i+1] == '1')
  20.                 printf("1");
  21.         } else if(b[i] == '1') {
  22.             if(b[i+1] == '0')
  23.                 printf("0");
  24.             else if(b[i+1] == '1')
  25.                 printf("1");
  26.         }
  27.     }
  28.     printf("\n");
  29.     return 0;
  30. }
  31.  
  32. void main(int argc, char **argv) {
  33.  
  34.     if (argc < 2) {
  35.         print_usage();
  36.     }
  37.  
  38.     int option;
  39.     int bflag, hflag = 0;
  40.  
  41.     while ((option = getopt(argc, argv, "b:h")) !=-1) {
  42.             switch (option) {
  43.                     case 'b' :
  44.                             if (bflag) {
  45.                                     print_usage();
  46.                             } else {
  47.                                     bflag++;
  48.                                     print_decoded_result(atoi(optarg));
  49.                             }
  50.                             break;
  51.                     case 'h' :
  52.                             if (hflag) {
  53.                                     print_usage();
  54.                             } else {
  55.                                     printf("Enter pulsetrain and get it decoded!");
  56.                             }
  57.                             break;
  58.                     default :
  59.                             print_usage();
  60.             }
  61.     }
  62. }


Upp
 Profil  
 
InläggPostat: 09.14 2018-12-11 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Försökte enbart göra ändringarna genom din text, blir lättare att förstå felen då. Nu kompilerar det med ett par varningar men får Segmenteringsfel när jag försöker tex ./binDecoderv1 -b 10101101010101.

Ska kika mer på det lite senare men roligt att se svaren om man bara skriver ./binDecoderv1 eller ./binDecoderv1 -h :)


Upp
 Profil  
 
InläggPostat: 11.35 2018-12-11 
Användarvisningsbild

Blev medlem: 18.06 2010-05-17
Inlägg: 9010
Ort: Växjö/Alvesta
Ser felet nu, du vill inte ha atoi(optarg) eftersom du vill ha en sträng till print_decoded_result(), inte strängen omvandlas till integer.

Skicka optarg direkt istället.


Upp
 Profil  
 
InläggPostat: 11.44 2018-12-11 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Det löste det mesta! :tumupp:

Det enda den inte vill förstå nu (tror jag), det är den egentliga storleken på b[].
Kör jag tex ./binDecoder -b 110101010101 så får jag bara tillbaka 11. Den verkar enbart uppfatta b som storlek 1, och kör for-loopen endast en gång.

EDIT: Tror det är jag som rör ihop det. Det blev lite dumt att döpa både option till 'b' samt använda det som variabelnamn för det binära pulståget.


Upp
 Profil  
 
InläggPostat: 14.46 2018-12-11 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Nej, får inte ihop det riktigt. Förstår inte vad det är för värde som lägger sig i binary[]. Lägger sig varje bit som ett element?
Så här ser koden ut nu. Med kompileringsvarningen nedan.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <getopt.h>
  4.  
  5. void print_usage() {
  6.         printf("Usage: binDecoderv1 -b <bin> | binDecoderv1 -h\n");
  7.         exit(2);
  8. }
  9.  
  10.  
  11. int print_decoded_result(char binary[]) {
  12.    
  13.     //binary = sizeof(b) / sizeof(b[0]);
  14.  
  15.     for(int i=0; i<sizeof(binary); i+=2) {
  16.        
  17.         if(binary[i] == '0') {
  18.             if(binary[i+1] == '0')
  19.                 printf("0");
  20.             else if(binary[i+1] == '1')
  21.                 printf("1");
  22.         } else if(binary[i] == '1') {
  23.             if(binary[i+1] == '0')
  24.                 printf("0");
  25.             else if(binary[i+1] == '1')
  26.                 printf("1");
  27.         }
  28.     }
  29.     printf("\n");
  30.     return 0;
  31. }
  32.  
  33. void main(int argc, char **argv) {
  34.  
  35.     if (argc < 2) {
  36.         print_usage();
  37.     }
  38.  
  39.     int option;
  40.     int bflag = 0;
  41.     int hflag = 0;
  42.  
  43.     while ((option = getopt(argc, argv, "b:h")) !=-1) {
  44.             switch (option) {
  45.                     case 'b' :
  46.                             if (bflag) {
  47.                                     print_usage();
  48.                             } else {
  49.                                     bflag++;
  50.                                     print_decoded_result(optarg);
  51.                             }
  52.                             break;
  53.                     case 'h' :
  54.                             if (hflag) {
  55.                                     print_usage();
  56.                             } else {
  57.                     hflag++;
  58.                                     printf("Enter pulsetrain and get it decoded!\n");
  59.                             }
  60.                             break;
  61.                     default :
  62.                             print_usage();
  63.             }
  64.     }
  65. }
  66.  

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. binDecoderv1.c: In function ‘print_decoded_result’:
  2. binDecoderv1.c:15:26: warning:sizeof’ on array function parameter ‘binary’ will return size of ‘char *[-Wsizeof-array-argument]
  3.      for(int i=0; i<sizeof(binary); i+=2) {
  4.                           ^
  5. binDecoderv1.c:11:31: note: declared here
  6.  int print_decoded_result(char binary[]) {
  7.                                ^~~~~~
  8.  


Upp
 Profil  
 
InläggPostat: 17.04 2018-12-11 
Användarvisningsbild

Blev medlem: 22.56 2008-11-27
Inlägg: 3320
Ort: Utanför Jönköping
Nu vet jag inte riktigt var optarg kommer ifrån.

Felet är att sizeof(binary) inte returnerar strängens/arrayens längd utan storleken för en pekare istället.

Testa med: strlen(binary) istället för sizeof(binary). Kanske behöver du inkludera <string.h> oxo.


Upp
 Profil  
 
InläggPostat: 17.56 2018-12-11 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Snyggt adent :tumupp:
Jag som testat strlen i olika varianter men inte så.

Programmet räknar fortfarande inte riktigt så det är fortfarande något fel.
Jag testade att göra printf(optarg); och då skriver den ut exakt det pulståget som jag matade in. Med andra ord får funktionen print_decoded_result(); det den ska.
Testade sen att i den funktionen skriva printf(strlen(binary)); men får en drös varningar då om pekare och annat. Tyvärr inte möjlighet att kopiera meddelandet nu.


Upp
 Profil  
 
InläggPostat: 20.49 2018-12-11 
Användarvisningsbild

Blev medlem: 18.06 2010-05-17
Inlägg: 9010
Ort: Växjö/Alvesta
printf("%d",strlen(binary));

Kan inte ge printf en integer direkt...

Printf tar en sträng som första argument. Och en sträng i C är en pekare till en char-array.
Så ger du den en integer kommer den skriva ut vad som råkar finnas på den adressen som integerns tal är. Vilket sannolikt bara blir skräptecken.


Senast redigerad av Klas-Kenny 22.01 2018-12-11, redigerad totalt 1 gång.

Upp
 Profil  
 
InläggPostat: 21.13 2018-12-11 
EF Sponsor
Användarvisningsbild

Blev medlem: 17.53 2010-01-04
Inlägg: 5576
Ort: Skogen mellan Uppsala-Gävle
Oj, ja då blir det tokigt.
Får tillbaka 11.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 62 inlägg ]  Gå till sida Föregående  1, 2, 3, 4, 5  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010