Yahoo Groups archive

Lpc2000

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

Thread

CrossStudio: C++ interrupt service

CrossStudio: C++ interrupt service

2005-02-07 by fl429

Hi, folks,

I am trying out a few things on a IAR Kickstart board, with 
CrossStudio 1.3. 

I'd like to write code in C++ instead of C. My test C++ code ran ok 
until I added an interrupt service routine, for Timer0 as my test 
example.

I have a ISR like this: (in a .cpp file)

static void timer0ISR(void) __attribute__ ((interrupt ("IRQ")));

static void timer0ISR()
{
    // doing something here


}

void SetupTimer0()
{
    //
    // Init VIC here, not shown
    //
    VICVectAddr0 = (unsigned int)timer0ISR;
    //
    // etc
	
}

The problem is the result code always calls the default DO-Nothing 
handler in the "Philips_210x_startup.s" and stalls there.

The same piece of code in C seems ok.

Any ideas ?

Thanks,

Lei

RE: [lpc2000] CrossStudio: C++ interrupt service

2005-02-07 by Paul Curtis

Perhaps you need "extern C" magic?

extern "C" {
static void timer0ISR(void) __attribute__ ((interrupt ("IRQ"))); 
};

Dunno.  I'm not an ARM person.

--
Paul Curtis, Rowley Associates Ltd  http://www.rowley.co.uk
CrossWorks for MSP430, ARM, AVR and (soon) MAXQ processors
Show quoted textHide quoted text
> -----Original Message-----
> From: fl429 [mailto:fl429@...] 
> Sent: 07 February 2005 17:41
> To: lpc2000@yahoogroups.com
> Subject: [lpc2000] CrossStudio: C++ interrupt service
> 
> 
> 
> Hi, folks,
> 
> I am trying out a few things on a IAR Kickstart board, with 
> CrossStudio 1.3. 
> 
> I'd like to write code in C++ instead of C. My test C++ code 
> ran ok until I added an interrupt service routine, for Timer0 
> as my test example.
> 
> I have a ISR like this: (in a .cpp file)
> 
> static void timer0ISR(void) __attribute__ ((interrupt ("IRQ")));
> 
> static void timer0ISR()
> {
>     // doing something here
> 
> 
> }
> 
> void SetupTimer0()
> {
>     //
>     // Init VIC here, not shown
>     //
>     VICVectAddr0 = (unsigned int)timer0ISR;
>     //
>     // etc
> 	
> }
> 
> The problem is the result code always calls the default 
> DO-Nothing handler in the "Philips_210x_startup.s" and stalls there.
> 
> The same piece of code in C seems ok.
> 
> Any ideas ?
> 
> Thanks,
> 
> Lei
> 
> 
> 
> 
> 
> 
>  
> Yahoo! Groups Links
> 
> 
> 
>  
> 
> 
> 
> 
>

Re: CrossStudio: C++ interrupt service

2005-02-07 by fl429

A guy from Rowley helped me figured it out. It turns out that I have 
to uncomment the line 

#define VECTORED_IRQ_INTERRUPTS

in the startup.s file. In the sample C project the line is already 
done. 

Great support !

Thanks,

Lei


--- In lpc2000@yahoogroups.com, "fl429" <fl429@y...> wrote:
Show quoted textHide quoted text
> 
> Hi, folks,
> 
> I am trying out a few things on a IAR Kickstart board, with 
> CrossStudio 1.3. 
> 
> I'd like to write code in C++ instead of C. My test C++ code ran ok 
> until I added an interrupt service routine, for Timer0 as my test 
> example.
> 
> I have a ISR like this: (in a .cpp file)
> 
> static void timer0ISR(void) __attribute__ ((interrupt ("IRQ")));
> 
> static void timer0ISR()
> {
>     // doing something here
> 
> 
> }
> 
> void SetupTimer0()
> {
>     //
>     // Init VIC here, not shown
>     //
>     VICVectAddr0 = (unsigned int)timer0ISR;
>     //
>     // etc
> 	
> }
> 
> The problem is the result code always calls the default DO-Nothing 
> handler in the "Philips_210x_startup.s" and stalls there.
> 
> The same piece of code in C seems ok.
> 
> Any ideas ?
> 
> Thanks,
> 
> Lei

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.