Forum: Compiler & IDEs CrossStudio / CrossWorks


von Ma L. (Firma: L.) (frml55)


Lesenswert?

Hi,

Ich bin mit einem IOT Projekt von CoIDE (totes Pferd) zu CrossStudio 
gewechselt.

Nach anfänglichen Schweirigkeiten habe ich es geschafft, dass er den 
richtigen Prozessor STM32L151 (Cortex M3) erkennt und auch alle Files 
brav compiliert.

Wie kriege ich aber die Files gelinkt um ein bin File zu erzeugen.

Bei meinem Projekt ist ein Link-File (*.ld) dabei.

Wo binde ich dieses ein und wie kreige ich den Builder dazu alle Files 
zu linken?

Sorry, bin aber leider kein Experte für IDE Systeme.

von Walter T. (nicolas)


Lesenswert?

Wenn Du mit der Toolchain noch nicht festliegst: EmBitz hat einen gut 
funktionierenden Import für CoIDE-Projekte.

von temp (Gast)


Lesenswert?

Wenn du solche Fragen stellst, solltest du am Anfang nicht versuchen mit 
einem eigenen Linkerskript zu arbeiten.
Erstell erst mal ein normales Projekt mit den default Einstellungen. Das 
sollte dann zu einem elf-File übersetzt werden.
Wenn das geht kannst du in den Einstellungen unter Linker/Linker die 
Option AdditionalOutputFormat auf bin setzen. Dann wird neben dem 
elf-File auch ein bin-File erzeugt.

von Ma L. (Firma: L.) (frml55)


Lesenswert?

Dank ihr beiden.

Zur Erklärung: Es ist ein fertiges projekt (Github). Es handelt sich um 
einen LoraWan Tracker mit STM32L151 Controller.
So gesehen muss ich wohl das vorhandene Linkerscript nehmen.
Wegen Toolchain: Es gibt auf Github eine KEIL und eine CoIDE Version.
Die Keil-Version konnte ich ohne Probleme importieren.
Beide Versionen benutzen die arm-gcc Toolchain (GNU Tools).

Ich dachte ich hätte das Linkerscript richtig eingebunden
Auszug aus dem hzp-File des Projektes in CrossStudio:

<configuration
    Name="ARM Release"
    inherited_configurations="ARM;Release"
    linker_additional_files="C:\\Eigene 
Dateien\\IOT\\RAK811_BreakBoard-master\\src\\boards\\RAK811BreakBoard\\c 
msis\\arm-gcc\\STM32L151XBA_FLASH.ld"  />

von temp (Gast)


Lesenswert?

Sorry, aber hier gibts es einen gesonderten Thread warum das Forum 
angeblich so einsteigerfeindlich ist. Beiträge wie deiner sind der 
Grund. da kommt einer daher der von nichts eine Ahnung oder einen Plan 
hat, bedient sich bei anderen (Github) und erwartet jetzt, dass der Rest 
der Forumsuser die Glaskugel auspacken und erraten was du willst. 
Glaubst du wirklich dass die paar Infos die du hier hinrotzt reichen um 
ein Problem zu lösen?

Wozu brauchst du ne IDE wenn du sowieso per Hand in den 
Konfigurationsdateien rumfummelst? Dann kanst du auch gleich ein 
makefile nehmen.

von Ma L. (Firma: L.) (frml55)


Lesenswert?

@temp(Gast)

Wie Dein Name schon sagt, bist Du ja ein ganz altes Mitglied hier im 
Forum.
Deshalb entschuldige ich mich, dass ich versuhe Dein "Wissen 
abzugreifen".

Zum Thema Github: Es gibt auf Github auch Software für fertige Boards.
Dies wird vom Hersteller bereitgestellt für Kunden die deren Boards 
gekauft haben.
In meinem Fall ist das genau so. Deshalb fühle ich mich auch nicht 
wirklich schlecht, wenn ich mich "bediene". Leider wird vom Hersteller 
nur Keil und CoIDE unterstützt. CrossStudio schien mir als vernünftige 
(= bezahlbare) Alternative zu Keil (nicht billig) und CoIDE (Website 
tot).

Noch eine persönliche Frage: Was machst Du eigentlich hier im Forum?
- Du weisst schon alles
- Falls Du doch Wissenslücken hast, würdest Du Dich ja niemals beim 
Wissen anderer bedienen
- Helfen tust Du auch nicht?!

Ausdrücklichen Dank an dieser Stelle an "Walter Tarpan (nicolas)" (= 
registrierter Forum-User), der mir mit einem einzigen Satz schon 
weitergeholfen hat.

von temp (Gast)


Lesenswert?

M. L. schrieb:
> Zum Thema Github: Es gibt auf Github auch Software für fertige Boards.
> Dies wird vom Hersteller bereitgestellt für Kunden die deren Boards
> gekauft haben.

Ich kritisiere nicht dass du was von Github verwendest. Aber du machst 
dir nicht mal die Mühe dein Problem zu erläutern oder soviel Infos zu 
geben, dass überhaupt jemand dein Problem versteht. Mit anderen Worten, 
du gibst dir nicht selbst genügend Mühe erwartest aber Hilfe.
Bisher hats jedenfalls nicht mal dazu gereicht einen Link auf das 
github-Projekt hier rein zu stellen.

von Ma L. (Firma: L.) (frml55)


Lesenswert?


von Stefan (Gast)


Lesenswert?

Ich habe das Projekt (pingp-pong) mal mit Crossworks 4.1.0 importiert 
(Keil) und übersetzt. Das ging ohne Probleme. Nachdem ich als 
"Additional output format) ".bin" eingestellt hatte, kam auch eine 
"ping-pong.bin" Datei heraus. Ganz ohne eigene (bereitgestellte) .ld 
Datei.

Von daher verstehe ich die Frage jetzt nicht so ganz.

von Ma L. (Firma: L.) (frml55)


Lesenswert?

Ok, cool.
Versuche ich gleich morgen??

Sorry, aber ich dachte, dass ich wie beim Keil auch das Linkfile 
brauche.

von temp (Gast)


Lesenswert?

Stefan schrieb:
> Nachdem ich als
> "Additional output format) ".bin" eingestellt hatte

Also genau das was ich ganz oben auch schon vorgeschlagen habe...

von Ma L. (Firma: L.) (frml55)


Lesenswert?

@Stefan: Habs probiert. Nach dem compilen startet der Linkprozess und 
bringt folgende Fehlermeldung. Hast Du eine Idee, was ich falsch mache?
Linking ‘classA.axf’
    "C:\Program Files (x86)\GNU Tools ARM Embedded\7 
2017-q4-major\bin/arm-none-eabi-g++" -g -Wl,--gc-sections 
-Wl,--start-group "classA THUMB Debug/thumb_crt0.o" "classA THUMB 
Debug/STM32_Startup.o" "classA THUMB Debug/main.o" "classA THUMB 
Debug/adc-board.o" "classA THUMB Debug/board.o" "classA THUMB 
Debug/gpio-board.o" "classA THUMB Debug/gps-board.o" "classA THUMB 
Debug/i2c-board.o" "classA THUMB Debug/rtc-board.o" "classA THUMB 
Debug/spi-board.o" "classA THUMB Debug/sx1276-board.o" "classA THUMB 
Debug/uart-board.o" "classA THUMB Debug/system_stm32l1xx.o" "classA 
THUMB Debug/stm32l1xx_hal.o" "classA THUMB Debug/stm32l1xx_hal_adc.o" 
"classA THUMB Debug/stm32l1xx_hal_adc_ex.o" "classA THUMB 
Debug/stm32l1xx_hal_dma.o" "classA THUMB Debug/stm32l1xx_hal_gpio.o" 
"classA THUMB Debug/stm32l1xx_hal_i2c.o" "classA THUMB 
Debug/stm32l1xx_hal_pwr.o" "classA THUMB Debug/stm32l1xx_hal_pwr_ex.o" 
"classA THUMB Debug/stm32l1xx_hal_rcc.o" "classA THUMB 
Debug/stm32l1xx_hal_rcc_ex.o" "classA THUMB Debug/stm32l1xx_hal_rtc.o" 
"classA THUMB Debug/stm32l1xx_hal_rtc_ex.o" "classA THUMB 
Debug/stm32l1xx_hal_spi.o" "classA THUMB Debug/stm32l1xx_hal_spi_ex.o" 
"classA THUMB Debug/stm32l1xx_hal_uart.o" "classA THUMB 
Debug/stm32l1xx_hal_usart.o" "classA THUMB Debug/stm32l1xx_hal_cortex.o" 
"classA THUMB Debug/sysIrqHandlers.o" "classA THUMB Debug/utilities.o" 
"classA THUMB Debug/LoRaMac.o" "classA THUMB Debug/LoRaMacCrypto.o" 
"classA THUMB Debug/Region.o" "classA THUMB Debug/RegionAS923.o" "classA 
THUMB Debug/RegionAU915.o" "classA THUMB Debug/RegionCommon.o" "classA 
THUMB Debug/RegionEU868.o" "classA THUMB Debug/RegionIN865.o" "classA 
THUMB Debug/RegionKR920.o" "classA THUMB Debug/RegionUS915.o" "classA 
THUMB Debug/RegionUS915-Hybrid.o" "classA THUMB Debug/lis3dh.o" "classA 
THUMB Debug/sx1276.o" "classA THUMB Debug/adc.o" "classA THUMB 
Debug/delay.o" "classA THUMB Debug/fifo.o" "classA THUMB Debug/gpio.o" 
"classA THUMB Debug/gps.o" "classA THUMB Debug/i2c.o" "classA THUMB 
Debug/timer.o" "classA THUMB Debug/uart.o" "classA THUMB Debug/aes.o" 
"classA THUMB Debug/cmac.o" -Wl,--end-group -o "classA THUMB 
Debug/classA.axf" -mcpu=cortex-m3 -mlittle-endian -mfloat-abi=soft 
-mthumb
    In function `_start':
    multiple definition of `_start'
    (.text+0x0): first defined here
    In function `memory_set':
    undefined reference to `__stack_end__'
    undefined reference to `__stack_start__'
    undefined reference to `__stack_process_end__'
    undefined reference to `__stack_process_start__'
    undefined reference to `__data_load_start__'
    undefined reference to `__data_start__'
    undefined reference to `__data_end__'
    undefined reference to `__text_load_start__'
    undefined reference to `__text_start__'
    undefined reference to `__text_end__'
    undefined reference to `__fast_load_start__'
    undefined reference to `__fast_start__'
    undefined reference to `__fast_end__'
    undefined reference to `__ctors_load_start__'
    undefined reference to `__ctors_start__'
    undefined reference to `__ctors_end__'
    undefined reference to `__dtors_load_start__'
    undefined reference to `__dtors_start__'
    undefined reference to `__dtors_end__'
    undefined reference to `__rodata_load_start__'
    undefined reference to `__rodata_start__'
    undefined reference to `__rodata_end__'
    undefined reference to `__tdata_load_start__'
    undefined reference to `__tdata_start__'
    undefined reference to `__tdata_end__'
    undefined reference to `__tbss_start__'
    undefined reference to `__tbss_end__'
    undefined reference to `__heap_start__'
    undefined reference to `__heap_end__'
    In function `_vectors':
    (.vectors+0x0): undefined reference to `__stack_end__'
    In function `reset_wait':
    undefined reference to `__RAM_segment_end__'
    In function `_sbrk_r':
    sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
    In function `_write_r':
    writer.c:(.text._write_r+0x12): undefined reference to `_write'
    In function `_close_r':
    closer.c:(.text._close_r+0xc): undefined reference to `_close'
    In function `_fstat_r':
    fstatr.c:(.text._fstat_r+0x10): undefined reference to `_fstat'
    In function `_isatty_r':
    isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'
    In function `_lseek_r':
    lseekr.c:(.text._lseek_r+0x12): undefined reference to `_lseek'
    In function `_read_r':
    readr.c:(.text._read_r+0x12): undefined reference to `_read'
    ld returned 1 exit status
Build failed

von Michael (Gast)


Lesenswert?

Hier stimmt der Startup nicht mit dem LD File überein.
Weiterhin werden die Syscalls der Newlib verwendet, und es
fehlt hier die entsprechende Datei im Projekt.

von temp (Gast)


Lesenswert?

Ich hab auch heute früh erst die 4.1 als Demo installiert da meine 
Linzenz für 3.x ist. STM32 CPU Support Package installiert und deine 
beiden Keil-Projekte importiert:

Building ‘ping-pong’ from solution ‘ping-pong’ in configuration ‘THUMB 
Debug’
1> Assembling ‘thumb_crt0.s’
2> Assembling ‘STM32_Startup.s’
3> Compiling ‘adc-board.c’
4> Compiling ‘main.c’
1> Compiling ‘board.c’
2> Compiling ‘gpio-board.c’
3> Compiling ‘gps-board.c’
1> Compiling ‘rtc-board.c’
4> Compiling ‘i2c-board.c’
2> Compiling ‘spi-board.c’
3> Compiling ‘sx1276-board.c’
1> Compiling ‘uart-board.c’
4> Compiling ‘system_stm32l1xx.c’
2> Compiling ‘stm32l1xx_hal_adc.c’
3> Compiling ‘stm32l1xx_hal.c’
4> Compiling ‘stm32l1xx_hal_adc_ex.c’
1> Compiling ‘stm32l1xx_hal_dma.c’
2> Compiling ‘stm32l1xx_hal_gpio.c’
3> Compiling ‘stm32l1xx_hal_i2c.c’
4> Compiling ‘stm32l1xx_hal_pwr.c’
1> Compiling ‘stm32l1xx_hal_pwr_ex.c’
2> Compiling ‘stm32l1xx_hal_rcc.c’
3> Compiling ‘stm32l1xx_hal_rcc_ex.c’
1> Compiling ‘stm32l1xx_hal_rtc_ex.c’
4> Compiling ‘stm32l1xx_hal_rtc.c’
2> Compiling ‘stm32l1xx_hal_spi.c’
1> Compiling ‘stm32l1xx_hal_uart.c’
3> Compiling ‘stm32l1xx_hal_spi_ex.c’
2> Compiling ‘stm32l1xx_hal_cortex.c’
4> Compiling ‘stm32l1xx_hal_usart.c’
1> Compiling ‘utilities.c’
3> Compiling ‘sysIrqHandlers.c’
2> Compiling ‘LoRaMac.c’
4> Compiling ‘LoRaMacCrypto.c’
1> Compiling ‘Region.c’
3> Compiling ‘RegionAS923.c’
2> Compiling ‘RegionAU915.c’
4> Compiling ‘RegionCommon.c’
1> Compiling ‘RegionEU868.c’
3> Compiling ‘RegionIN865.c’
2> Compiling ‘RegionKR920.c’
4> Compiling ‘RegionUS915.c’
1> Compiling ‘RegionUS915-Hybrid.c’
3> Compiling ‘lis3dh.c’
2> Compiling ‘sx1276.c’
4> Compiling ‘adc.c’
1> Compiling ‘delay.c’
3> Compiling ‘fifo.c’
2> Compiling ‘gpio.c’
4> Compiling ‘gps.c’
1> Compiling ‘i2c.c’
3> Compiling ‘timer.c’
2> Compiling ‘uart.c’
4> Compiling ‘aes.c’
1> Compiling ‘cmac.c’
1> Generating linker script ‘ping-pong.ld’
1> Linking ping-pong.elf
Build complete

Es wurden dabei keinerlei Einstellungen verändert. Ich war erstaunt wie 
gut die das mittlerweile hin kriegen.

von temp (Gast)


Lesenswert?

M. L. schrieb:
> "C:\Program Files (x86)\GNU Tools ARM Embedded\7
> 2017-q4-major\bin/arm-none-eabi-g++"

kannst du nicht lesen? Warum willst du Crossworks dazu zwingen mit einer 
fremden Toolchain zu arbeiten. Meine Kritik an dir bestätigt sich. Das 
was du uns sagst ist nicht das was du machst. Schade um die Zeit.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Du könntest auch Embedded Studio anstatt CrossWorks nehmen:
https://www.segger.com/products/development-tools/embedded-studio/

Ist im Prinzip das gleiche Produkt, weil Embedded Studio auf CrossWorks 
basiert. Bei Embedded Studio kannst du aber ein Keil Projekt 
importieren. Vielleicht macht es das für dich einfacher.

von temp (Gast)


Lesenswert?

Til S. schrieb:
> Bei Embedded Studio kannst du aber ein Keil Projekt
> importieren.

Komm, das habt ihr auch bloß von Crossworks übernommen... Ist in den 3.x 
Versionen auch schon drin. Das Importieren dieses Keil-Projektes haben 
jetzt schon 2 User hier probiert mit positiven Ergebnis. Nur M. Lauer 
macht irgendwas was er uns nicht verrät, das aber alles durcheinander 
bringt.

Ich nehme mal an er hat das Toolchain Root, das normalerweise auf 
'$(StudioDir)/gcc/$(GCCTarget)/bin' steht, auf seine C:\Program Files 
(x86)\GNU Tools ARM Embedded umgebogen. Damit kann es nicht gehen und 
wenn er das im Embedded Studio macht (wo diese Option sicher genauso 
drin ist), wird er auch damit keinen Erfolg haben.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

temp schrieb:
> Komm, das habt ihr auch bloß von Crossworks übernommen... Ist in den 3.x
> Versionen auch schon drin. Das Importieren dieses Keil-Projektes haben
> jetzt schon 2 User hier probiert mit positiven Ergebnis. Nur M. Lauer
> macht irgendwas was er uns nicht verrät, das aber alles durcheinander
> bringt.

Ha ha...da bin ich unserem eigenem Marketing erlegen ;-). War mir nicht 
bewusst, dass es da auch schon drin war.

von M. Lauer (Gast)


Lesenswert?

Alles gut.
Toolchain raus und alles war ok??

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.