µChip XC16 hat Probleme bei Inline Assembler Befehlen

OP #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
}
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.