Hallo,
Ich versuche gerade im AVR-Studio C++ auf einem AtXmega eine schleife
zur Verzögerung von ca 1us zu Programmieren.
Problem ist, dass wenn ich in
1 | for(int i=0;i<18;i++)
|
2 | {
|
3 | ;
|
4 | }
|
i bis 17 Zählen lasse, dies etwa 2,3us dauert.
setze ich
so sind es nur noch 80ns.
Wenn man
1 | for(int i=0;i<13;i++)
|
2 | {
|
3 | for(int i=0;i<17;i++)
|
4 | {
|
5 | ;
|
6 | }
|
7 | }
|
setzt bleiben es 80ns;
Hier scheint eine Potimierung am Werk zu sein, die Schleifen <18 einfach
weglässt.
Wie wird sie abgeschaltet?
1 | int readbit()
|
2 | {
|
3 | PORTF.DIRSET=0x04; //1 = setzen --> Ausgang
|
4 | PORTF.OUTCLR=0x04; //1 = Rücksetzen --> 0
|
5 | for(int i=0;i<18;i++)
|
6 | {
|
7 | ;
|
8 | }
|
9 | PORTF.OUTSET=0x04; //1 = Setzen --> 1
|
10 | PORTF.DIRCLR=0x04; //1 = Setzen --> Eingang
|
11 | if(PORTF.IN&0x04)
|
12 | {
|
13 | PORTF.DIRSET=0x04; //1 = setzen --> Ausgang
|
14 | PORTF.OUTSET=0x04; //1 = Rücksetzen --> 0
|
15 | return(1);
|
16 | }
|
17 | else
|
18 | {
|
19 | PORTF.DIRSET=0x04; //1 = setzen --> Ausgang
|
20 | PORTF.OUTSET=0x04; //1 = Rücksetzen --> 0
|
21 | return(0);
|
22 | }
|
23 | }
|