主题中讨论的其他器件: C2000WARE
当我从 TMS320F28377S 的控制套件中构建(CCS 7.2.0.00013)并调试 CLA_priet_cpu01示例时、在调用 Cla1ForceTask1andWait()后执行不会继续。
代码片段:
//
// cla_RunTest -针对指定矢量执行 CLA 任务测试
//
空 CLA_RunTest (空)
{
Cla1ForceTask1andWait();
int32 i、j、index;
int32 gold_out[length];
索引= 2;
GOLD_OUT[0]= 1;
GOLD_OUT[1]= 2;
//
//对于其余的数字,请跳过 evens
//
for (i = 3;索引<长度;i+=2)
{
for (j = 2;j <= I/2;j++)
{
如果(!(i % j))
{
中断;
}
}
如果(j > I/2)
{
gold_out[index]= i;
索引++;
}
}
。
。
。
但是、当我取消对 asm (" ESTOP0")的注释时;在 lchIsr1()处理程序中、调试器会停止。 因此、CLA1任务似乎已经完成。 此外、当我将 JTAG 连接到 CLA 并加载符号时、我能够单步执行 CLA 任务1代码。
//
// cla1Isr1 - CLA1 ISR 1.
//
_interrupt void cla1Isr1 ()
{
//
//确认任务1的任务结束中断
//
PieCtrlRegs.PIEACK.ALL = M_INT11;
//
//取消注释以停止调试器并在此处停止
//
asm (" ESTOP0");
}
我在"Disassembly"窗口中看到执行在 C$L1处循环:0xbb58到0xbb5d、等待 CLA 任务完成。 我不确定为什么我看到完成中断、但执行不会通过此循环。 我需要提高 C2000汇编的速度...
CLA_RunTest():
00bb4f: AABD MOVL *SP++,XAR2
00bb50: 5AAD MOVZ AR2、μ@SP
00bb51: DA84 SubB XAR2、#4
00bb52: 08AD00D0 ADD @SP、#208
169 Cla1ForceTask1andWait();
00bb54: 763F0001 IACK #0x0001
00bb56: F603 RPT #3
00bb57: 7700 || NOP
C$L1:
00bb58: 761F0050 MOVW DP、#0x50
00bb5a: 9226 MOV AL、@0x26
00bb5b: 9001 ANDB AL、#0x1
00bb5c: 5201 CMPB AL、#0x1
00bb5d: 61FB SB C$L1、EQ
173 索引= 2;
00bb5e: 0202 MOVB ACC、#2
请提供任何帮助。 为了了解 CLA 的开发、我将此作为我的第一个示例。 顺便说一下、我看到其他 CLA 示例的行为类似。
谢谢、
Tom