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 |
|
CrossStudio: C++ interrupt service
Started by ●February 7, 2005
Reply by ●February 7, 20052005-02-07
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 > -----Original Message----- > From: fl429 [mailto:] > Sent: 07 February 2005 17:41 > To: > 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 > |
Reply by ●February 7, 20052005-02-07
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 , "fl429" <fl429@y...> wrote: > > 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 |