Rolf Magnus schrieb:
> Ja. Ist nach ISO-C auch völlig ok. Das nennt sich "as-if rule" und
> besagt, daß das Programm nicht exakt das tun muß, was im Code steht,
> sondern daß es reicht, wenn das "observable behavior" gleich ist
Aber das beobachtbare Verhalten ist m.E. anders, wenn der Compiler
aus dem hier:
1 | PORTA &= ~(1<<PA4); // neg. Peak beginnt
|
2 |
|
3 | Erg = Erg*100 / 36;
|
4 | Faktor = Erg*65 / 10000;
|
5 | signal = Faktor*1000000 / Erg;
|
6 |
|
7 | PORTA |= (1<<PA4); // neg Peak endet
|
das hier macht:
1 | PORTA &= ~(1<<PA4); // neg. Peak beginnt
|
2 | PORTA |= (1<<PA4); // neg Peak endet
|
3 |
|
4 | Erg = Erg*100 / 36;
|
5 | Faktor = Erg*65 / 10000;
|
6 | signal = Faktor*1000000 / Erg;
|
Das dürfte er ja.
Und wenn es tatsächlich so ist, wie kann ich den Compiler sanft dazu
zwingen, mir die Beobachtung der Rechenzeit zu ermöglichen? Ist da mit
Klammern/Blöcken was zu machen?
1 | PORTA &= ~(1<<PA4); // neg. Peak beginnt
|
2 | {
|
3 | Erg = Erg*100 / 36;
|
4 | Faktor = Erg*65 / 10000;
|
5 | signal = Faktor*1000000 / Erg;
|
6 | }
|
7 | PORTA |= (1<<PA4); // neg Peak endet
|
Und was ist bei sowas:
1 | void calc()
|
2 | {
|
3 | Erg = Erg*100 / 36;
|
4 | Faktor = Erg*65 / 10000;
|
5 | signal = Faktor*1000000 / Erg;
|
6 | }
|
7 | :
|
8 | :
|
9 | PORTA &= ~(1<<PA4); // neg. Peak beginnt
|
10 | calc();
|
11 | PORTA |= (1<<PA4); // neg Peak endet
|
Darf der Compiler das auch umstellen:
1 | void calc()
|
2 | {
|
3 | Erg = Erg*100 / 36;
|
4 | Faktor = Erg*65 / 10000;
|
5 | signal = Faktor*1000000 / Erg;
|
6 | }
|
7 | :
|
8 | :
|
9 | PORTA &= ~(1<<PA4); // neg. Peak beginnt
|
10 | PORTA |= (1<<PA4); // neg Peak endet
|
11 | calc();
|
Oder, um die Frage umzustellen:
(Wie) kann ich denn mit den hier aufgeführten Mitteln (Oszi + Portpin)
die benötigte Zeit für eine Berechnung ermitteln?
Es hilft ja nichts, alle beteiligten Variablen auf volatile zu setzen,
das wäre dann ja nicht mehr der Code, den ich eigentlich vermessen
will...