请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:LAUNCHXL-F28377S
我想使用 CLA、但发生了一些问题。 有一个循环需要计算8次。我希望 CPU 和 CLA 计算4次。但结果将是错误的。如果让其中一个核计算为8次、则没有错误。
CPU 程序如下所示:
TEM1 = 0; flag_testing2=0.2; GpioDataRegs.GPBCLEAR.bit.GPIO42=1; fVal3=cosvalue; fVal=sinvalide; fVal1=e_d; fVal2=e_q; ftem2=tem2; ftem3=tem3; Fa0/a0; Cla1ForceTask1();/CLA 对于(k=0;k<=3;k++) { //-------- 基本电压矢量的 Park 变换--- u_base_d[k]= u_base_alfa[k]*cosvalue + u_base_beta[k]*sinvalidue; u_base_q[k]=-u_base_alfa[k]*sinvalidue + u_base_beta[k]*cosvalue; //-------- 计算 e-_dash------- e_dash_d[k]= tem2 - u_BASE_d[k]/tem_r_ta_sigma; e_dash_q[k]= tem3 - u_BASE_q[k]/tem_r_ta_sigma; //-------- 计算 A1、A2的值--- a2[k]=(e_dash_d[k])*(e_dash_d[k])+(e_dash_q[k])*(e_dash_q[k]); a1[k]= 2*(e_d*e_dash_d[k]+ e_q*e_dash_q[k]); //-------- 计算对称性--- 对称[k]=-a1[k]/(a2[k]); DIART = a1[k]* a1[k]- 4 * a2[k]* a0; 如果(直径> 0) { t[k]=(sqrt (diart)- a1[k])/(2 * a2[k]); 如果(t[k]> tem1) { 温度1 = t[k]; k_new = k; DELAY_ISR_COUNT = t[k]/TS; } }
CLA 程序如下所示:
_interrupt void Cla1Task1 (void) { Int32米; float tem11=0、dart1=0; 浮点 TS1 = 0.00005; float tem_r_ta_sigma1=0.01954896; float t_cla[4]; //结果向量 float u_base_alfa_cla[4]={-179、179、358、0}; //保留任务的输入参数 float u_BASE_BETA_CLA[4]={-310.03709455、0}; //输入参数的正弦 float u_base_d_cla[4]; float u_base_q_cla[4]; float e_dash_d_cla[4]; float e_dash_q_cla[4]; float A1_CLA[4]; float A2_CLA[4]; fResult=-1; 对于(m=0;m<=3;m++) { //-------- 基本电压矢量的 Park 变换--- u_base_d_cla[m]= u_base_alfa_cla[m]*fVal3 + u_base_beta_cla[m]*fVal; u_base_q_cla[m]=-u_base_alfa_cla[m]*fVal + u_base_beta_cla[m]*fVal3; //-------- 计算 e-_dash------- e_dash_d_cla[m]= ftem2 - u_base_d_cla[m]/tem_r_ta_sigma1; e_dash_q_cla[m]= ftem3 - u_base_q_cla[m]/tem_r_ta_sigma1; //-------- 计算 A1、A2的值--- a2_cla[m]=(e_dash_d_cla[m])*(e_dash_d_cla[m])+(e_dash_q_cla[m])*(e_dash_q_cla[m]); a1_cla[m]= 2*(fVal1*e_dash_d_cla[m]+ fVal2*e_dash_q_cla[m]); //-------- 计算对称性--- //symmation_cla[m]=-a1_cla[m]/(a2_cla[m]); DIART1 = A1_CLA[m]* A1_CLA[m]- 4 * A2_CLA[m]* fa0; 如果(DIART1 > 0) { t_cla[m]=(__sqrt (dart1)- a1_cla[m])/(2 * a2_cla[m]); 如果(t_cla[m]> tem11) { tem11 = t_cla[m]; fResult = DIart1; KN=m+4; DELAY_ISR_count1 = t_CLA[m]/TS1; } } }