MUI16TOF32 MR2,@_CputoClaVar._u16AcVoltOffset
MCMPF32 MR0,MR2
MNOP
MNOP
MNOP
MBCNDD IcurrAneg,LEQ ;//NEED TEST MBCNDD-函数调用
MNOP ;如果 MR0 <= MR2 执行IcurrAneg()函数 MNOP
MNOP
MMOVI32 MR2,#0x38800000 ;1/(2^14)
MMPYF32 MR3,MR2,MR3
MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffseta
MMOV32 @_ClatoCpuVar._f32AcACurr,MR3
Susan Yang:MBCNDD 16BitDest {, CNDF} :
如果指定的条件为真,则通过将带符号的16Bit目标值添加到MPC值进行分支.否则,继续而不分支。如果地址溢出,则返回。
if (CNDF == TRUE) MPC += 16BitDest;
在您的代码中CNDF为 LEQ :Less than or equal to zero ZF == 1 OR NF == 1 即小于等于0
*******************************************************************************************
MCMPF32MR0,MR2 来比较MR0,MR2的值,这会影响MSTF寄存器内的标志 ZF和 NF
MCMPF32 MRa, MRb
If(MRa == MRb) {ZF=1; NF=0;}
If(MRa > MRb) {ZF=0; NF=0;}
If(MRa < MRb) {ZF=0; NF=1;}
*******************************************************************************************
MBCNDDIcurrAneg,LEQ
根据上面的MCMPF32的结果进行判断是否执行IcurrAneg
MUI16TOF32 MR2,@_CputoClaVar._u16AcVoltOffset
MCMPF32 MR0,MR2
MNOP
MNOP
MNOP
MBCNDD IcurrAneg,LEQ ;//NEED TEST MBCNDD-函数调用
MNOP ;如果 MR0 <= MR2 执行IcurrAneg()函数 MNOP
MNOP
MMOVI32 MR2,#0x38800000 ;1/(2^14)
MMPYF32 MR3,MR2,MR3
MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffseta
MMOV32 @_ClatoCpuVar._f32AcACurr,MR3
user6106831:
回复 Susan Yang:
请问,假设条件成立,执行IcurrAneg,如何判断是否执行完成呢(怎么判断哪个是这个函数的最后一条指令)?假设执行完成后,是再跳回到原位置,还是顺序执行IcurrAneg下面语句?
MUI16TOF32 MR2,@_CputoClaVar._u16AcVoltOffset
MCMPF32 MR0,MR2
MNOP
MNOP
MNOP
MBCNDD IcurrAneg,LEQ ;//NEED TEST MBCNDD-函数调用
MNOP ;如果 MR0 <= MR2 执行IcurrAneg()函数 MNOP
MNOP
MMOVI32 MR2,#0x38800000 ;1/(2^14)
MMPYF32 MR3,MR2,MR3
MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffseta
MMOV32 @_ClatoCpuVar._f32AcACurr,MR3
Susan Yang:
回复 user6106831:
您可以使用MSTOP停止任务.放置MSTOP指令以表示每个任务的结束。
MUI16TOF32 MR2,@_CputoClaVar._u16AcVoltOffset
MCMPF32 MR0,MR2
MNOP
MNOP
MNOP
MBCNDD IcurrAneg,LEQ ;//NEED TEST MBCNDD-函数调用
MNOP ;如果 MR0 <= MR2 执行IcurrAneg()函数 MNOP
MNOP
MMOVI32 MR2,#0x38800000 ;1/(2^14)
MMPYF32 MR3,MR2,MR3
MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffseta
MMOV32 @_ClatoCpuVar._f32AcACurr,MR3
user6106831:
回复 Susan Yang:
程序结构是这样:
_Cla1Task5:
MDEBUGSTOP::::表省略很多语句::MCMPF32MR0,MR2MNOPMNOPMNOPMBCNDDIcurrAneg,LEQMNOPMNOPMNOPMMOV32MR2,@_CputoClaVar._f32IacaSampSysaMMPYF32MR3,MR2,MR3::::表省略很多语句::MNOPMNOPMNOPMBCNDDCacuPIA,UNC;MBCNDD-函数调用MNOPMNOPMNOP
IcurrAneg:MMOV32MR2,@_CputoClaVar._f32IacaSampSysNaMMPYF32MR3,MR2,MR1;//(Ia-IasamplesysNb)*IasamplesyNsaMMOVI32MR2,#0x38800000 ;1/(2^14)MMPYF32MR3,MR2,MR3MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffsetaMSUBF32MR3,MR3,MR0;//(Ia-Iasamplesysb)*Iasamplesysa-Ioffset MMAXF32MR3,#0.0MMOV32@_ClatoCpuVar._f32AcACurr,MR3
CacuPIA:MI16TOF32 MR0,@_CputoClaVar._i16PfcCurrOffset;i_Pfc_Iin_OffsetMMOV32MR1,@_ClatoCpuVar._f32PfcACurrRef;i_Pfc_Ref_CurraMADDF32MR1,MR1,MR0MMOV32MR2,@_ClatoCpuVar._f32AcACurr::::表省略很多语句:: MSTOPMNOPMNOPMNOP
_Cla1T5End:
只有最后的_Cla1Task5:有一个MSTOP
请问IcurrAneg的最后一条语句应该是MMOV32@_ClatoCpuVar._f32AcACurr,MR3
那执行完这条语句后,程序跳到哪里?接下来如何执行?
MUI16TOF32 MR2,@_CputoClaVar._u16AcVoltOffset
MCMPF32 MR0,MR2
MNOP
MNOP
MNOP
MBCNDD IcurrAneg,LEQ ;//NEED TEST MBCNDD-函数调用
MNOP ;如果 MR0 <= MR2 执行IcurrAneg()函数 MNOP
MNOP
MMOVI32 MR2,#0x38800000 ;1/(2^14)
MMPYF32 MR3,MR2,MR3
MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffseta
MMOV32 @_ClatoCpuVar._f32AcACurr,MR3
user6106831:
回复 Susan Yang:
另外,请问目前CLA支持C语言编写么?
MUI16TOF32 MR2,@_CputoClaVar._u16AcVoltOffset
MCMPF32 MR0,MR2
MNOP
MNOP
MNOP
MBCNDD IcurrAneg,LEQ ;//NEED TEST MBCNDD-函数调用
MNOP ;如果 MR0 <= MR2 执行IcurrAneg()函数 MNOP
MNOP
MMOVI32 MR2,#0x38800000 ;1/(2^14)
MMPYF32 MR3,MR2,MR3
MUI16TOF32 MR0,@_CputoClaVar._u16PfcCurrSampOffseta
MMOV32 @_ClatoCpuVar._f32AcACurr,MR3
Susan Yang:
回复 user6106831:
支持的