This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:COFF 至 EABI 更改:float 和 int 变量不更新(显示 NaN)

Guru**** 2223470 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/984124/tms320f28335-coff-to-eabi-change-float-and-int-variables-not-updating-showing-nan

器件型号:TMS320F28335

大家好、我最近将代码从32位更改为64位、以获得更高的分辨率。 我也已从 COFF 更改为 EABI 设置、但我正在遇到文件链接方面的一些问题。 运行代码时、我的 float 和 int 变量不会更新。  

我还使用 了 https://software-dl.ti.com/ccs/esd/documents/C2000_c28x_migration_from_coff_to_eabi.html 页面、并更改 了链接器命令文件更改、并替换了一些主要的下划线问题。  我将下面的编译器设置与.cmd 文件一起附加我所做的更改。

如果我能在这一问题上获得一些援助,那将是非常感谢的。  

此致

阿拉法特

F28335.cmd 代码:

/*
//######################################################################################################################
//
//文件:F28335.cmd
//
//标题:F28335器件的链接器命令文件
//
//######################################################################################################################
//$TI 发行版:F2833x/F2823x 头文件和外设示例 V142 $
//$Release Date:2016年11月1日$
//版权所有:版权所有(C) 2007-2016德州仪器(TI)公司-
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################
*

/*===================================================================
//适用于 Code Composer Studio V2.2和更高版本
//--------------------------------------------------------
//除了该内存链接器命令文件外,
//将头文件链接器命令文件直接添加到工程中。
//链接时需要标头链接器命令文件
//将外设结构设置到内部的适当位置
//存储器映射。
//
//在中找到了头文件链接器文件 \DSP2833x_Headers\cmd
//
//对于 BIOS 应用程序添加:DSP2833x_Headers_BIOS.cmd
//对于非 BIOS 应用程序添加:DSP2833x_Headers_nonBIOS.cmd
=================================================================================================== *

/*===================================================================
//对于 V2.2之前的 Code Composer Studio
//--------------------------------------------------------
// 1)使用以下-l 语句之一来包含
//项目中的头链接器命令文件。 头文件链接器
//将外设结构链接到正确的文件
//内存映射中的位置*/

/*取消注释此行以仅包括非 BIOS 应用程序的文件*/
/*-l DSP2833x_Headers_nonBIOS.cmd */

/*取消注释此行以仅包括 BIOS 应用程序的文件*/
/*-l DSP2833x_Headers_BIOS.cmd */

/* 2)在项目中添加路径 \DSP2833x_headers\cmd 至
库搜索路径位于 project->build options、linker tab、
库搜索路径(-I)。
/*================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *

/*定义 F28335的内存块开始/长度
PAGE 0将用于组织程序段
第1页将用于组织数据段

注:
F28335上的存储器块是一致的(即相同的
物理存储器)。
不应该是相同的存储器区域
同时为 PAGE 0和 PAGE 1定义。
这样做将导致程序损坏
和/或数据。

L0/L1/L2和 L3存储器块被镜像-即
它们可以在高内存或低内存中访问。
为简单起见、其中仅使用了一个实例
链接器文件。

可组合连续 SARAM 存储器块
如果需要创建更大的存储器块。
*


存储器

第0页:/*程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/

ZONE0:origin = 0x004000,length = 0x001000 // XINTF 区域0 */
RAML0:origin = 0x008000、length = 0x001000 //片上 RAM 块 L0 */
RAML1:origin = 0x009000,length = 0x001000 //片上 RAM 块 L1 */
RAML2:origin = 0x00A000、length = 0x001000 //片上 RAM 块 L2 */
RAML3:origin = 0x00B000、length = 0x001000 //片上 RAM 块 L3 *
ZONE6:origin = 0x0100000,length = 0x100000 // XINTF 区域6 */
ZONE7A:origin = 0x0200000,length = 0x00FC00 /* XINTF 区域7-程序空间*/
FLASHH:origin = 0x300000、length = 0x008000 //片上闪存*/
FLASHG:origin = 0x308000、length = 0x008000 //片上闪存*/
FLASHF:origin = 0x310000、length = 0x008000 //片上闪存*/
FLASHE:origin = 0x318000、length = 0x008000 //片上闪存*/
FLASHD:origin = 0x320000,length = 0x008000 //片上闪存*/
FLASHC:origin = 0x328000,length = 0x008000 //片上闪存*/
FLASHA:origin = 0x338000,length = 0x007F80 //片上闪存*/
csm_RSVD:origin = 0x33FF80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
begin:origin = 0x33FFF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
CSM_PWL:origin = 0x33FFF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
OTP:origin = 0x380400,length = 0x000400 //片上 OTP */
ADC_CAL:origin = 0x380080,length = 0x000009 //保留存储器中的 ADC_cal 函数*/

IQTABLES:origin = 0x3FE000,length = 0x000b50 //引导 ROM 中的 IQMath 表*/
IQTABLES2:origin = 0x3FEB50,length = 0x00008c //引导 ROM 中的 IQMath 表*/
FPUTABLES:origin = 0x3FEBDC,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
ROM:origin = 0x3FF27C,length = 0x000D44 //引导 ROM */
复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/

第1页:/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页中*/

BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAML4:origin = 0x00C000、length = 0x001000 //片上 RAM 块 L1 */
RAML5:origin = 0x00D000、length = 0x001000 //片上 RAM 块 L1 */
RAML6:origin = 0x00E000、length = 0x001000 //片上 RAM 块 L1 */
RAML7:origin = 0x00F000、length = 0x001000 //片上 RAM 块 L1 */
ZONE7B:origin = 0x20FC00,length = 0x000400 // XINTF 区域7- data space */
FLASHB:origin = 0x330000,length = 0x008000 //片上闪存*/

/*将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*

部分


/*分配计划领域:*/
.cinit:> FLASHA PAGE = 0
init_array:> FLASHA,page = 0
.text:> FLASHA PAGE = 0
codestart:> begin page = 0
ramfuncs:load = FLASHD,
运行= RAML0、
Load_start (RamfuncsLoadStart)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
load_size (RamfuncsLoadSize)、
PAGE = 0

csmpasswds:>csm_PWL page = 0
csm_rsvd:>csm_RSVD page = 0

/*分配未初始化的数据段:*/
.stack:>RAMM1 page = 1.
.bss:> RAML4 PAGE = 1.
.sysmem:>RAMM1 PAGE = 1.

/*初始化段进入闪存*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
.const:> FLASHA PAGE = 0
.switch:> FLASHA PAGE = 0

/*分配 IQ 数学区域:*/
IQMath:> FLASHC page = 0 /*数学代码*/
IQmathTables :>IQTABLES,PAGE = 0,TYPE = NOLOAD

/*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables2:> IQTABLES2,PAGE = 0,TYPE = NOLOAD


IQMath.lib (IQmathTablesRam)


*

FPUmathTables:> FPUTABLES,PAGE = 0,TYPE = NOLOAD

/*分配可通过 DMA 访问的 RAM 段:*/
DMARAML4:>RAML4,PAGE = 1
DMARAML5:>RAML5,PAGE = 1
DMARAML6:>RAML6,PAGE=1
DMARAML7:>RAML7,PAGE=1

/*分配 XINTF 区域7的0x400来存储数据*/
ZONE7DATA:> ZONE7B,PAGE = 1.

/*.reset 是编译器使用的标准段。 它包含*/
/* C 代码_c_int00起始地址。 /*
/*当使用引导 ROM 时,此部分和 CPU 矢量*/
/*不需要表。 因此、默认类型设置为*/
/* DSECT */
.reset:> reset,page = 0,type = DSECT
VECTORS:> VECTORS PAGE = 0,TYPE = DSECT

/*分配 ADC_cal 函数(出厂时已预先编程到 TI 保留存储器中)*/
ADC_cal:load = ADC_CAL、page = 0、type = NoLoad

/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还 将在下面添加.c 文件的初始部分:

    //头文件
    #include "DSP28x_Project.h"//器件头文件和示例 include 文件
    #include "DSP2833x_Device.h"
    #include "DSP2833x_examples.h"
    #include "math.h"
    #include "string.h"

    //声明所有子例程
    空 Initsystem (void);//Main.1
    void Initvariable (void);//Main.2
    空 InitGPIO (空);//Main.3
    void ClearIF (void);//Main.4
    void Inithardware (void);//Main.5
    void EnableIF (void);//Main.6
    void EnableIDLE (void);//Main.6

    void InitEPwm1Examples(void);//Main.5.2
    void InitEPwm2Examples(void);//Main.5.3
    void InitEPwm3Examples(void);//Main.5.4
    void InitEPwm4Examples(void);//Main.5.5.
    void InitEPwm5Examples(void);//Main.5.4
    void InitEPwm6Examples(void);//Main.5.5.

    void Initadc_value (void);//Main.5.1
    //void adc (void);
    void reset_isr (void);

    // ISR 声明
    中断空 ADC_ISR (空);

    //全局变量
    UINT32 EPwm1TimerIntCount = 0;
    UINT32 EPwm2TimerIntCount = 0;
    UINT32 EPwm3TimerIntCount = 0;
    uint16 EPwm1_DB_DIRECTION = 0;
    uint16 EPwm2_DB_DIRECTION = 0;
    uint16 EPwm3_DB_DIRECTION = 0;
    uint16 i = 0;

    extern unsigned int RamfuncsLoadStart;
    extern unsigned int RamfuncsLoadSize;
    extern unsigned int RamfuncsRunStart;
    extern unsigned int RamfuncsLoadEnd;


    /********* APD 初始化开始 /
    // PWM 参数和中断频率

    int PRD_A = 751;
    int Deb_a = 1;
    浮点 PRD_Interr = 375;

    int PRD_ISR = 3750;// 25us
    // int PRD_ISR = 3148;// 21us

    浮点 SPT = 0;
    浮点 APD = 0;

    /********* APD 初始化结束 /

    /********* MC 初始化开始 /

    // PWM 初始化
    浮点 PRD = 669;//考虑递增计数器(对于200kHz 为750)
    浮动 PRDU = 3000;//对于非文件夹 GD 为0.1MHz
    浮点 DEb_pt = 3;//10
    浮点 DEB_PB = 3;//10 (是4?)
    浮点除法器= 56;//二次主用例测试
    浮点 Debu = 1;

    //取消文件夹初始化
    float unfFlag = 1;
    浮点周期= 1;

    // PLL 初始化
    float V_alpha[3]={0.0、0.0、0.0};
    float V_beta[4]={0.0、0.0、0.0、0.0};
    float V_d[2]={0.0、0.0};
    float V_q[2]={0.0、0.0};
    float V_q_er[2]={0.0、0.0};

    float A_1 = 1.999816938472530;
    float A_2 =-0.9905758754186;
    float A_3 = 0.471206229075142e-4;


    //双线形式
    float bn_1 = 0.000154539844293318;
    float bn_2 =-0.000158972013768773;
    float bn_3 =-0.000154539844293318;
    float bn_4 = 0.000158972013768773;
    float BD_2 =-2.995832538814968;
    float BD_3 = 2.991757093521227;
    float BD_4 =-0.995924276224838;


    /*
    // zoh 表单
    float bn_1 = 0;
    float bn_2 =-0.309078565741323e-3;
    float bn_3 = 0.627021600926429e-3;
    float bn_4 =-0.317943035185106e-3;
    float BD_2 =-2.995832519244495;
    float BD_3 = 2.991757055753957;
    float BD_4 =-0.995924258024169;
    *

    /*
    //无直流抑制
    float bn_1 =-0.222050704138232e-6;
    float bn_2 =-0.444101408276465e-6;
    float bn_3 =-0.222050704138232e-6;
    float bn_4 = 0;
    float BD_2 =-1.999816938472530;
    float BD_3 = 0.999905758754186;
    float BD_4 = 0;
    *

    float c_1 = 0.9999;

    float costh = 1.0;
    float sinth = 0.0;

    float theta_grid[2]={0.0、0.0};

    float delta_f[2]={0.0、0.0};// PLL 的输出频率
    fn = 60;//标称频率
    float fo = 0;
    浮动 wn = 377;
    float wo [2]={0.0、0.0};
    float wo_LPF[2]={0.0、0.0};
    浮点 TS = 25e-6;

    //内插参数
    浮点偏移= 0;
    float ACTIVE_SIGN = 0;
    float alpha_pll = 63.66;
    float idx_float = 0;
    int idx_L = 0;
    int idx_H = 0;

    // LPF 参数(10kHz 截止频率)
    浮点 LPF_A = 0.2391;// mult。 电流
    浮点 LPF_c = 0.5219;// mult。 按输出

    // LPF 参数(1kHz 截止频率)
    浮点 LPF_A1 = 0.072820507087338;// mult。 电流
    浮点 LPF_C1 = 0.854358985825323;// mult。 按输出

    // LPF 参数(1.2Hz 截止频率)
    float lpf2_a = 0.942388978008234e-04;// 1.2Hz 截止频率
    float lpf2_b = 0.942388978008234e-04;
    float lpf2_c = 0.999811522204398;

    float lpf2_xpit1 = 0;
    float lpf2_yprep1 = 0;

    // LPF 参数(12Hz 截止频率)
    浮点 LPF_A6 = 0.000376849049686055;// mult。 电流
    浮点 LPF_C6 = 0.999246301900628;// mult。 按输出

    //输出电压传感器初始化
    float Vo_p_sample_= 0.0;
    float Vo_n_sample = 0.0;
    float Vo_val = 0.0;
    float Vo_scale = 0.1341;//假设为33k x3和65
    //float Vo_scale = 0.093144;


    //输入电流传感器初始化
    float Iin_sample = 0.0;
    float Iin_val = 0.0;

    //输出电流传感器初始化
    float IO_sample = 0.0;
    float io_val[2]={0.0、0.0};
    float IO_s[2]={0.0、0.0};

    float io_scale = 0.002775;
    float IO_SENSE_OFFSET = 2252.25;

    //电网电压传感器初始化
    float VG_SENSE[2]={0.0、0.0};
    float u[4]={0.0、0.0、0.0、0.0};

    //输入电压传感器初始化
    float Vin_sense = 0;
    float Vin_val[2]={0.0、0.0};
    浮点 Vin[2]={0.0、0.0};

    浮点 Vin_scale = 0.02515262515;
    float Vin_use = 0;

    // CL 和 PWM 更新参数
    float theta = 0;
    float theta_prd_val = 0;
    float Debs_val = 0;
    float phase1_val = 0;
    float Phase2_val = 0;

    float delta_CL = 0;
    浮点 Δ_CL1 = 0;
    float delta_cl_val = 0;

    float iav_err = 0;
    float iav_err1 = 0;
    float iav_err_mc = 0;
    float iav_ERR1_MC = 0;

    浮点 LB = 0;
    浮点 UB = 0.2;

    浮点 C1 = 0;
    浮点 C2 = 0;
    浮点 KP_MC = 0.0002;
    float ki_mc = 2;
    浮点 TS_MC = 25e-6;
    float wCdmV = 0.0777;/2*PI*60*0.6e-6*240*sqrt (2)

    //交流电流基准
    float IPK_ref = 0.7071;// 120W
    // float IPK_ref = 1.1785;// 200W

    // Theta LUT -值降额为 PRD/2 - 2*THETA
    1、45、345、344、342、334、334、335、335、335、333、327、324、320、317、305、301、29、301、29、297、287、283、274、270、270、270、270、270、265、255、43、255、245、246、232、63、101、67、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、72、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、150、100

    // Delta LUT -作为 Delta 派生的值- THETA
    INT EPWM2_PHASE_LUT[200]={3665,362,360,357,349,344,337,329,307,294,280,266,250,241,233,227,221,2162,112,202,198,194,186,543,176,179,165,165,45,75,982,452,452,467,641,452,452,45,641,782,452,45,64,641,452,452,45,641,45,642,452,45,641,45,641,45,642,45,641,45,641,452,452,45,642,45,641,45,641,452,45,641,452,45,642,452,45,641,452,45,641,452,45,641,452,45,641,45,641,45,641,45,641,45,641,452,45,641,45,641,452,45,642,45,641,45,641,452,45,641,45,641,45,641,45,641,45,641,45,
    751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,75

    1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1
    int Debp3_LUT[200]={11、11、11、11、10、10、10、10、9、9、9、9、9、9、8、8、8、8、8、8、8、8、8、8、8、8、7、7、7、7、7、7、7、7、7、7、7、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、
    33、46、74、74、47、47、46、47、47、47、47、47、47、47、47、46、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、6、6、4、6、4、4、4、4、4、4、6、4、4、4、4、6、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4

    float iav_ref_vec_mc[200]={0、1.12082318296822E-02、2.24136703330155E-02、36135228798062E-02、4.48049982319983E-02、598530723301507280264062E-0264026402680240264026807280240264026807280240268024026402640264026402680728072802402680240264026802402640268024080240264026802402680240264026402680240802402640264026802402640264026402640264026802408024026402640264026402640264026402680240802402640264026402640264026402680240802408024026402640264026402640264026402640264026402640264026402640264026402640264026402640264026

    float IMC_ref_val = 0;

    int update_idx_mc = 0;
    float PHASE_LUT_IDx = 199;
    int LUT_COUNT_dir = 1;


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// APD DEFNS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 200W、0.1A、L = 8.1uH、C = 164uF
    1) INT PRD_VEC[200]={326,324,32,320,318,315,312,309,295,291,287,283,273,268,253,253,253,243,242,2302,218,212,205,192,186,179,165,156,337,1003,243,133,103,133,133,103,133,133,143,143,1003,136,336,103,143,1003,1003,1003,1003,1003,1003,146,337,1003,103,1003,1003,103,146,336,336,103,143,1003,1003,1003,1003,146,336,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,103,1003,1003,103,1003,1003,1003,103,1003,1003,1003,1003,1003,1003,193,103,1003,1003,1003,1003,1003,193,103,1003,193,102,193,1003,1003,1003,103,1003,1003,1003,1003,1003,193,103,103,
    内部 Duty_VEC[200]={180,180,180,180,179,179,178,177,176,175,174,172,169,167,163,161,156,153,150,144,144,144,138,135,124,120,1169,104,100,104,100,146,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,179,106,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,17
    13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、13、2、2、2、2、2、2、2、2、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4、4、4、5、5、5、5、5、5、5、6、13、13、13、13、13、14、13、13、13、14、13、13、13、13、13、13、14、13、13、13、13、13、14、13、13、13、13、14、14、13、13、14、13、13、13、13、13、13、13、13、13、14、13、13、14、13、13、13、13、13、13、14、13、13、13、14、13、13、13、13、13、14、13、13、14、13、13、13、14、13、13、13、13、13
    int DeBR_VEC[200]={18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,

    float VC_SAMPLE = 0.0;
    float VC_sensed = 0.0;
    浮点 VDC_SCALE = 0.03485187961165;

    float iL_a_sample = 0.0;
    float iL_a = 0.0;
    float IL_scale = 0.0007326;//实际测量的 Il、单位为安培(正负)

    //中间变量
    浮点 Vin1 = 0;
    浮点 Vin2 = 0;
    float VC_rec_A = 0;
    浮点 VC_A = 0;
    float VC_avg2 = 0;
    float VC_ERR = 0;
    float VC_ERR1 = 0;
    float c1_v = 0.0185006875/5;// Kp = 0.0185ki = 0.055;
    float C2_v = 0.0184993125/5;

    浮点 I0 = 0;
    浮子= 0;
    浮点 Ivalley = 0;
    浮点 IPEAK = 0;
    浮动 K1;
    浮动 K2;

    浮点 Thon = 0;
    float TLon = 0;
    浮点 Tsw = 0;
    float Duty_ff = 0;
    浮点 THDead = 0;
    浮点 TLDead = 0;
    浮点 Debr = 0;
    浮点 DEBF = 0;
    float Duty_cl = 0;
    浮点 Duty_CL1 = 0;
    浮点 Duty_A = 0;

    float lb_a = 0.1;
    浮点 UV_A = 0.9;

    int volte_controller = 1;

    float VC_ref = 85;

    // PI 电流控制器参数
    float iav_err;
    float iav_err1;
    浮点 I_DC_VOLTGE_LOOP = 0.07;

    浮点 C1_A;
    浮点 C2_A;
    浮点 G_I_A;
    浮点 WL_I_A;

    // LUT 参数
    int update_idx_a = 0;
    int LUT_idx = 0;
    float LUT_idx_float = 0;
    int LUT_idx_L = 0;
    int LUT_idx_H = 0;
    浮点使能= 0;
    浮点标志 ZC = 0;
    浮点 tripFlag = 0;

    float VON_val = 5;
    float voff_val = 4;

    // PR 控制器
    // 100Hz PR
    /*
    float PR_A_A = 0.001248362541545*100;//单位增益 pr,其中增益按提供的倍数扩展- w_c = 50,w_0 = 2*PI*100
    浮点 PR_B_A = 1.997256858028226;
    浮点 PR_C_A = 0.997503274916909;
    *

    // PR 控制器
    // 120 Hz PR
    //float PR_A_A = 0.002493549645693*17;//单位增益 pr,其中增益按提供的倍数扩展- w_c = 100,w_0 = 2*PI*120
    ///float PR_B_A = 1.994658522399998;
    ///float PR_C_A = 0.995012910708614;

    // PR 控制器
    // 120 Hz PR
    float PR_A_A = 0.001248328704525*50;//单位增益 pr,其中增益按提供的倍数扩展- w_c = 50,w_0 = 2*PI*120
    浮点 PR_B_A = 1.997148511889236;
    浮点 PR_C_A = 0.997503342590950;

    // LPF 参数(2k Hz 截止频率)
    float lpf2k_A = 0.135755248163633;// 2k Hz 截止频率
    float lpf2k_b = 0.135755248163633;
    float lpf2k_c = 0.728489503672734;

    float lpf2k_xpref1 = 0;
    float lpf2k_yfort1 = 0;

    float Iin_val_p = 0;
    float io_val = 0;

    float PR_xfors=1 = 0;
    float PR_xfors2 = 0;
    float PR_yfors=1 = 0;
    float PR_yfors2 = 0;

    int main (void){

    /*复制 secureRamFuncs 部分*/
    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、&RamfuncsLoadEnd-&RamfuncsLoadStart);//(uint32)&RamFuncs_loadsize &RamFuncs_loadend--&RamFuncs_loadstart

    /*初始化片上闪存寄存器*/
    InitFlash();

    //步骤1. 初始化系统控制:
    Initsystem();

    //步骤2. 初始化变量
    Initvariable();

    //同步所有 ePWM
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    //步骤3. 初始化 GPIO:
    InitGPIO();

    //Step 4。 清除所有中断并初始化 PIE 矢量表
    Clearif();

    //步骤5. 初始化所有器件外设
    Inithardware();

    //步骤6. 特定于用户的代码、启用中断
    EnableIF();

    //同步所有 ePWM
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    //步骤7. 空闲循环。 只需坐下来循环(可选):
    EnableIDLE();

    返回0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我链接的页面中有一条建议是包含.retain 行、但我不确定该行应位于何处。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、阿拉法特、

    在 EABI 中、将在链接阶段删除未引用的变量。 要保留此类变量、您可以添加#pragma RETAIN (symbol)。 这将确保.out 文件中存在变量、即使该变量未在应用程序代码中明确使用。

    您能否详细介绍一下您所面临的问题。 您是否能够在"Expressions"窗口中看到变量? 您是否无法从代码中修改这些变量?

    此致、

    Veena

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、阿拉法特、

    由于我们从过去2周以来没有收到您的消息、我们假设问题已得到解决。 我将此主题标记为已解决。 如果您仍面临问题、请拒绝解决方案并回复主题、提供更多详细信息。

    此致、

    Veena