Other Parts Discussed in Thread: C2000WARE
Tool/software:
Dear Experts,
CCS12.8.1
Compiler TI v22.6.2.LTS
I have a floating point variable declared as follows, in a CPU1 .c file:
#pragma DATA_SECTION(t,"ramls1_RAMCMD");
float32_t t;
where ramls1_RAMCMD is set as RAMLS1 in CMD, which is declared "CPU/CLA shared data memory" in MEMCFG.
When trying to compile the following CLA code:
extern float32_t t;
__interrupt void Cla1Task3 ( void )
{
t = 1.0f;
}
I get the following error:
"C:\Users\alon.g\AppData\Local\Temp\{0EC771BC-7449-406D-8A90-D7FD69504070}", ERROR! at line 419: [E0003] 16-bit register address not valid.
MMOV32 @t,MR0 ; [CPU_FPU] |89|
"C:\Users\alon.g\AppData\Local\Temp\{0EC771BC-7449-406D-8A90-D7FD69504070}", ERROR! at line 419: [E0003] Illegal register addressing operand
MMOV32 @t,MR0 ; [CPU_FPU] |89|
"C:\Users\alon.g\AppData\Local\Temp\{0EC771BC-7449-406D-8A90-D7FD69504070}", ERROR! at line 419: [E0004] Illegal operand combination
MMOV32 @t,MR0 ; [CPU_FPU] |89|
Errors in Source - Assembler Aborted
When t is defined as uint16_t or uint32_t, no such error occurs.
The following code where t is defined locally in the .CLA file also compiles OK:
float t;
__interrupt void Cla1Task3 ( void )
{
t=1.0f;
}
If I define TWO variables in the CPU1 .c file as follows:
#pragma DATA_SECTION(x,"ramls1_RAMCMD");
#pragma DATA_SECTION(t,"ramls1_RAMCMD");
float t;
float x;
then the following .cla code compiles OK:
extern float x;
__interrupt void Cla1Task3 ( void )
{
x = 1.0f;
}
The map file shows:
GLOBAL DATA SYMBOLS: SORTED BY DATA PAGE
address data page name
-------- ---------------- ----
00000400 10 (00000400) __stack
00008800 220 (00008800) V
00008802 220 (00008800) t
00008804 220 (00008800) x
Not only is there a bug, the error codes are not pointing to the allegedly problematic source line.
Thank You,
-Alon.