Autor |
umstieg von JAVA auf C.... ein paar anfängerfragen |
|
|
|
|
BID = 158337
MinceR Stammposter
Beiträge: 277
|
|
hallo, ich hab ein paar fragen zu denen ich komischerweise nix ordentliches finde.
also, ich möchte einen sting ausgeben und gleichzeitig zwei variablen. ausserdem möchte ich am anfang eine zahl einlesen. ich hoffe ihr könnt mir verraten wie ich das mache. ich hab irgendwie probleme damit, das schlimmste ist aber das ich aus dem kack compiler nicht schlau werde.
#include <stdio.h>
int main()
{
int b=1;
int eingabe=2;
printf ( "durch welche zahl soll ich 1-50 sauber teilen?\n" );
//eine zahl einlesen und in variable eingabe reinschreiben.
while(b<50){
if (b%eingabe== 0){
printf ( "kann man sauber teilen durch\n" );
}
b=b+1;
}
return 0;
}
MfG MinceR |
|
BID = 158338
MinceR Stammposter
Beiträge: 277
|
|
ach das mit der ausgabe hab ich direkt hingekriegt. dank meinem schlauen buch
printf ( "%i kann man sauber teilen durch %i\n",b,eingabe );
so klappt das proggi schon, nur ich möchte noch irgendwie eine integer zahl in eingabe reinkriegen. das das irgendwie mit scanf geht hab ich auch schon rausgekriegt. hmm :D |
|
BID = 158340
Nukeman Schriftsteller
Beiträge: 754 Wohnort: bei Kleve
|
Hi MinceR,
//eine zahl einlesen und in variable eingabe reinschreiben.
ersetzen durch:
scanf("%d",&eingabe);
-> liest an die Adresse von der Variablen eingabe (= &eingabe)
eine Zahl ein die im Format %d (=dezimal) eingegeben wird.
( oder %x für Hex-Eingabe usw. )
Ich hoffe das hilft Dir weiter.
Gruss,
Stefan
|
BID = 158341
MinceR Stammposter
Beiträge: 277
|
jou danke danke. das & hat ich vergessen. muss wohl doch mein "C für dummies" suchen :D
|
BID = 158395
MinceR Stammposter
Beiträge: 277
|
ich hab noch ne frage, ich suche eine möglichkeit in einer 1 byte variablen z.b. bit0 , bit1, bit2 usw einzeln zu stetzen, nicht über 1,2,4,8... dazuzuaddieren. sondern auch so für den fall das bit2 schon gesetzt ist. das ganze natürlich auch in umgekehrter reienfolge.
da sollt es doch eigentlich was schön einfaches für geben. ich hab mir da was überlegt wie ich das machen könnte aber das wird aaaaarg kompliziert. so z.b. das ich mir boolean variablen von bit0 bis 7 definiere alle erst mal auf 0 sowie das ausgangsbyte. dann wenn ich einer funktion z.b. bit0, 1 übergebe wird dieses gesetzt und auch zum byte 1 dazugezählt, vorausgesetzt das es nicht schon 1 ist. also ziemlich umständlich
im umgegehrten fall wollt ich mir zuerst eine funktion schreiben der ich ein byte übergebe und die mir dann die boolschen variablen bit0 bis bit7 so setzt wie es in der byte variablen ist.
also wenn das byte >=128 dann setze variable bit7.
byte minus 128
wenn byte >=64 dann setze variable bit6 usw usw.
am ende hab ich dann 2 seiten quelltext nur für die bits in einem byte zu lesen oder zu schreiben.
ich muss nämlich an einer memory mapped io karte einzelne bits an einem port ausgeben (z.b. led an/aus) am nächsten port was einlesen usw. und ich kann der aber nur den zustand von einem port also 1 byte übergeben.
p.s. Hiiilfe
|
BID = 158597
Nukeman Schriftsteller
Beiträge: 754 Wohnort: bei Kleve
|
Hi nochmal,
das müsste in etwa so gehen:
Code : |
union
{
unsigned char by;
struct
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
} bfld;
} unByte;
|
|
Die Bitfelder b0..b7 sind dabei dem Byte "by" überlagert.
Wichtig der typ unsigned char muss dann auch ein Byte
gross sein.
Angesprochen wird das dann im Programm z.B. so:
unByte.by = 0x44; // direkt das ganze Byte ansprechen
unByte.bfld.b0 = 1; // hier wird nur das Bit b0 verändert
-> jetzt ist unByte.by = 0x45;
Bin mir momentan aber nicht sicher, ob die Bitfelder
ANSI-C - konform sind, evtl. kann das also nicht jeder
Compiler.
Gruss,
Stefan
[ Diese Nachricht wurde geändert von: Nukeman am 3 Feb 2005 21:51 ]
|
BID = 158682
giwer Stammposter
Beiträge: 202
|
#define BIT_0 0
#define BIT_1 1
...
#define BIT_7 7
uint var;
var |= ((1<<BIT_1) | (1<<BIT_6)); // setzt Bit 1 und 6 in Variable var auf 1
var &= ~((1 << BIT_1) | (1 << BIT_5)); // setzt Bit 1 und 5 in Variable var auf 0
struct
{
unsigned int bit_0:1;
unsigned int bit_1:1;
unsigned int bit_2:1;
unsigned int bit_3:1;
unsigned int bit_4:1;
unsigned int bit_5:1;
unsigned int bit_6:1;
unsigned int bit_7:1;
} bitfeld;
bitfeld.bit_5 =1; // Bit 5 setzen
bitfeld.bit_4 =0; // Bit 4 löschen
|
BID = 158753
MinceR Stammposter
Beiträge: 277
|
dank euch,
ich habs hingekriegt. C ist ja ne ziemlich geile sprache. besonders gut find ich das die so schön schnell ist.
ich hab mitlerweile auch raus wie ich ein byte maskiere, brauch ja nur ein & ums zu UNDen
so nun hab ich noch ne kleine frage, ich hab ja die programme fürn PC geschrieben um da mithilfe einer zusatz IO karte was auszugeben.
wie schauts denn aus wenn ich nu einen µC beschreiben will. beim alten AVR studio (version 3.5) ist meines wissens ja ein kostenloser C compiler drin(bin ich gerade am saugen, mit isdn brauchts da was ). wenn ich stack usw initialisiert hab kann ich dann so direkt mit dem C proggi loslegen?
ich hab ja schon kleine bis grosse proggis in assembler fürn at90 und atmegas gemacht. muss ich da irgendwas dolles beachten oder kann ich so in die tasten hauen?
mich interressieren das sehr weil ich mich bei assembler natürlich um alle rechnungen drücke bei denen komma usw zahlen rauskommen. das muss in C ja wunderbar gehen.
MfG MinceR
|
BID = 158768
giwer Stammposter
Beiträge: 202
|
Hast wahrscheinlich schon gemerkt, das AVR Studio kein C-Compiler hat.
Ich verwende WinAvr, gibt’s kostenlos unter http://sourceforge.net/projects/winavr/
Das Programm unterstützt alle AVR Mikrocontroller und vieles mehr.
Deine in C geschriebene Programme kannst dann auch in AVR Studio simulieren.
PS. die aktuelle Version ist AVR Studio 4.
|
BID = 158848
MinceR Stammposter
Beiträge: 277
|
ja ich habs nu auch gelesen. in meiner ausbildung war avr studio mit C erweitert. aber das muss man selbst erst einstellen.
werd mir das mal nacher angucken wenn ich von meiner mopped tour zurück bin. die erste fahrt nach winterpause ist immer die geilste. da kommt einem alles über 100 so schnell vor :D
|