Forum: Mikrocontroller und Digitale Elektronik STM32F103C unter Arduino


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Horst S. (h3aau)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Horst S. (h3aau)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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. (jojos)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
>Im Wiederkauen bist du grosse Klasse!

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

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (jojos)


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

von Horst S. (h3aau)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Horst S. (h3aau)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Dieter F. (Gast)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht lesenswert
Dieter F. schrieb:
> Nix - er hat etwas "übernommen"

Ja, so reimt sich das dann plausibel zusammen:

Arduino und Assembler.

von Horst S. (h3aau)


Bewertung
0 lesenswert
nicht lesenswert
Markus (Gast) : irgenwas neues raus bekommen?

von Markus (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Ebay-Artikel Nr. 221778758450

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

von Horst S. (h3aau)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (jojos)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.