Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: [lpc2000] Re: Looking to buy compiler

2005-11-07 by Alex_Rambler

b> Just one data point, but: I'm a professional developer (30 years s/w
b> development experience from micros to mainframes).  Now working on 
b> third LPC-based commercial product.  Compared Keil, IAR, and gcc and 
b> chose Rowley Crossworks (gcc-based).

Oh, I can't hold out from the reply.
I tried to use Crossworks in the begining to explore LPC2xxx.
It ugly work with the structures. I tried to define T0MCR like
 struct:
{{
typedef struct
  { 
    __REG32 MR0I :1;
    __REG32 MR0R :1;
    __REG32 MR0S :1;

    __REG32 MR1I :1;
    __REG32 MR1R :1;
    __REG32 MR1S :1;
    
    __REG32 MR2I :1;
    __REG32 MR2R :1;
    __REG32 MR2S :1;
    
    __REG32 MR3I :1;
    __REG32 MR3R :1;
    __REG32 MR3S :1;    
    __REG32      :4;    
} __txmcr_bits;

#define T0MCRbits (*(volatile __txmcr_bits *)0xE0004014)

}}

but when I handle to it, Crossworks GCC compile it to this code:

<<T0MCRbits.MR0I = 1;>>

mov r3, #0xE0000000
add r3, r3, #0x00004000
add r3, r3, #0x00000014
ldrb r2, [r3]
orr r2, r2, #0x00000001
strb r2, [r3]

so, I get change in LSB and _in_the_second_byte_!.

OK, forget about structures.
But when I try to compile code with some IRQ, I found, that optimize
level has affect on the code! The code works differ with optimize
level 1 and optimize level 3!
After that I found that interrupt context keeped incorrectly. So I had
to keep context by ASM macros.

After that I try IAR. I have not desire to come back to GCC.
My time is money.

b> A recent poll was done on this group that showed Keil and Rowley 
b> leading the pack for most-used compiler/IDE, so you might be 
b> surprised at how many professionals use gcc.







 
b> Yahoo! Groups Links



 




-- 
Best regards,
 Alex_Rambler                            mailto:bor-alex@...

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.