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.

28035有关宏的问题



最近在用28035控制BLDC,发现TI官网例程调用了很多宏,我是把宏当作函数来读的,但发现有些按照函数的思维无法理解,比如RC2_MACRO(v),我无法理解它的输出有什么用?想请问下宏可以当函数来读吗?也就是每调用一次宏下面的程序中v.Ramp2DelayCount++,就自加1?但这个宏的输入是占空比,输出又是什么?跟占空比的调节好像又没关系。希望好心人能解读下,谢了

#define RC2_MACRO(v) \
if (v.Out != v.DesiredInput) \
{ \
v.Ramp2DelayCount++; \/**/
if (v.Ramp2DelayCount >= v.Ramp2Delay) \/**/
{ \
v.Ramp2DelayCount = 0; \
if (v.Out < v.DesiredInput) \/**/
{ \
v.Out++; \
if (v.Out > v.Ramp2Max) \
v.Out = v.Ramp2Max; \
} \
else \/**/
{ \
v.Out--; \
if (v.Out < v.Ramp2Min) \
v.Out = v.Ramp2Min; \
} \
} \
}

#endif // __RMP2_CNTL_H__

  • Daniel,

    宏当然可以当作函数来读啊,宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。相对来说宏的运行速度更快。读程序时,直接按调用的函数来读就行,它和函数的区别只是编译器的处理方法不同等。

    比如上面这个RC2_MACRO宏的作用是输入斜坡,即将阶跃的输入变为一个写斜坡上升的输入。举个例子:BLDC现在的速度是0转/分钟,设定目标速度是1000转/分钟,但这个速度给定不肯能一下子跳到1000, 而是按照一个给定的斜率慢慢给上去,如0->100->200->300等。

    按照这个思路看上面的代码就很清晰了,当然还加了一个输出的上、下限检查。

  • Martin 

    你好,非常感谢你的指点迷津!