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/TMS320F2.8377万S:C++/按值调用始终将值置为零

Guru**** 2487425 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/570711/ccs-tms320f28377s-c-call-by-value-puts-always-a-value-of-zero

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

大家好,

自´m上午以来,我面临一种行为,即当我按值调用C++类的方法时,参数值始终以零的形式到达目标方法。

首先,了解钙化结构:
使用方法RunRefSys()可以使用类"ThreePhsSysInput",该类拥有具有方法GetNextPhaseVal()的类Transform。 当前方法
RunRefSys()调用方法GetNextPhaseVal

我已使用调试器逐步执行。 在"ThreePhsSysInput"类中,从由ADC结果提供数据的数组中读取值,并用于调试目的
结果将写入本地vaiable。 当我使用调试器查看u,v,w变量时,它们具有与零不同的特定值。
当调试器到达类转换”的目标方法“GetNextPhaseVal”时,参数以0.0 的形式到达

我试图通过引用来欺骗它,这只是一个实验,因为你,v,w是当地人。 我在那里观察到第一个指针返回了错误的值。 所以
我插入了一个伪指针作为“GetNextPhaseVal”的第一个参数,如GetNextPhaseVal (Double* dummyPtr,Double* L1,Double* L2,Double* L3),然后用感兴趣地址的指针定位正确的值。 这只是一个n´t,因为这还不是一个尝试
成为解决方案。

请参阅下面的代码。 直到上星期五,它仍然有效,但自从今天上午第一次汇编以来,我得到了这种效果。 我n´t链接器CMD文件中的内容。

难道有什么东西可以造成这只偶然到现在才起作用的救世主吗?

Double ThreePhsSysInput::RunRefSys()
{
	double u, v, w;
	u =(double)GetU(0);//inserted以便对调试器可见
	v =(double)GetU(1);//inserted以便对调试器可见
	w =(double)GetSysU(2);//inserted以便对调试器可见
	
,Getrefv, Getv, Phu} 

双转换:GetNextPhaseVal (双L1,双L2,双L3)
{
	双phaseDiff;
	双ret;
	//双偏移=(L1-L2)+(L2-L3)+(L3-L1);
	双当前相,dervPhase,avrgdervPhase,pllPhase;
	双posDiff1,posDiff2,posDiff3,最大,差分;
	Diff = L1+L2+L3;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪个版本的编译器? (它与CCS版本不同。) 您正在使用哪些编译器选项? 请从构建控制台窗口中剪切并粘贴选项。 请向我们展示函数Double ThreePhsSysInput::RunRefSys和Transform::GetNextPhaseVal的反汇编,以便我们可以检查它们是否有问题。