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.
大家好、
IAM 将 28335与 CCS v6.1.2配合使用。
我的目标是实现电机控制应用。 为了独立于固定/浮点目标、我使用了 TI-DMC 库提供的宏。
一切都很好、现在我正在尝试优化我的代码以提高速度。 在这个过程中,我提出了一些问题,我希望社会可以帮助我。
问题1.
对于角度,我使用归一到 GlobalQ 编号(2 π 对应于'1'; PI 对应于0.5,-PI 对应于-0.5)。
角度需要在例程的各个阶段进行包装、我决定让它以 IQ 数学格式从[-0.5...0.5]运行。
因此、包装目前如下所示:
#define wrap_angle (角度)\
如果(角度>_IQ (0.5))\
角度-=_Iq (1.0);/*上环绕*/\
否则、如果(角度<_IQ (-0.5))\
角度+=_Iq (1.0);/*下环绕*/\
此时全局 Q 设置为24。
现在我尝试用一个位掩码来替代它... 我的想法如下:因为我的格式是全局 Q = 24我的面具
看起来是这样的
MASK =(2^24 - 1)= 16777215 = 0x00FF FFFF
用一个掩码包装一个单极信号可能看起来是这样的
角度&=遮罩
但我认为这不适用于双极信号。
那么、问题是 、如果用双极信号的位掩码替代上述分支、如何使用这种换行算法呢?
问题2.
此问题与 C2000系列的不同 CCS 编译器版本及其优化特性/影响有关。
现在、我的主 ISR 需要大约~50us 的计算时间。 当我尝试不同的编译器和优化设置时、这不会改变
很多(最高1-2 us 更快)-即使是使用"尽可能高的"优化设置也是如此。
我使用具有优化级别1...5的编译器版本16.9.0 LTS
这个(新)编译器是否仍然适合我的目标28335 (几年前发布的)、或者我应该继续
返回到一些较旧的编译器、并在那里尝试优化选项?
是否有任何通用的优化建议来加速代码? 我已经完成了以下操作:
-通过"ramfunc"属性将95%的函数打包到 ram 中(我仍有大量 RAM 剩余)
-内联更小的函数
-使用带宏的 DMC
-在编译器级别使用优化器(请参阅上文)
-“清理”代码,避免必要的操作并对其进行总结
提前感谢您的帮助!
此致
嗨,谢谢您的建议。
现在,我的解决方案运行良好,我只是在尝试提高代码的速度,因为每个 ISR 发生的“换行逻辑”~20次。 也许有人知道28335可以节省多少指令? (这很值得吗? 我的意思是大于5us 或类似的东西? 我不这么认为
我认为这对我没有太大伤害、但"自然"溢出会很好、因为我不再需要在代码中关注它(无论如何、QEP 模块会在索引事件时重置我的角度信号)。
请标记已回答的问题。 至于优化、我找到了一份很好的 TI 文档。 如果您能对节能潜力再作评论、我会很高兴。
此致