Company  
ST Home | Microcontrollers

Index  »  ARM Cortex-M3 STM32  »  STM32 C/C++ build environment using CodeSourcery Sourcery G++
     
   STM32 C/C++ build environment using CodeSourcery Sourcery G++

( 1 | 2 ) Next  >>> 
 Moderated by :   »  STOne-32

Author
beginning argument    ( Replies received: 18 )
lanchon   Posted 25-02-2008 at 20:13   



Registered on :
11-02-2008

Messages : 365

 ON-Line

yessssssssss!!!! C++, at last!


Code:

CodeSourcery/STM32 (by Lanchon, 25-Feb-2008)

This is a C/C++ build environment for the STM32 using CodeSourcery Sourcery G++
(arm-none-eabi). It has been tested with:

Sourcery G++ Lite 2007q3-53
Sourcery G++ 4.2-84

The JTAG flash programming support requires OpenOCD r320 (23-Feb-2008) or later
(openocd.berlios.de, or www.yagarto.de for a win32 port). The GCC version of the
STM32F10x Firmware Library 1.0 (08-Oct-2007) is included with minor documented
changes.

Linker scripts, startup and exception support files were made by me. They were
based on a detailed analysis of how Sourcery G++ handles other targets, and they
are fully compatible with CodeSourcery's CS3 framework.

A demo project that flashes a led connected to PC12 is included. It is ready to
run on an Olimex STM32-H103 board (http://www.olimex.com/dev/stm32-h103.html).
The OpenOCD configuration files are ready to flash via an Olimex ARM-USB-TINY
JTAG dongle (http://www.olimex.com/dev/arm-usb-tiny.html).

To build the demo, change to the project directory and use the make tool that
came with Sourcery G++:

cs-make to build the firmware library and the demo
cs-make -B to force a complete rebuild
cs-make clean to delete all previously built files
cs-make flash to flash an STM32 after building using OpenOCD

Some files are copyright CodeSourcery and are licensed under a very permissive
license (see the initial comments in each file). The rest were written by me,
and I place them all in the public domain.

Lanchon







Attachments : cs-stm32-1.0.rc1.zip   
 Profile   Quote  
lanchon   Posted 01-03-2008 at 21:44   



Registered on :
11-02-2008

Messages : 365

 ON-Line

added basic Eclipse support (no debugging).




Attachments : cs-stm32-1.0.rc2.zip   
 Profile   Quote  
mc1   Posted 09-03-2008 at 23:55   



Registered on :
03-09-2008

Messages : 3

 OFF-Line

Dear Rodrigo,

You did incredible job ! I still do not have evaluation board, but I have successfully compiled your example and now I am waiting for the evaluation board. I did not have to deal with GNU Linkek configuration files before, so all this is really new to me.

I would be really gratful if you find some time to answer my questions ?

1) What is wrong with Code Sourcer w.r.t. STM32. Is it supported or not? They say they support Cortex M3 so I am not sure why is it necessary to do something more ? Esspecially, I do not understand how it was possible that their linker files did not handle static constructors initialization correctly so that you had to change anything ?

2) I am wondering how did you find the sources of the libcs3 ( the boot code that comes with the stm32 fwlib) ? Did you get it somehow from Code Sourcer or you made them all yourself ? I could not find it.

Thanks for help,
Marcin



 Profile   Quote  
lanchon   Posted 12-03-2008 at 01:35   



Registered on :
11-02-2008

Messages : 365

 ON-Line

hi,

1) CS G++ supports code generation for the Cortex-M3 core (a product of ARM). they don't provide linker scripts supporting the STM32. they don't provide startup code either, and the code I've seen elsewhere didn't support C++. they do provide the common part of the implementation of an initialization strategy called CS3 onto which one can plug in.

2) sources for (parts of) CS3 come with the non-lite version of CS G++, which you can evaluate for free for a month if our register on their site. (this version also comes with linker scripts and initialization code for various micros, but not the STM32.) these files are "conveniently" missing on the free version, but the files on the commercial version are provided under a permissive license, so I could include the relevant ones with my download. the startup code that comes with fwlib isn't used, it doesn't support C++ (or CS3). the startup files for the STM32 were made by me after looking at other startup files by CS. the comment at the beginning of each file tells you whether it's CS's work or mine, or a mixture of both.

the source for a specific stage of CS3 is missing because it isn't included in commercial G++, but you can objdump it to take a look. (but you probably aren't licensed to reproduce the output, and I don't know if you are even allowed to objdump it in the first place.)



 Profile   Quote  
lanchon   Posted 13-03-2008 at 14:28   



Registered on :
11-02-2008

Messages : 365

 ON-Line

I forgot to write a comment about this on the makefile. in the makefile you'll find these lines:

LD = $(CC)
#LD = $(CXX)

you should change them like this if you're compiling c++:

#LD = $(CC)
LD = $(CXX)

this makes the c++ support libs available to the linker.


also, a sad note: iostreams are not usable, the compiled size is too big. there's no intrinsic reason for them to be, the library implementation simply lacks quality in this regard.


and a tip: you can redirect the stdout like this:

extern "C" int _write(int, char*, int);

int _write(int file, char* ptr, int len)
{
display.print(ptr, ptr + len);
return len; // or -1
}




 Profile   Quote  
mc1   Posted 20-03-2008 at 13:28   



Registered on :
03-09-2008

Messages : 3

 OFF-Line

Rodrigo,
Thanks for your answers (I have been away that's why I haven't answer anything). It clarifies a lot for me. I will be playing with GCC, STM32, and Olimex in the next month (I will start right after Easter :)). I am wondering if it is possible to have your e-mail in case of real troubles ? (my Skype is mczenko2). In any case, one more time, thanks for your work and help !

Marcin





 Profile   Quote  
lanchon   Posted 21-03-2008 at 00:11   



Registered on :
11-02-2008

Messages : 365

 ON-Line

hi Marcin,

if you run into trouble you should post in this forum or contact ST support. you might be under the wrong impression: I'm not affiliated with ST and I don't provide support.

(PS. I'm lanchon, not Rodrigo.)




 Profile   Quote  
mc1   Posted 05-04-2008 at 00:22   



Registered on :
03-09-2008

Messages : 3

 OFF-Line

OK. No problem.

PS/
I did not assume that you are affiliated with ST.

PS/
Sorry for using your real name.
(I took from one of your post: http://www.st.com/mcu/forums-cat-5951-23.html&start=10)





 Profile   Quote  
miles.gazic   Posted 22-04-2008 at 23:59   



Registered on :
04-22-2008

Messages : 13

 OFF-Line

Thanks very much for putting this together. I tried it out along with the codesourcery toolchain, and a few different versions of OpenOCD. In each case I was able to build, flash, and execute the application using OpenOCD, but I was not able to debug. GDB (the one included in the codesourcery toolchain) could connect with a "target remote localhost:3333", which would stop the app from running. Entering 'continue' would make it continue, but gdb became unresponsive, and did not return a '(gdb)' prompt after the continue command. This is all on winXP pro, and the versions of OpenOCD I tried were:
1) built from source
2) included with CodeSourcery's eval pro IDE
3) YAGARTO's OpenOCD installer

If anyone could tell what's wrong (or what to try next), I would appreciate it.

Thanks,
Miles



 Profile   Quote  
lanchon   Posted 23-04-2008 at 08:45   



Registered on :
11-02-2008

Messages : 365

 ON-Line

hi Miles,

I normally don't get my hands dirty with these things, I write mostly portable code and leave the details of toolchains to others. I had zero experience with GCC and with setting up a compiler so this was kind of a drag. Also, I never use debuggers (I instrument code instead) so I can't help you in the least bit with GDB.

There's Anglia IDEaliST that I think can do debugging via OpenOCD, you could try that IDE. In my release I included a file called jtag/target.ini that was taken from IDEaliST 1.61. Apparently it's some kind of configuration file for GDB, but I wouldn't know. I included it in hopes that someone might find it useful...




 Profile   Quote  
( 1 | 2 ) Next  >>> 
On Top

Search in the forums
 
Jump To