Forum: Mikrocontroller und Digitale Elektronik STM8L + Cosmic compiler: optimierung, die code unlogisch macht


von st (Gast)


Lesenswert?

Hallo, ich hab folgenden Code:
1
#include "stm8l15x.h"
2
#include "stm8l15x_it.h"
3
4
main()
5
{ 
6
  uint8_t index;
7
  uint8_t element;
8
  CLK_DeInit();
9
  CLK_SYSCLKSourceSwitchCmd(ENABLE);
10
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
11
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
12
  while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)
13
  {}
14
  LCD_GLASS_Init();
15
  while(1)
16
  {  
17
    for(element = 0x00; element <= 0xFF; element++){
18
      for(index = 0x00; index <= 0xFF; index++){
19
        LCD->RAM[(uint8_t)element] = 0x00;
20
        LCD->RAM[(uint8_t)element] = index;
21
      }
22
      LCD->RAM[(uint8_t)element] = 0x00;
23
      delay_ms(750);
24
    }
25
  }
26
}

Problem:
die erste for-schleife mit element wird wegoptimiert... D.h. element 
bleibt immer als 0x00 stehen. Warum macht mir der Compiler das?

von Christian (Gast)


Lesenswert?

klar, element ist ein uint8 und das ist IMMER kleiner oder gleich als 
0xFF.
Ist also ein klassischer Layer 8 Fehler.

von st (Gast)


Lesenswert?

Oh mann... So aufm Schlauch stehen... Auf das hätte man auch selber 
kommen können :) Aber danke!

von Tom (Gast)


Lesenswert?

>Auf das hätte man auch selber kommen können

Zum Beispiel, indem man die Compiler-Warnungen so einstellt, dass jede 
Kleinigkeit bemängelt wird. GCC würde dann zu deinem Programm sagen:
warning: comparison is always true due to limited range of data type

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
Noch kein Account? Hier anmelden.