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
next prev parent 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).