µChip XC16 hat Probleme bei Inline Assembler Befehlen

#3753894
Lesenswert?

Hallo Leute


Ich habe hier einen codepart den ich vom C30 Compiler auf den XC16 
Compiler portieren will. Das funktioniert auch alles super, bis auf ein 
Stück Code wo der Compiler mit aktivierter Optimierung aus dem Tritt 
gerät. Es handelt sich grob gesagt um folgendes Stück Code:

1
extern sint16 Math_CalcSinTaylor(uint16 phiX_u16)
2
{
3
    register sint16 AkkuA_s16 asm("A");
4
    register sint16 AkkuB_s16 asm("B");
5
    ...
6
    ...
7
    ...
8
    /* x^2 = x*x */
9
    AkkuB_s16 = __builtin_mpy(phiX_s16, phiX_s16, 0, 0, 0, 0, 0, 0);
10
    phiX2_s16 = __builtin_sac(AkkuB_s16, 0); /* store */
11
    ...
12
    ...
13
    ...
14
}

Die Fehlermeldung bei aktivierter Optimierungsstufe (egal welche) 
lautet:
1
../source/Core/HAL/Math.c: In function 'Math_CalcSinTaylor':
2
../source/Core/HAL/Math.c:401:1: error: Argument 0 should be an accumulator register (__builtin_sacr)
3
../source/Core/HAL/Math.c:401:1: error: Expected DSP accumulator result (__builtin_mac)

Daraus schliesse ich, dass der Compiler die Definition der Variablen 
AkkuA_s16 und AkkuB_s16 wegschmeisst.

Wie kann ich das denn verhindern?

Grüße
Daimonion
Gast #3754200
Lesenswert?

Geraten:
Vielleicht mußt Du die DSP-Register beim XC16 jetzt anders definieren 
als beim C30?

Oder vielleicht hilft auch schon ein volatile?
1
extern sint16 Math_CalcSinTaylor(uint16 phiX_u16)
2
{
3
    volatile register sint16 AkkuA_s16 asm("A");
4
    volatile register sint16 AkkuB_s16 asm("B");
5
    ...
6
}
#3754208
Lesenswert?

Danke für deine Antwort.

Leider konnte ich in den Style Guides hinsichtlich der Definition 
keinerlei Unterschied zwischen C30 und XC16 finden. Daher gehe ich erst 
mal davon aus, dass sich da nichts geändert hat.

Unseren Microchipmann habe ich dahingehend auch schon darauf angesetzt 
aber bisher konnte er mir noch nichts sagen.

volatile habe ich probiert. Dann compiliert er zwar, bringt aber ein 
warning dass die Variablen wahrscheinlich wegoptimiert werden könnten. 
Ach ne... ;)

Grüße
Daimonion

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren