Hallo, wieso kann ich den ersten wert des Arrays nicht aufrufen? int bitmuster [] = { 0b10101010, 0b11111111, 0b00000000, 0b11001111, 0b11000000, 0b10101111, 0b11101011, 0b11101010 }; PORTB = bimuster [0]; Ohne Funktion (der cycle counter des simulators läuft läuft nicht einmal) hingegen kann ich [1] ... [7] ohne probleme aufrufen?! Was mache ich falsch? Danke!
Es liegt nicht an dem Schreibfehler ;) Im Programm steht natürlich PORTB = bitmuster [0];
Benjamin schrieb: > Ohne Funktion (der cycle counter des simulators läuft läuft nicht > einmal) hingegen kann ich [1] ... [7] ohne probleme aufrufen?! Was soll der Absatz überhaupt bedeuten?
Oh ja ... entschuldigt Also ich kann das Bitmuster [0] nicht auf PORTB anzeigen in der Sumulation. Der Cycle Counter läuft auch nicht weiter wenn ich in einer while Schleife auf Stelle [0] zugreifen will. while(1{ PORTB = bitmuster [0]; } mit [1] ... [7] geht das ohne probleme und der Simulator läuft ebenfalls?!
Benjamin schrieb: > Oh ja ... entschuldigt > > Also ich kann das Bitmuster [0] nicht auf PORTB anzeigen in der > Sumulation. Wer hindert dich denn daran?
Wenn ich das wüsste müsste ich ja hier nicht fragen! Ich kann auf die Stelle des Arrays nicht zugreifen...
Zeig doch mal dein ganzes Programm her. Also das Minimalprogramm, dass den Fehler noch enthält und kompilierbar ist.
Ich stelle grad mit Erschrecken fest, dass das nur bei [1] weiter läuft und bei allen anderen nicht?! Ratlosigkeit macht sich breit! #include <avr/io.h> char bitmuster [8] = { 0b10101010, 0b11111111, 0b00000000, 0b11001111, 0b11000000, 0b10101111, 0b11101011, 0b11101010 }; int main(void) { DDRB = 0xff; while(1) { PORTB = bitmuster [0]; } }
Benjamin schrieb: > weiter läuft darunter muß man sich was vorstellen? Welcher AVR? Evtl. misst du nur an einem Pin und hast gerade da einen Konflikt mit JTAG?
Benjamin schrieb: > Ich stelle grad mit Erschrecken fest, dass das nur bei [1] weiter läuft > und bei allen anderen nicht?! > Ratlosigkeit macht sich breit! Hast du den Optimizer des Compilers aktiviet? So einfache Testprogramme wie deines tendieren dazu, vom Compiler auf ein einfaches
1 | int main() |
2 | {
|
3 | DDRB = 0xff; |
4 | |
5 | while(1) |
6 | PORTB = 0b10101010; |
7 | }
|
zusammengekürzt zu werden. Und da dieses mit deinem Original in der Schreibweise nicht mehr viel zu tun hat (wohl aber funktional 100% identisch ist), hat der Debugger dann keine Zeilennummer mehr, die er dir angeben könnte. Mach etwas sinnvolles mit dem Array, wozu du auch tatsächlich ein Array benötigst. Zb
1 | #include <avr/io.h> |
2 | #include <utils/delay.h> |
3 | |
4 | uin8_t bitmuster [8] = { |
5 | 0b10101010, |
6 | 0b11111111, |
7 | 0b00000000, |
8 | 0b11001111, |
9 | 0b11000000, |
10 | 0b10101111, |
11 | 0b11101011, |
12 | 0b11101010 |
13 | };
|
14 | |
15 | |
16 | int main(void) |
17 | |
18 | {
|
19 | uint8_t i; |
20 | DDRB = 0xff; |
21 | |
22 | while(1) |
23 | {
|
24 | for( i = 0; i < 8; ++i ) { |
25 | PORTB = bitmuster[i]; |
26 | _delay_ms( 1000 ); |
27 | }
|
28 | }
|
29 | }
|
So .... nachdem ich mir jetzt Hardware besorgt habe kann ich vermelden, dass es wohl am Simulator liegt. Auf einem Mega8 läufts. Also das geht im Simulator nicht, realtime simulieren habe ich mir schon vor Wochen aus dem kopf geschlagen .... Wofür ist der Simulator des AVR Studio zu gebrauchen?? Danke euch!
Karl Heinz Buchegger, das macht es ja jetzt auch ich hatte das nur aus dem Programm genommen! Danke!
Benjamin schrieb: > Karl Heinz Buchegger, > das macht es ja jetzt auch ich hatte das nur aus dem Programm genommen! Du machst dir hier keine Freunde, wenn du Programmcode zur Diskussion stellst, der mit deinem eigentlichen Programm nur wenig zu tun hat. Dann suchen alle an den falschen Stellen nach Problemen.
Benjamin schrieb: > Ich stelle grad mit Erschrecken fest, dass das nur bei [1] weiter läuft > und bei allen anderen nicht?! > Ratlosigkeit macht sich breit!
1 | #include <avr/io.h> |
2 | |
3 | char bitmuster [8] = { |
4 | 0b10101010, |
5 | 0b11111111, |
6 | 0b00000000, |
7 | 0b11001111, |
8 | 0b11000000, |
9 | 0b10101111, |
10 | 0b11101011, |
11 | 0b11101010 |
12 | };
|
13 | |
14 | int main(void) |
15 | |
16 | {
|
17 | DDRB = 0xff; |
18 | |
19 | |
20 | while(1) |
21 | {
|
22 | PORTB = bitmuster [0]; |
23 | }
|
24 | }
|
Dieser Code lässt sich problemlos simulieren, Optimierung -O0, Haltepunkt auf PORTB = bitmuster [0]; Bei Optimierung > -O0 wird's schwieriger, da hilft dann das Disassemblerfenster oder der Pausebutton, damit der Sim das Ergebnis auch anzeigen kann. Benjamin schrieb: > So .... nachdem ich mir jetzt Hardware besorgt habe kann ich vermelden, > dass es wohl am Simulator liegt. Ich würd' sagen, Du hast nur kein Ahnung.
Oh ich bin verblüft ... Dann gehts mit Schleifen sogar in realtime mit besagter Optimierung! Danke MWS ;)
Benjamin schrieb: > Dann gehts mit Schleifen sogar in realtime mit besagter Optimierung! Das mit 'realtime' glaube ich nicht.
Benjamin schrieb: > Wenn ich Ahnung hätte würde ich nicht fragen oder? Fragen ist ja auch kein Problem, eher Feststellungen ohne Grund wie: Benjamin schrieb: > dass es wohl am Simulator liegt. > Dann gehts mit Schleifen sogar in realtime mit besagter Optimierung! Wie Du festgestellt hast, nicht so ganz. Echtzeit ist aber zum Debuggen auch nicht notwendig. Die Optimierung dagegen kann schon mal Probleme bei der Simulation bereiten, denn der erzeugte Assemblercode ist dann nicht mehr unbedingt kohärent mit dem C-Code. Da wird dann zum Teil Code komplett wegoptimiert. Schön daran zu sehen, wenn man mit Rechtsklick auf einen Befehl geht und "Goto Disassembly" ist ausgegraut.
MWS schrieb: > Fragen ist ja auch kein Problem, eher Feststellungen ohne Grund wie: > > Benjamin schrieb: >> dass es wohl am Simulator liegt. Der Grund steht doch direkt dahinter: Benjamin schrieb: > Auf einem Mega8 läufts. MWS schrieb: > Die Optimierung dagegen kann schon mal Probleme bei der Simulation > bereiten, denn der erzeugte Assemblercode ist dann nicht mehr unbedingt > kohärent mit dem C-Code. Da wird dann zum Teil Code komplett > wegoptimiert. Aber keine Zugriffer auf I/O-Register. Außerdem hat das nichts speziell mit der Simulation zu tun.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.