public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
From: Oleg Uzenkov <o.uzenkov@unicore.co.ua>
To: eCos Discussion <ecos-discuss@sourceware.org>
Subject: Re: [ECOS] place thread stack into CCM memory on STM32
Date: Fri, 17 Oct 2014 12:02:00 -0000	[thread overview]
Message-ID: <54410554.5040001@unicore.co.ua> (raw)
In-Reply-To: <543FCF93.4090209@unicore.co.ua>


>
> 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

  reply	other threads:[~2014-10-17 12:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-16 14:01 Oleg Uzenkov
2014-10-17 12:02 ` Oleg Uzenkov [this message]
2014-10-17 14:25   ` Sergei Gavrikov
2014-10-17 15:45     ` Sergei Gavrikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54410554.5040001@unicore.co.ua \
    --to=o.uzenkov@unicore.co.ua \
    --cc=ecos-discuss@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).