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!
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?!
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
intmain()
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
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!
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
charbitmuster[8]={
4
0b10101010,
5
0b11111111,
6
0b00000000,
7
0b11001111,
8
0b11000000,
9
0b10101111,
10
0b11101011,
11
0b11101010
12
};
13
14
intmain(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.
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.