mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F407VG Assembler für STM32F429ZI convertieren.


Autor: Christopher S. (shalec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich beschäftige mich mit dem FourQ Projekt von Microsoft für ARM [1]. 
Dort habe ich herausgefunden, dass die funktion ecc_mul, bzw. 
ecc_precomp nicht funktioniert. Dies liegt daran, dass die 
Standardfunktionen für die Arithmetik alle in Assambler geschrieben 
wurden und dieser Code auf dem F429 nicht läuft. Als Beispiel soll 
zunächst [2] und die Funktion fp2add1271_a dienen.

Ich vermute jedenfalls dass es daran liegt, dass diese Funktion nicht 
läuft.

Vorgehen: FourQlib erzeugen, kopieren und in CooIDE einfügen. Test 
schreiben und ausführen. Müssen die *.s Dateien auch kopiert und gelinkt 
werden? Bin sehr sehr neu in C und µC.

Vielen Dank für die Hilfe schon mal :)


[1] 
https://github.com/Microsoft/FourQlib/tree/3507244...

[2] 
https://github.com/Microsoft/FourQlib/blob/3507244...

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christopher S. schrieb:
> Ich vermute jedenfalls dass es daran liegt, dass diese Funktion nicht
> läuft.

Eher unwahrscheinlich. Die beiden Prozessoren sind identisch. Solange 
keine Zugriffe auf Peripherie erfolgen sollte es problemlos übertragbar 
sein.
Wie äußert sich denn "läuft nicht "? Stürzt es ab?

Autor: Christopher S. (shalec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lasse beim Beginn und am Ende des Programmablaufs eine LED blinken. 
Das Blinken am Ende wird leider nicht erreicht. Dazu gibt es nur zwei 
Gründe: Irgendwo hängt der Prozessor in einer Endlosschleife oder er 
bricht ab. Da ich keine Schleifen gesehen hatte, wird der Prozessor die 
Berechnung abbrechen.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann starte das Programm mal im Debugger und finde heraus wo genau es 
stehen bleibt. Mit LEDs ist das ja Blindflug.

Autor: Adapter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christopher S. schrieb:
> Ich lasse beim Beginn und am Ende des Programmablaufs eine LED
> blinken.
> Das Blinken am Ende wird leider nicht erreicht. Dazu gibt es nur zwei
> Gründe: Irgendwo hängt der Prozessor in einer Endlosschleife oder er
> bricht ab. Da ich keine Schleifen gesehen hatte, wird der Prozessor die
> Berechnung abbrechen.

Vermutlich hängt der Prozessor in einem Fault Handler. Da hilft 
natürlich nur das was Dr. Sommer bereits gesagt hat. Es kann sein, dass 
durch das Speicherlayout der Stack auf dem M4 zu klein ist. Oder 
irgendwas Anderes. Ohne genauere Infos (also wo er hängt und dann Dump 
der SCB Register) ist es in der Tat ein klassischer Blindflug.

Autor: Christopher S. (shalec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann vielen Dank soweit. Ich habe bislang den Debugger von CooCox 
probiert, kann mit den Informationen aber nichts anfangen. Auf einem 
Fenster steht "disassembler" und auf einem anderen der Code. Gefunden 
habe ich jedenfalls, dass der Fehler in der genannten Funktion steckt.

Entwickelt wurde das Projekt für den 407VGT, der ja weniger RAM und 
Flash hat.

Gibt es einen gut bewährten Debugger, dessen Output auch ein Laie 
verstehen kann? :)

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Laie hochoptimierten kryptographischen Assembler Code debuggen? 
Uhhm...
Na ja, kannst ja mal die Debugger von Keil uVision und SW4STM32 
probieren. Die Grundlagen musst du aber auch da für kennen. Lies mal das 
ARMv7M Architecture Reference Manual, damit du überhaupt weißt womit du 
es zu tun hast.

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast dem Compiler und dem Linker aber schon gesagt, ob hard-float 
oder soft-float genutzt werden soll, und das auch konsistent?

Und das Stack-Layout hängt nicht an der CPU. Man kann auch bei viel 
verfügbarem Speicher einfach zuwenig davon reservieren. Es wird z.B. 
irgendwo ein globales Array deklariert, dessen Adresse dann via 
Linkerscript an den Anfang des Binaries kopiert wird (als erster Eintrag 
der Vektortabelle).

Autor: Christopher S. (shalec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe praktisch die Befehlskette vom Makefile übernommen und alles 
konsistent gelassen.

Das geht an den Linker:
-mcpu=cortex-m4; -mfpu=fpv4-sp-d16; -mfloat-abi=hard; -mthumb; -Wall; -g; -nostartfiles; -Map=LED.map; -O3; --gc-sections; -lm; -lgcc; -lc; -Llib\; -lfourq; -L${linkdir}; -T${linkdir}/link.ld; 

Und das an den Compiler:
-mcpu=cortex-m4; -mfpu=fpv4-sp-d16; -mfloat-abi=hard; -mthumb; -Wall; -ffunction-sections; -g; -O3;  -MD; -DSTM32F4; -D USE_ENDO;-D _NO_CACHE_MEM_; -DUSE_STDPERIPH_DRIVER; -D__ASSEMBLY__; -D__FPU_USED; -DSTM32F407VG; -DSTM32F4XX; -I.; 

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.