Forum: Mikrocontroller und Digitale Elektronik Wieso wird nicht in die Funktion gesprungen?


von ibo (Gast)


Lesenswert?

Hallo Zusammen

Alsooooo ich habe eine Funktion in der main:
1
void EnterSleepMode( uint8_t ucType )
2
{
3
    PMC->PMC_FSMR &= (uint32_t)~PMC_FSMR_LPM ;
4
    SCB->SCR &= (uint32_t)~SCB_SCR_SLEEPDEEP_Msk ;
5
6
    if ( ucType == 0 )
7
    {
8
        __WFI() ;
9
    }
10
    else
11
    {
12
        __WFE() ;
13
    }
14
}
Und hier drin die __WFI() die ist in core_cm3.h so definiert:
static __INLINE  void __WFI( void )               { __ASM ("wfi"); }
static __INLINE  void __WFE( void )               { __ASM ("wfe"); }

Wenn ich jetzt im DebugModus bei der Funktion bin und reinspringen 
möchte springt es nicht rein. In einer DemoApplikation sprint der 
Debugger aber rein. Was mache ich hier falsch? core_cm3.h wird nicht 
direkt in main included sondern indirekt über andere includes. Könnte 
das der Grund sein obwohl ich es auch direkt includen probiert habe.

von Peter II (Gast)


Lesenswert?

ibo schrieb:
> Alsooooo ich habe eine Funktion in der main:

wie kann man in der main eine funktion haben?

Wird nun EnterSleepMode nicht aufgerufen oder eine andere funktion?

von ibo (Gast)


Lesenswert?

Mit main meine ich in dem C File wo main drin ist, den ich main benannt 
habe :D
EnterSleepMode ja aber WFI() oder WFE() nicht

von Stefan++ (Gast)


Lesenswert?

Hallo,

wie soll das
> reinspringen
bei einer inline-Funktion die genau aus einer Assembleranweisung besteht 
aussehen ???

Was erwartest Du ???

von ibo (Gast)


Lesenswert?

Stefan++ schrieb:
> Hallo,
>
> wie soll das
>> reinspringen
> bei einer inline-Funktion die genau aus einer Assembleranweisung besteht
> aussehen ???
>
> Was erwartest Du ???

Das es diese inline Funktion ausführt... also sich schlafen legt.
Dies funktioniert in der DemoApplikation, bei mir jedoch nicht...

von Daniel V. (danvet)


Lesenswert?

ibo schrieb:
> Stefan++ schrieb:
>> Hallo,
>>
>> wie soll das
>>> reinspringen
>> bei einer inline-Funktion die genau aus einer Assembleranweisung besteht
>> aussehen ???
>>
>> Was erwartest Du ???
>
> Das es diese inline Funktion ausführt... also sich schlafen legt.
> Dies funktioniert in der DemoApplikation, bei mir jedoch nicht...

Dissassembler aktivieren...dann siehst du was er macht.

von Pako (Gast)


Lesenswert?

ibo schrieb:
> Wenn ich jetzt im DebugModus bei der Funktion bin und reinspringen
> möchte springt es nicht rein.

Was heißt "bei der Funktion"?

von Cortex (Gast)


Lesenswert?

also bei den LPCs (mit Cortex M3 Kern) kann man die Stromsparmodi nicht 
debugen, da gibts glauebe ich auch eine APPNote dazu

von ibo (Gast)


Lesenswert?

Ich habe den Grund glaube ich: Undzwar bin ich im DebugModus mit 
GoToDefinition in einem von IAR bereitgestellten intrinsics.h datei 
gelandet.
GoToDefinition sprngt zu:
__ATTRIBUTES void __WFE( void );
__ATTRIBUTES void __WFI( void );

Obwohl __WFE und __WFI in core_cm3.h wie weiter oben schon gepostet ist 
deklariert ist. Wie löse ich das jetzt?

von ibo (Gast)


Lesenswert?

Hat den keiner eine Idee?

von Der L. (vhdl-neuling)


Lesenswert?

Benenn __WFE und __WFI doch einfach mal um, also in der main-Datei und 
in der core_cm3.h.

So kannst du schon mal Konflikte mit Gleichnamigkeiten ausschließen. 
(Also falls ich dein Problem richtig verstanden habe ;) )

MfG,
derLars

von ibo (Gast)


Lesenswert?

Ich habe es auch genauso gelöst aber leider "schläft" mein Prozessor 
nicht :-(

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.