[ECOS] place thread stack into CCM memory on STM32
Oleg Uzenkov
o.uzenkov@unicore.co.ua
Fri Oct 17 12:02:00 GMT 2014
>
> Hi Everyone,
>
> STM32 controllers have CCM (Closely Coupled Memory) memory which acts
> as RAM.
>
> At present I do not use it. But I would like to.
>
> I am developing eCos application in C++. I have something like this in
> the header file:
>
> class A :
> {
> public:
> A ();
> virtual ~A ();
> ..
> protected:
>
> cyg_thread _thread;
> char _thread_stack [CYGNUM_HAL_STACK_SIZE_TYPICAL]
> __attribute__((section(".ccm")));
> ...
>
> As you can see, I want to place thread stack into CCM section (using
> __attribute__((section("<name>"))).
>
> But I do not know how to do it in a correct way. Please help! :-)
>
> The Memory layout file I use has got:
>
> ..
> SECTIONS
> {
> SECTIONS_BEGIN
> USER_SECTION (ccm, ccm, 0x10000000, LMA_EQ_VMA)
> ..
>
> And cortexm.ld file has got a macro for USER_SECTION:
>
> #define USER_SECTION(_name_, _region_, _vma_, _lma_) \
> ._name_ _vma_ : _lma_ \
> { __ ## _name_ ## _start = ABSOLUTE (.); \
> *(._name_*) \
> __ ## _name_ ## _end = ABSOLUTE (.); } \
> > _region_
>
>
> When I compile the project I get an error:
> error: section attribute not allowed for '_thread_stack'
>
> Do I specify attribute in the correct place?
>
Ok, it appears that it is possible to specify
__attribute__((section("<name>"))) for class's member methods.
It can also be specified for file level or global level variables and
functions.
But unfortunately there is no directive to place the whole class into a
specific memory region.
As to working with STM32 I managed to place thread stacks into CCM
section (why waist it!) by declaring stack as a file level variable:
static char _thread_stack [CYGNUM_HAL_STACK_SIZE_TYPICAL]
CYGBLD_ATTRIB_SECTION(".ccm");
Make sure to specify (NOLOAD) for .ccm section in mlt_ file:
USER_SECTION (ccm, ccm, 0x10000000 (NOLOAD), LMA_EQ_VMA)
Otherwise the binary will be enormous.
Oleg
> My be I cannot do it for class members but only for global variables?
>
> I would appreciate any help on this.
>
> Oleg
>
>
>
>
>
>
>
> ...
>
>
>
>
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss
mailing list