This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug 1001344] Allow nc_test_slave for lwIP to compile for targets with 128KiB RAM.


Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001344

--- Comment #28 from Ilija Kocho <ilijak@siva.com.mk> 2012-05-18 08:25:03 BST ---
(In reply to comment #27)
> (In reply to comment #26)
> > 
> > CYGBLD_ATTRIB_UNUSED, contrary to what it's name implies, will keep the
> > variable. Ref: Bug 1001520
> 
> Oh yes, I'd already forgotten that conversation. The GCC documentation is still
> unclear on that point. In that case, we needed a memory access to a particular
> location. That happened courtesy of derefencing a volatile pointer set to an
> absolute address. 
> 
> I think this case might be a little different though as the volatile variable
> has entirely local scope. No manufactured addresses are involved that could (in
> principle) be affected by other agents.
> 

I think that "volatile" is strong enough so compiler wouldn't dare to drop it
even for an automatic variable. Here is the dump for our case. The code is
optimized indeed, but the computation of critical expression is maintained. 

do_some_random_computation(int p)
{
    // Just something that might be "hard"
    volatile double x CYGBLD_ATTRIB_UNUSED;
    x = ((p * 10) * 3.14159) / 180.0;  // radians
     560:    4620          mov    r0, r4
     562:    f010 fea3     bl    112ac <__aeabi_i2d>
     566:    a30c          add    r3, pc, #48    ; (adr r3, 598
<net_load+0x58>)
     568:    e9d3 2300     ldrd    r2, r3, [r3]
     56c:    f010 ff04     bl    11378 <__aeabi_dmul>
     570:    a30b          add    r3, pc, #44    ; (adr r3, 5a0
<net_load+0x60>)
     572:    e9d3 2300     ldrd    r2, r3, [r3]
     576:    f011 f829     bl    115cc <__aeabi_ddiv>
     57a:    340a          adds    r4, #10
net_load(cyg_addrword_t who)
{
    int i;
    while (true) {
        cyg_semaphore_wait(&load_thread_sem[who]);
        for (i = 0;  i < load_thread_level;  i++) {
     57c:    42ac          cmp    r4, r5
static void
do_some_random_computation(int p)
{
    // Just something that might be "hard"
    volatile double x CYGBLD_ATTRIB_UNUSED;
    x = ((p * 10) * 3.14159) / 180.0;  // radians
     57e:    e9cd 0100     strd    r0, r1, [sp]
net_load(cyg_addrword_t who)
{
    int i;
    while (true) {
        cyg_semaphore_wait(&load_thread_sem[who]);
        for (i = 0;  i < load_thread_level;  i++) {
     582:    d1ed          bne.n    560 <net_load+0x20>
            do_some_random_computation(i);
        }
        cyg_thread_delay(1);  // Wait until the next 'tick'
     584:    2001          movs    r0, #1
     586:    2100          movs    r1, #0
     588:    f003 f820     bl    35cc <cyg_thread_delay>
        cyg_semaphore_post(&load_thread_sem[who]);
     58c:    4630          mov    r0, r6
     58e:    f003 f86b     bl    3668 <cyg_semaphore_post>
    }
     592:    e7db          b.n    54c <net_load+0xc>
     594:    f3af 8000     nop.w
     598:    f01b866e     .word    0xf01b866e
     59c:    400921f9     .word    0x400921f9
     5a0:    00000000     .word    0x00000000
     5a4:    40668000     .word    0x40668000
     5a8:    70002cac     .word    0x70002cac
     5ac:    700033c8     .word    0x700033c8


> I wonder if you can use both USED and UNUSED at the same time. Given their
> intended functions, you should be able to, despite the English meanings
> implying they are in some way opposites to each other. That would deal with the
> uncertainty.

Then we get ...warning: âusedâ attribute ignored... as per Comment #26.

Ilija

-- 
Configure bugmail: http://bugs.ecos.sourceware.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]