Forum: Mikrocontroller und Digitale Elektronik MSP430 Compiler ignoriert Funktion


von Walter L. (charly2)


Lesenswert?

Hallo,
CCSV6 Free license und full license ->  Launchpad MSP430G2553
Hat jemand einen Tipp, warum DELAY_USEK(200); "wegcompiliert" wird?


VG Walter

#include <msp430.h>
void clocksInit(void);
void DELAY_USEK(unsigned int);
//
/*
 * main.c
 */
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
    clocksInit();
      P1DIR |= BIT0 ;    // Set P1.0 to output direction
    for(;;)
    {
      P1OUT |= BIT0 ;    // Set P1.0 to output direction
        DELAY_USEK(200); // !!!!!!!!!! ist im disasm. nicht vorhanden 
und wird auch nicht ausgeführt.
      P1OUT &= ~BIT0;
       DELAY_USEK(200); // !!!!!!!!!! breakpoint nicht möglich
    };
  return 0;
}

void DELAY_USEK(unsigned int ui_lok)
{
       while(ui_lok)
       {
          ui_lok--;
       }
}

void clocksInit(void)
{
    BCSCTL1      = CALBC1_16MHZ;                  // Set DCO ~ 16 Mhz
    DCOCTL       = CALDCO_16MHZ;
    BCSCTL1     |= DIVA_1;                        // 
ACLK/(0:1,1:2,2:4,3:8)
    BCSCTL3     |= LFXT1S_2;                      // LFXT1 = VLO
}
// ENDE code

von (prx) A. K. (prx)


Lesenswert?

Diese Funktion hat aus Sicht der Sprachdefinition keinerlei Auswirkung 
und kann daher ohne Verletzung des C Standards wegoptimiert werden.

Mindestlaufzeit ist keine vom Standard geforderte Eigenschaft.

von flups (Gast)


Lesenswert?

Hi,

mach mal die Variable volatile

von Thomas L. (thomas_hx)


Lesenswert?

volatile lautet das Zauberwort:
volatile unsigned int ui_lok , sonst Optimiert der Compiler die ganze 
Funktion weg,da ui_lok im Programm nicht mehr verwendet wird.

von Walter L. (charly2)


Lesenswert?

flups 1000 Dank. Es funkt...

VG Walter

von (prx) A. K. (prx)


Lesenswert?

Thomas L. schrieb:
> da ui_lok im Programm nicht mehr verwendet wird.

Und selbst dann würde die Funktion u.U. durch die Konstante 0 ersetzt.

Compiler und Programmierer sind wie Mann und Frau. Den Anspruch der 
Frau, nicht das zu tun was sie sagt, sondern das was sie meint, kann 
Mann mangels Sensorik oft nicht erfüllen.

von Walter L. (charly2)


Lesenswert?

Thomas Lembke,  flups

Nochmals danke.
Der Compiler für den TMS320F28069 hat nicht dieses Verhalten.

VG Walter

von (prx) A. K. (prx)


Lesenswert?

Walter L. schrieb:
> Der Compiler für den TMS320F28069 hat nicht dieses Verhalten.

Das Verhalten eines bestimmten Compilers ist kein Massstab für andere 
Compiler. Kein Compiler ist verpflichtet, diese Optimierung 
durchzuführen. Er darf, er muss nicht.

von Jim M. (turboj)


Lesenswert?

Walter L. schrieb:
> Der Compiler für den TMS320F28069 hat nicht dieses Verhalten.

Nur solange der Optimizer aus ist. Praktisch alle C-Optimizer sollten 
den leeren Schleifenblock ersatzlos entfernen.

von (prx) A. K. (prx)


Lesenswert?

Compiler speziell für für DSP/Microcontroller werden diese Optimierung 
evtl nicht durchführen.

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.