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


von Christopher S. (shalec)


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/350724441ce8607cb20b851697780266a45e84c2

[2] 
https://github.com/Microsoft/FourQlib/blob/350724441ce8607cb20b851697780266a45e84c2/FourQ_ARM/ARM/fp2_1271_arm_Cortex-M4.S

von Dr. Sommer (Gast)


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?

von Christopher S. (shalec)


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.

von Dr. Sommer (Gast)


Lesenswert?

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

von Adapter (Gast)


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.

von Christopher S. (shalec)


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? :)

von Dr. Sommer (Gast)


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.

von Nop (Gast)


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).

von Christopher S. (shalec)


Lesenswert?

Ich habe praktisch die Befehlskette vom Makefile übernommen und alles 
konsistent gelassen.

Das geht an den Linker:
1
-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:
1
-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.;

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.