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.

[参考译文] CCS/TMS320F28335:为什么可以#39;t 我使用#define -d 常量作为函数的参数、因为它显示:"参数太少"以及"Expected )"或"expression?

Guru**** 2614265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/695586/ccs-tms320f28335-why-can-t-i-use-define--d-constant-as-the-argument-of-function-for-it-shows-too-few-argument-as-well-as-expected-or-expression

器件型号:TMS320F28335

工具/软件:Code Composer Studio

#define RCP_MAX_SMTSPEED 0.016129f;//最大步进电机速度的指定值、
#define RCP_STR_SMTSPEED 1.000000f;
#define CCALMD 0
#define CRCP_HUL_PRDNUM 0.014705f;
#define CRCP_STEP_Uang 0.625000f;
#define PWM_PRESCALE 2;

//将 CPU 定时器0、1和2配置为每秒中断一次:
// 150MHz CPU 频率,1秒周期(以 μ 秒为单位)
浮点 STARTSP;
浮点 RCPSTRSP = RCP_STR_SMTSPEED;
浮点 CPHLM = CRCP_HUL_PRDNUM;
浮点 CSU = CRCP_STEP_Uang;
uint16 CD = CCALMD;
STARTSP = RPM2HZ (RCPSTRSP、CPHLM、CSU、CD);
STARTSP *= PWM_PRESALE;
ConfigCpuTimer (&CpuTimer0、150、STARTSP、PWM_prescale); <--- 问题
CHZ = RCP_STR_SMTSPEED;
CpuTimer1Regs.TCR.bit.TSS = 1;
// ConfigCpuTimer (&CpuTimer1、150、1000000);
// ConfigCpuTimer (&CpuTimer2、150、1000000);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    每次我都必须使用变量来调用函数、这很烦人。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    除非您修改了 ConfigCpuTimer()函数,否则它将采用三个参数。  您用四种方法调用它:

    ConfigCpuTimer (&CpuTimer0、150、STARTSP、PWM_PRESALE);  

    您应该会看到错误"函数调用中的参数过多"。

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我给它一些尝试,例如给出六个或七个参数,如 ConfigCpuTimer(&CpuTimer1, 150, 1000000,1,4,6,2),那么问题仍然存在:参数太少。 :(
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已修改 ConfigCpuTimer()
    其中包括:
    空 ConfigCpuTimer (struct CPUTIME_VARS *定时器、uint32频率、uint32周期、uint32预分频)

    uint32温度;
    uint16 SETPSC;
    uint16 SETPSCH;

    //初始化计时器周期:

    SETPSCH =(UINT16)预分频>> 8;
    //预分频设置为1、2、3、4、5、6、7…… 但最好不要太多、只能进行补偿
    //时钟跳闸就足够了。
    if (((uint16)预分频>> 8 > 0)

    SETPSC=(预分频-((UINT16)预分频0xFF00);

    否则 SETPSC =预分频;
    Timer->CPUFreqInMHz =频率;
    Timer->PeriodInUSec =周期;
    temp =(long)(period*Freq/Prescale);
    Timer->RegsAddr->PRD.All = temp;


    Timer->RegsAddr->TPR.All = 0;
    Timer->RegsAddr->TPRH。ALL = 0;

    //初始化计时器控制寄存器:
    Timer->RegsAddr->TCR.bit.TSS = 1; // 1 =停止计时器,0 =启动/重新启动计时器
    Timer->RegsAddr->TCR.bit.TRB = 1; // 1 =重新加载计时器
    Timer->RegsAddr->TCR.bit.Soft = 1;
    Timer->RegsAddr->TCR.bit.FREE = 0; //定时器自由运行
    Timer->RegsAddr->TCR.bit.tie = 1; // 0 =禁用/ 1 =启用计时器中断
    Timer->RegsAddr->TPRH.bit.TDDRH = 0x00;
    Timer->RegsAddr->TPR.bit.TDDR = 0x00;
    Timer->RegsAddr->TPR.bit.PSC = SETPSC;
    Timer->RegsAddr->TPRH.bit.PSCH = SETPSCH;
    // Timer->RegsAddr->PRD.All = 0x08F0D180;
    Timer->RegsAddr->TIM.All = 0x00000000;
    //复位中断计数器:
    Timer->InterruptCount = 0;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Owen、

    当您创建#define 时、不要用分号终止行。  例如、在您的代码中、您有:

    #define CRCP_STEP_Uang 0.625000f;

    请删除末尾的分号以及所有类似行、然后重新编译。

    此致、

    Richard