Forum: Mikrocontroller und Digitale Elektronik STM32F103C unter Arduino


von Horst S. (h3aau)


Lesenswert?

moin moin,
ich versuche gerade unter der arduino ide (1.8.3) für einen stm32f103c 
etwas zu kompilieren. allerdings bekomme ich immer eine warnung:

Warning: register range not in ascending order

der kompiler läuft durch und erstellt ein binary. leider läuft dieses 
nur nicht.
die befragung der allwissenden müllhalde ergab das es ein fehler im GCC 
sein soll.
hatte das wer schon und wie kann ich den fehler beseitigen?

danke schon mal.

von Frickelfritze (Gast)


Lesenswert?

Horst S. schrieb:
> ich versuche gerade unter der arduino ide (1.8.3) für einen stm32f103c
> etwas zu kompilieren.

Kann eigentlich nicht funktionieren, denn die native Arduino IDE
bringt von sich aus keinen Support mit für die STM32 Familie.

Also musst du irgendeine Erweiterung haben, diese und was
und an Programm geschrieben hast müsstest du uns schon zeigen.

von Horst S. (h3aau)


Lesenswert?

moin,
die a-ide lässt sich für verschiedene cpu's erweitern.
ESP8266 und auch STM32xxx.
den stm32 (arm) bringt die erweiterung für das arduino-due mit.
ich bin soweit das es wohl durch die gcc-tools kommt.
in meinen projekt ist assamblercode.
der gcc benamst wohl das r0 in ip um oder so......
angeblich gibts dafür einen patch.
leider habe ich für windoofs nichts gefunden.

von Max M. (maxmicr)


Lesenswert?

Warum benutzt du nicht Em-Bitz für den STM32F103 wenn du schon auf 
unterster Ebene mit Assembler arbeitest?

von Horst S. (h3aau)


Lesenswert?

Max M. schrieb:
> Warum benutzt du nicht Em-Bitz für den STM32F103 wenn du schon auf
> unterster Ebene mit Assembler arbeitest?

warum beantwortest du nicht meine fragen?

von Frickelfritze (Gast)


Lesenswert?

Horst S. schrieb:
> warum beantwortest du nicht meine fragen?

Weil er offensichtlich nicht motiviert ist eine deart
verquere Vorgehensweise der Entwicklung zu unterstützen.

Was ich auch sehr gut verstehen kann.

Alleine würde helfen warum das so von hinten durch die
Brust ins Auge stattfindet ....

von Markus (Gast)


Lesenswert?

Ich glaube, Ihr redet ein wenig aneinander vorbei.

Für den STM32F103 gibt es verschieden "Frameworks" d.h. verschiedene 
Softwarepakete, die den Prozessor auf ganz unterschiedliche Weise 
unterstützen.

Das bekannteste davon ist dieses hier

https://github.com/rogerclarkmelbourne/Arduino_STM32

welches für den STM32F103 am häufigsten benutzt wird.

Ich benutze meistens dieses hier

https://github.com/danieleff/STM32GENERIC

weil es viel mehr Boards unterstützt.

Falls Probleme wie oben beschrieben entstehen, kann man nur eine Antwort 
geben, wenn man weiß welches Framework benutzt wurde und wie es 
installiert ist.

von Johannes S. (Gast)


Lesenswert?

Eine weitere Alternative ist die mbed lib die viele STM32 unterstützt. 
Und mit dem mbed-cli (command line interface) kann man Projekte für make 
oder IDESs wie EmBitz, SW4STM32, Keil, IAR, gnuarmeclipse und andere 
erzeugen lassen.

von Frickelfritze (Gast)


Lesenswert?

Markus schrieb:
> Falls Probleme wie oben beschrieben entstehen, kann man nur eine Antwort
> geben, wenn man weiß welches Framework benutzt wurde

Im Wiederkauen bist du grosse Klasse!

Frickelfritze schrieb:
> diese und was
> und an Programm geschrieben hast müsstest du uns schon zeigen.

von Markus (Gast)


Lesenswert?

>Im Wiederkauen bist du grosse Klasse!

Einer muss es ja tun, wenn Du die Frage schon nicht verstehst.

von Jim M. (turboj)


Lesenswert?

Horst S. schrieb:
> allerdings bekomme ich immer eine warnung:
>
> Warning: register range not in ascending order

Die 5 Zeilen davor wären auch noch interessant gewesen.

Horst S. schrieb:
> die befragung der allwissenden müllhalde ergab das es ein fehler im GCC
> sein soll.

Dann musst Du wohl das Plugin für den STM32 in Deiner Arduino IDE mal 
updaten oder was anderes benutzen.

Fortgeschrittenen Programmieren hätte ich ein Update des GCC ans Herz 
gelegt, aber die Leute die damit was anfangen könnten werden kaum die 
Arduino IDE benutzen...

von Horst S. (h3aau)


Lesenswert?

moin,

ich bin nun soweit:
die fehlermeldung entsteht durch den GCC.
dieser benennt das r0 in ip um.
aus push (r0,r1,r9) wird push (ip,r1,r9)
da ich inline assmbeler code verwende kommt das wohl zu stande.


 Markus (Gast): ich habe
https://github.com/rogerclarkmelbourne/Arduino_STM32
aber mit
https://github.com/danieleff/STM32GENERIC
bleibt das problem.

source ist DLO-138
Arduino 1.8.4
GCC     6 2017-q2-update

Jim Meba (turboj) : da sind keine 5 zeilen davor:
___________________________________
C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s: Assembler messages:

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:495: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:495: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:495: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:495: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:497: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:497: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:497: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:497: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:546: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:546: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:546: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:548: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:548: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:548: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:595: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:595: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:595: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:595: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:595: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:597: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:597: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:597: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:597: Warning: register 
range not in ascending order

C:\Users\Meiner\AppData\Local\Temp\ccBTRPkR.s:597: Warning: register 
range not in ascending order

Archiving built core (caching) in: 
C:\Users\Meiner\AppData\Local\Temp\arduino_cache_157334\core\core_Arduin 
o_STM32-master_STM32F1_genericSTM32F103C_device_variant_STM32F103C8,uplo 
ad_method_serialMethod,cpu_speed_speed_72mhz,opt_osstd_788985e64bb343182 
e2e5afb824970d0.a
Der Sketch verwendet 37900 Bytes (57%) des Programmspeicherplatzes. Das 
Maximum sind 65536 Bytes.
Globale Variablen verwenden 17408 Bytes (85%) des dynamischen Speichers, 
3072 Bytes für lokale Variablen verbleiben. Das Maximum sind 20480 
Bytes.
Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme 
auftreten.
--------------------------------------------

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Horst S. schrieb:
> da ich inline assmbeler code verwende kommt das wohl zu stande.

Arduino und Assembler? Spannende Kombination. Jetzt bin ich neugierig, 
was hast du da warum programmiert?

von Johannes S. (Gast)


Lesenswert?

es gibt Antworten wonach das auch mit der Optimierungsstufe -O3 
zusammenhängt, kannst du -Os einstellen?

von Horst S. (h3aau)


Lesenswert?

Johannes S. (jojos) : es ist egal welche stufe ich einstelle. habe alle 
durch probiert.

 Dr. Sommer (Gast) : schau mal da rein: 
https://github.com/ardyesp/DLO-138

: Bearbeitet durch User
von Christopher J. (christopher_j23)


Lesenswert?

Würde mich auch mal interessieren wo genau es dran hängt. Häng doch mal 
einen Ausschnitt von dem Inline-Assembler an, bei dem die Warnung 
auftritt. So wie ich das sehe ist es kein Compiler-Bug:
https://gcc.gnu.org/ml/gcc-patches/2010-06/msg03175.html

von Einer K. (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Arduino und Assembler? Spannende Kombination.
Finde ich nicht so spannend....
Und üblich, ist das auch eher nicht.
Aber machbar ist das durchaus.
Die Inline Variante ist überall möglich.

Aber reine Assembler Dateien tun es nur in den Libs.
Der Builder sucht danach, und kompiliert/übersetzt sie.

Assembler in der Arduino Ide stellt also nicht wirklich ein Problem das.
Ein externer Editor ist empfehlenswert.

von Horst S. (h3aau)


Lesenswert?

Christopher Johnson (christopher_j23) :
hmm...........
wo sollen diese scripte sein?
auf meinem rechner finde ich da nix um diesen patch machen zu können.

von Markus (Gast)


Lesenswert?

Ich vermute das schnelle ADC-Sampling als Ursache:
https://github.com/ardyesp/DLO-138/blob/master/capture.ino

>ich bin nun soweit:
>die fehlermeldung entsteht durch den GCC.
>dieser benennt das r0 in ip um.
>aus push (r0,r1,r9) wird push (ip,r1,r9)
>da ich inline assmbeler code verwende kommt das wohl zu stande.

Ich hab's mal kurz auf meinem Rechner probiert, da kommen diese Fehler 
u.a. auch ( Win10, Arduino IDE 1.6.9 )
Leider löscht das Arduino-Make das generierte *.s file sofort wieder, 
sodass man die Stelle nicht genau sehen kann.
Das von Dir erwähnte "push" finde ich im obigen Link aber nicht.

von Horst S. (h3aau)


Lesenswert?

Markus (Gast) Damit haben wir beide den gleichen stand. nun muss nur 
noch eine lösung her. :-)

von Dieter F. (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Arduino und Assembler? Spannende Kombination. Jetzt bin ich neugierig,
> was hast du da warum programmiert?

Nix - er hat etwas "übernommen"

Horst S. schrieb:
> in meinen projekt ist assamblercode.

von Frickelfritze (Gast)


Lesenswert?

Dieter F. schrieb:
> Nix - er hat etwas "übernommen"

Ja, so reimt sich das dann plausibel zusammen:

Arduino und Assembler.

von Horst S. (h3aau)


Lesenswert?

Markus (Gast) : irgenwas neues raus bekommen?

von Markus (Gast)


Lesenswert?

Leider habe ich kein DLO-138, so dass das Thema nicht so wichtig für 
mich ist.

Du könntest den Assembler-Teil mal auswerfen oder die Funktion leer 
machen, um zu sehen, ob die Software grundsätzlich läuft.
Eventuell auch ein gewöhnliches AnalogRead dafür einsetzen. Dann hast Du 
zwar eine schnarchlangsame Abtastrate, aber es tut sich wenigsten erst 
mal was.

von Jim M. (turboj)


Lesenswert?

Markus schrieb:
> Das von Dir erwähnte "push" finde ich im obigen Link aber nicht.

Das wird im verlinkten File als "stmfd sp!,{r9, " geschrieben. Die 
weiteren Register sind variabel, der Compiler darf die sich aussuchen.

Dort sind auch reichlich fixe Adressen für STM32 Peripherie drin, die 
nur für einen bestimmten µC Typ korrekt sein dürften. Mit anderen 
Worten: Der Code funktioniert nur im Labor, mit einem µC und einer GCC 
Version.

Mir erschließt sich der Sinn dieser vielen Assembler Zeilen nicht ganz, 
das geht auch in C nicht viel langsamer.

von chris (Gast)


Lesenswert?

>Dort sind auch reichlich fixe Adressen für STM32 Peripherie drin, die
>nur für einen bestimmten µC Typ korrekt sein dürften. Mit anderen
>Worten: Der Code funktioniert nur im Labor, mit einem µC und einer GCC
>Version.

Mit DLO-138 ist wohl das DSO-138 Oszi gemeint:

http://www.ebay.de/itm/Big-clearance-DSO138-2-4-TFT-Mini-Digitale-Oszilloskop-Kit-DIY-Parts-1Msps-/221778758450

Ich nehme mal an, dass da immer die gleiche MCU drinn steckt.

von Horst S. (h3aau)


Lesenswert?

Jim Meba (turboj) danke für die info. der rest der software geht. ich 
habe die asm teile schon testweise auskommentiert.
 chris (Gast) DSO138 stimmt. ist ein schönes kleines spielzeug.

von Horst S. (h3aau)


Lesenswert?

Johannes S. schrieb:
> es gibt Antworten wonach das auch mit der Optimierungsstufe -O3
> zusammenhängt, kannst du -Os einstellen?

wo gibt es diese antworten?

von Johannes S. (Gast)


Lesenswert?

da wurde sowas erwähnt: https://github.com/kmackay/micro-ecc/issues/59
In dem commit wurde das anscheinend so gelöst das der push/pop in 
einzelne Befehle aufgeteilt wurde, ich weiss nicht ob das beim stmfd 
auch geht.

von Horst S. (h3aau)


Lesenswert?

moin,

problem behoben. es war nicht der asm-code sondern der interne 
debugmodus
beim stm32 für die a-ide.
    /** Full Serial Wire and JTAG debug */
//    AFIO_DEBUG_FULL_SWJ          = AFIO_MAPR_SWJ_CFG_FULL_SWJ,
    /** Full Serial Wire and JTAG, but no NJTRST. */
//    AFIO_DEBUG_FULL_SWJ_NO_NJRST = 
AFIO_MAPR_SWJ_CFG_FULL_SWJ_NO_NJRST,
    /** Serial Wire debug only (JTAG-DP disabled, SW-DP enabled) */
//    AFIO_DEBUG_SW_ONLY           = AFIO_MAPR_SWJ_CFG_NO_JTAG_SW,
    /** No debug; all JTAG and SW pins are free for use as GPIOs. */
//    AFIO_DEBUG_NONE              = AFIO_MAPR_SWJ_CFG_NO_JTAG_NO_SW,

    afio_cfg_debug_ports(AFIO_DEBUG_NONE);
ins setup und schon läufts.
der inline-assembler geht gut.
hier hilft die doku des gnu-gcc.

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.