8 biter till en byte

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
überfuzz
Inlägg: 790
Blev medlem: 8 december 2009, 19:46:27
Ort: Uppsala

Re: 8 biter till en byte

Inlägg av überfuzz »

überfuzz skrev:Tack RoPa!

Jag har skaplig koll på var, mjukvara/hårdvara, olika saker görs, enklast. Känns som att det du kallar alt 1 sitter väl med min applikation.
:vissla:
bearing
Inlägg: 11679
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: 8 biter till en byte

Inlägg av bearing »

überfuzz skrev:Ja precis! I C låter sig logiska and (&&) och or (||) operationer göras på 'bytearna' jag skickar till mjukvaran. Där kan jag alltså söka efter konstigheter utan problem. Utan papper och penna till hands drar jag till med att && gör det jag vill.

Kod: Markera allt

A:0101 -- önskat mönster
B:0001 -- läst mönster
C = A && B  (pseudokod)
true ? C == A (pseudokod)
Det några försökte påpeka var att du har fel i att det är de logiska operationerna && och || som används på bytes i C. På bytes används aritmetiska operationer. Dessa har inte dubbla tecken, utan enkla, d.v.s & samt |. Logiska operationer görs på "bitar" (true / false) i C, inte bytes. Om du ändå använder en byte i en logisk operation kommer alla värden utom noll räknas som true, och 0 räknas som false.

Angående problemet är jag fortfarande osäker på vad du vill åstadkomma. Verkar handla om maskning, så jag gissar på något sånt här.

Kod: Markera allt

input = PORTB; //Read I/O port
mask = 0b0101; //Set mask
if ((input & mask) == mask)
{
  //We have a match!
  //Do something!
}
Senast redigerad av bearing 25 februari 2016, 00:04:59, redigerad totalt 2 gånger.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: 8 biter till en byte

Inlägg av lillahuset »

MadModder: *host* *host* Det här är ju underhållande. Nytt försök. :lol:
A:0101 -- önskat mönster
B:0001 -- läst mönster
C = A && B (pseudokod)
true ? C == A (pseudokod)
På svenska, om A och B är identiska så gör det ena annars gör det andra.

Eller också det bearing beskriver.
Användarvisningsbild
Oltronix
Inlägg: 500
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: 8 biter till en byte

Inlägg av Oltronix »

überfuzz skrev: Oj än en gång tycks jag retat upp en och annan person här. Detta trots att jag skrev övertydligt. Jag ber om ursäkt, jag trodde att jag var övertydlig i de pseudobegrepp använde, vidare att jag utryckte mig på ett extremt basalt sätt. Jag skrev ju till och med ut att det rörde sig om pseudokod... Gissningsvis är det personer som aldrig sett programkod eller inte kan programmera som reagerat. Nå ja, vi låter udda vara jämt, det är ju trots allt ett elektronikforum, inte programmeringsforum. Läs om and och or operatorer så kommer psuedokoden att bli kristallklar, gissningsvis även för er som aldrig sett progrmkod for. :-) :humm: jag antar att jag gör bäst i att sluta skriva mer på det här inlägget.


Detta tycker jag blir fel. Jag har sett vad flera av dessa personer skrivit i andra trådar. De är duktiga och kan Sw. Tror mig. Ett problem som finns i denna tråd är att du anser dig övertydlig men jag uppfattar det du skriver som väldigt otydligt. Detta forum är en guldgruva om du vänder det ryggen gör du ett misstag. Du behöver göra en nystart och sakta och säkert inse att beskriva problem och tekniska lösningar skall man hantera med ödmjukhet. Jag har jobbet 20år på en systemavdelning på ett hyffsat stort svenskt telkombolag som inte gör mobiler längre. Mycket missförstånd var det trots att man satt i samma rum runt samma withboard. Oftas löste vi problemen, missförstånden. Man kommer långt med ödmjukthet och stora öron. Med sårade känslor hamnar man direkt i källaren. Där nere blir det inte mycket resultat.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31642
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: 8 biter till en byte

Inlägg av MadModder »

Jag tror att resultatet bearings kod ger är rätt.
Originalkoden ger bara en etta, då både 0101 och 0001 är större än noll och är bara det som räknas med &&.
ie
EF Sponsor
Inlägg: 1406
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: 8 biter till en byte

Inlägg av ie »

Nä, 4 & 1 blir 0. Ingen gemensam bit satt.

Edit: Vart tog inlägget jag svarade på vägen?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: 8 biter till en byte

Inlägg av lillahuset »

Förvirringen sprider sig. :lol:
Knappas
Inlägg: 148
Blev medlem: 26 november 2008, 16:51:09
Ort: Stockholm

Re: 8 biter till en byte

Inlägg av Knappas »

ie skrev:Nä, 4 & 1 blir 0. Ingen gemensam bit satt.

Edit: Vart tog inlägget jag svarade på vägen?
Sorry jag tog bort det direkt då jag såg att bearing hade skrivit exakt samma sak som jag missat. Trodde inte någon skulle ha hunnit läsa det på de 10 sek som det låg där, än mindre kommentera det. :lol:

Och du har helt rätt 4 & 1 blir 0 jag tänkte | i skallen.... Suck.... :)
ie
EF Sponsor
Inlägg: 1406
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: 8 biter till en byte

Inlägg av ie »

Puh :doh: Då var det inte jag som var tokig!
Nerre
Inlägg: 27306
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: 8 biter till en byte

Inlägg av Nerre »

überfuzz skrev:Gissningsvis är det personer som aldrig sett programkod eller inte kan programmera som reagerat.
Det är väl snarare vi som kan något som reagerat.

Jag höll på med logikkretsar och lärde mig hur ABC80 fungerade inuti redan när jag gick högstadiet på 80-talet, på gymnasiet lärde jag mig Pascal, C, fortran och lite lisp, på högskolan sen blev det lite C++. Assembler och Basic kunde jag redan innan jag började på gymnasiet. Jag har debuggat en mikroprocessorlösning med en Z80 mha oscilloskop och identifierat två korsade adress-tåtar till ROM så jag fick den att fungera (detta gjorde jag som "praktik").

Och du menar att jag inte kan nåt? Det jag inte kan är möjligen "läsa tankar".
ie
EF Sponsor
Inlägg: 1406
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: 8 biter till en byte

Inlägg av ie »

Känner igen det där.

Mitt första datorbygge var på ett tejpat/belyst/etsat kretskort, med handassemblerad "boot"-programvara, som var handinknappad i ett EPROM.

Felsökningen skedde med oscilloskop som (pga databussmönstret) visade sig att det enda felet (innan det fungerade) var en jämförelse som inte skulle vara NOT.

Känns lite enklare nuförtiden...
Användarvisningsbild
Oltronix
Inlägg: 500
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: 8 biter till en byte

Inlägg av Oltronix »

bearing skrev: Det några försökte påpeka var att du har fel i att det är de logiska operationerna && och || som används på bytes i C. På bytes används aritmetiska operationer. Dessa har inte dubbla tecken, utan enkla, d.v.s & samt |. Logiska operationer görs på "bitar" (true / false) i C, inte bytes. Om du ändå använder en byte i en logisk operation kommer alla värden utom noll räknas som true, och 0 räknas som false.
En bra artikel som tydliggör detta:
https://en.wikipedia.org/wiki/Bitwise_o ... quivalents
https://en.wikipedia.org/wiki/Bitwise_operations_in_C
Tom med kodexempel som man kan leka lite med
E Kafeman
Inlägg: 3686
Blev medlem: 29 april 2012, 18:06:22

Re: 8 biter till en byte

Inlägg av E Kafeman »

en jämförelse som inte skulle vara NOT.
Dubbel negation=NOP eller x90 på 86 assembler :badgrin: .

Det var för övrigt hackerns viktigaste kod-instruktion att lära sej näst efter x75, jne.
Mha hex-editorn byttes x75yy mot x90x90 på rätt ställe i pseudo-koden "cmp ax,pass-string, jne exit"
Det var bara att starta debuggern och stega fram till första jne. Det fungerade i de flesta fall.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47223
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: 8 biter till en byte

Inlägg av TomasL »

Uber, problemet är att du rört till det någat alldeles förfärligt.
Starta om, tala om vad du har, och tala om vad du vill.
Riktiga scheman osv.

Till exempel:

Kod: Markera allt

Jag har 8 st strömbrytare som jag vill läsa av med en uC.
Beroende på strömbrytrnas äge vill jag att olika saker skall hända i programmet.
Om brytare 1 är dragen, men ingen annan skall händelse 1 ske.
Om brytare 3 är dragen, men inte brytare 2, de andra spelar ingen roll, skall händelse 2 ske.

osv, osv
Mr Andersson
Inlägg: 1409
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: 8 biter till en byte

Inlägg av Mr Andersson »

Ibland får jag känslan av att en viss amerikansk skoförsäljare bjudit in hela släkten till forumet. Precis samma beteende att be om hjälp och sen totalt ignorera svaren. :)
bearing skrev:

Kod: Markera allt

input = PORTB; //Read I/O port
mask = 0x0101; //Set mask
if ((input & mask) == mask)
{
  //We have a match!
  //Do something!
}
Det där blev nog ett litet tankefel. 0x101 är ju 100000001 binärt. Men om man bortser från det och antar att det var 0101 binärt som menades så matchar koden önskat värde = x1x1. Lillahusets förslag A==B är det som fungerar. Eventuellt A==(B & 0xF) för att begränsa till 4 bitar.

Edit: blandade ihop A och B. Det var ju B som var input som ska AND:as med 0xF.
Skriv svar