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.
Reply by Gary Kato●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 Mike V.●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 Mike V.●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 Holger Schaefer●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 Mike V.●March 12, 20042004-03-12
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