jesse skrev:sodjan skrev:Man använder aldrig signed till variabler som enbart ska innehålla "text".
Det är ju lite lustigt, egentligen, eftersom "strängar" i C består av arrayer med
char, som just är signed. Annars får man definiera dem som
unsigned char. Själv har jag gjort så (för AVR) att jag använder typen
uint8_t istället för char.
BIT är vad du är intresserad av. Var är det du ska läsa av bitarna? Skickar du data från din PC till en AVR som ska tolka bitarna eller är det tvärt om?
När man tolkar bitar i en AVR kan man göra på många sätt. Skriver du i C kan du t.ex. göra så här:
Kod: Markera allt
uint8_t byte = 0b00110010;
#define BIT0 1
#define BIT1 2
#define BIT2 4
#define BIT3 8
#define BIT4 16
#define BIT5 32
#define BIT6 64
#define BIT7 128
#define check_bit(byte,bit) (byte and bit)
//senare i programmet vill du veta om BIT4 är satt:
if (check_bit(byte, BIT4)) {
// Gör något
}
Givetvis döper du bitarna till det de ska vara till, istället för BIT0, BIT1 etc:
Kod: Markera allt
uint8_t controlbits = 0b00001000;
#define MOTOR_ON 1
#define TEMP_HIGH 2
#define STOP_ALL 4
if (check_bit(controlbits, MOTOR_ON) {
stoppa_motor();
}
Hej
jesse, tack för ditt bidrag!
Det jag ska använda det till är kommunikation i båda riktningar. Antingen mellan AVR och PC eller mellan AVR och AVR. Så samtliga delar ska prata samma språk. AVR noderna kommer ju sköta sig självt, men om man behöver felsöka exempelvis så ska man kunna koppla in en dator på nätverket som kan lyssna av och skicka trafik in på nätet.
Att namnge bitarna har jag tänkt på, har sett det i flera exempel, bara att jag inte kommit dit. Men jag tycker det verkligen är en smart grej. Att ha en funktion som;
Kod: Markera allt
if (check_bit(byte, BIT4)) {
// Gör något
}
påverkas väl inte av om exempelvis hela byten är satt till 1 inte sant? Du har säkert inte kollat på min kod, men jag lägger in lite här, bara för att jämföra.
Kod: Markera allt
// Check if a specific bit is set
int is_in_use(char datacheck, int bit_num)
{
return datacheck & 1<<bit_num;
}
Nu vet jag inte om datatyperna är "korrekta", men det fungerar!

Hur som, min funktion är väl i stort sett likvärdig med vad din "check_bit" funktion skulle göra, inte sant?
Jag vill inte rätta eller så, det är mest för att jag inte ska förvirra bort mig som jag frågar om följande;
Kod: Markera allt
#define MOTOR_ON 1
if (check_bit(controlbits, MOTOR_ON) {
stoppa_motor();
}
Den koden frågar ju funktionen check_bit om controlbits variabeln har bit 1 satt. Med satt menas väl 1? Eller hög? Med din fråga så vill man att om motorn är igång, så ska den stängas av. Har jag förstått det rätt? Det är med största sannolikhet ingen kod som är tagen från något verkligt projekt så du har säkert bara svängt ihop det.
Men jag frågar därför att när jag läste det först så tänkte jag att om motor_on var 1 så borde väl motorn startas. Dvs, att en kontrollbyte kom in till processorn med information om att bit 1 var på och att då motorn skulle startas. Man kan väl säga att du istället menade tvärtom i din kod, om jag förstår rätt
Jag känner mig så dum, jag kan ju IF satser och jag vet ju hur man skriver funktioner osv. Har jobbat med PHP som på många sätt liknar C, även om mycket är olika också. PHP har ju som sodjan säger, något som C inte har, en färdig/separat datatyp för text/strängar. ( även om du inte pratar om PHP direkt sodjan

) Det gör ju att programmering i PHP är smidigare på många sätt för att snabbare få till lösningar, tycker jag som är van vid det. För er, om ni skulle börja med det helt från början, kanske skulle tycka tvärtom
Jag tror inte heller att ni försöker dumförklara mig eller tror att jag inte kan någonting, inte så. Jag har bara lite svårt att uttrycka mina tankar/funderingar ibland

Vilket säkert gör att folk missförstår mig, plus att jag ofta missförstår kod tills jag kan köra den och se vad som händer. Sen tar jag gärna tillfället i akt att fråga (vilket resulterar i många frågor

) när ni som faktiskt kan så långt mycket mer än mig har möjlighet att ge era synpunkter och idéer, jag uppskattar verkligen den tid ni har gett mig i mina frågor!
