我在.cla进行电机控制电流环、位置环、矢量计算。编写完程序后,编译不报错。在线仿真后,发现cpu里程序正常运行,但是cla任务不执行,而且会使cpu和cla公用变量置0(cputocla,且在cpu里定义过这个值),给这个变量加上volatile,就能正确保持在cpu里的定义。
然后 我把.cla中程序注释掉一部分,整个系统就能正常运行了,cla也正常工作。我尝试过随意注释一部分程序,都可以(应该不是程序编写问题)。疑似内存管理的问题。
我查看内存占用 ,发现还有很大余量。
RAMM0 : origin = 0x000122, length = 0x0002DE
RAMM1 : origin = 0x000400, length = 0x000400
RAMD0 : origin = 0x00C000, length = 0x000800
RAMD1 : origin = 0x00C800, length = 0x001800
RAMLS0_1 : origin = 0x008000, length = 0x00400
//我按照例程令CLA_MATH_TABLES_IN_ROM=1了,且添加的是rom的cla库,单独运行一部分程序,clamath是正常的
#if !(CLA_MATH_TABLES_IN_ROM)
CLA1mathTables : >RAMLS4_5, PAGE = 1
#endif
Cla1Prog : > RAMLS0_1, PAGE = 0
#elif defined(_FLASH)
.TI.ramfunc : LOAD = FLASHD,
RUN = RAMGS0_1,
RUN_START(_RamfuncsRunStart),
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
PAGE = 0
.text : > FLASHA, PAGE = 0
.cinit : > FLASHB, PAGE = 0
.pinit : > FLASHB, PAGE = 0
.switch : > FLASHB, PAGE = 0
.econst : > FLASHC, PAGE = 0
#if !(CLA_MATH_TABLES_IN_ROM)
//
//Load tables to Flash and copy over to RAM
//
CLA1mathTables : LOAD = FLASHL,
RUN = RAMLS4_5,
RUN_START(_CLA1mathTablesRunStart),
LOAD_START(_CLA1mathTablesLoadStart),
LOAD_SIZE(_CLA1mathTablesLoadSize),
PAGE = 1
#endif
Cla1Prog : LOAD = FLASHE,
RUN = RAMLS0_1,
RUN_START(_Cla1ProgRunStart),
LOAD_START(_Cla1ProgLoadStart),
LOAD_SIZE(_Cla1ProgLoadSize),
PAGE = 0
#else