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
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?
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.
Dann starte das Programm mal im Debugger und finde heraus wo genau es stehen bleibt. Mit LEDs ist das ja Blindflug.
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.
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? :)
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.
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.