When my ISR looks like this, all is fine: #pragma vector=0x00 __interrupt void basic_timer(void) { LPM3_EXIT; /* exit from low power mode 3 */ } However, when I attempt to place ANY extra lines of code in the basic_timer() function, then I get the following error: "Error[e16]: Segment CODE (size: 0x1008 align: 0x1) is too long for segment definition. At least 0x4a more bytes needed. The problem..." How the heck do I fix this? I did a keyword search in the compiler manual, but i couldn't find the description! Thanks, Mike
ISR problem in MSP430 using IAR
Started by ●March 12, 2004
Reply by ●March 13, 20042004-03-13
> When my ISR looks like this, all is fine: > > #pragma vector=0x00 > __interrupt void basic_timer(void) > { > LPM3_EXIT; /* exit from low power mode 3 */ > } > > However, when I attempt to place ANY extra lines of code in the > basic_timer() function, then I get the following error: > > "Error[e16]: Segment CODE (size: 0x1008 align: 0x1) is too long for > segment definition. At least 0x4a more bytes needed. The problem..." >It looks like your vector is wrong. Have a look in the appropriate headerfile and use the defined vectors. For the F149 the BasictimerIrqvector is 0xFFE0 So it should look like: #include <io430x41x.h> #pragma vector=BASICTIMER_VECTOR __interrupt void basic_timer(void) { LPM3_EXIT; /* exit from low power mode 3 */ } Kind regards Holger
Reply by ●March 15, 20042004-03-15
I put the correct vector in eventually: #pragma vector=BASICTIMER_VECTOR __interrupt void basic_timer(void) { LPM3_EXIT; /* exit from low power mode 3 */ } That one-liner above links properly with XLINK. However, if I add more lines to the function, then i get the Error[e16]: Segment DATA16_Z(size:0xf2 align:0x1) is too long for segment definition. At least 0x71 more bytes needed. I have no idea how to fix this. I tried making a function call called my_isr_handler(), and that be the one line "my_isr_handler();" called in the ISR above, hoping there would be a jump to that function, yet i still get an error. Holger Schaefer <stuff@ingenieurdienstleistungen.de> wrote in message news:<Xns94AB57645223stuffingenieurdie@62.153.159.134>...> > When my ISR looks like this, all is fine: > > > > #pragma vector=0x00 > > __interrupt void basic_timer(void) > > { > > LPM3_EXIT; /* exit from low power mode 3 */ > > } > > > > However, when I attempt to place ANY extra lines of code in the > > basic_timer() function, then I get the following error: > > > > "Error[e16]: Segment CODE (size: 0x1008 align: 0x1) is too long for > > segment definition. At least 0x4a more bytes needed. The problem..." > > > > It looks like your vector is wrong. Have a look in the appropriate > headerfile and use the defined vectors. > For the F149 the BasictimerIrqvector is 0xFFE0 > So it should look like: > > > #include <io430x41x.h> > > #pragma vector=BASICTIMER_VECTOR > __interrupt void basic_timer(void) > { > LPM3_EXIT; /* exit from low power mode 3 */ > } > > > Kind regards > Holger
Reply by ●March 15, 20042004-03-15
> It looks like your vector is wrong. Have a look in the appropriate > headerfile and use the defined vectors. > For the F149 the BasictimerIrqvector is 0xFFE0 > So it should look like: > > > #include <io430x41x.h> > > #pragma vector=BASICTIMER_VECTOR > __interrupt void basic_timer(void) > { > LPM3_EXIT; /* exit from low power mode 3 */ > } > >Actually, I realized that I can add more lines to my isr. I found that the problem is that in the ISR, I access and change members of an array of structs. I guess I am violating some fundamental rule of MSP430 RAM allocation. But I still don't know how to correct it. Any hints?
Reply by ●March 15, 20042004-03-15
>Actually, I realized that I can add more lines to my isr. I found that >the problem is that in the ISR, I access and change members of an >array of structs. I guess I am violating some fundamental rule of >MSP430 RAM allocation. But I still don't know how to correct it. Any >hints?It might be easier to give hints if people can se what you are doing. Try posting your code.
Reply by ●March 16, 20042004-03-16
garykato@aol.com (Gary Kato) wrote in message news:<20040315122654.06566.00001408@mb-m25.aol.com>...> >Actually, I realized that I can add more lines to my isr. I found that > >the problem is that in the ISR, I access and change members of an > >array of structs. I guess I am violating some fundamental rule of > >MSP430 RAM allocation. But I still don't know how to correct it. Any > >hints? > > It might be easier to give hints if people can se what you are doing. Try > posting your code.I just found out that I was using the default processor in the compiler, which allows much less RAM than I thought. What I did get out of my correspondence with IAR though is that printf() uses a lot of CSTACK size. For my MSP430F412 that i'm using, i can have 128 bytes of global RAM, the other is used for auto variables and stack. The code is rather simple, and useless to post now that I was doing something wrong the whole time. When i get to work tomorrow, i'll look at another workaround that was proposed to me to manually increase stack space, which i'm sure many of you already know how.