主题中讨论的其他器件:C2000WARE
工具/软件:TI C/C++编译器
我的问题是、我将一个指向结构体的指针作为函数参数传递。 当我多次将指向结构体的指针传递给函数、然后在下一个函数调用中将指针更改为指向另一个结构体时、就会发生错误。 函数执行时接收到的地址不正确。 接收到的地址与函数时传递的地址不同。 被调用(正确的地址)。
下面是调试器中问题的图示。 下面是传递给函数的地址:
该函数可获得以下结果:
按下 F5 "step Into"键即可将这两个视图分开。 不用说、当这个函数运行时、它会生成大量内容、写入错误的地址。
结构如下所示:
/定义扫描结构 结构体扫描{ 浮点值; 先浮动; 最后浮动; 浮点数增量; uint16 i; uint16 n; }; struct Sweep VoutSweep; struct Sweep VinSweep; struct Sweep VcoSweep;
函数:
int SweepStep (struct Sweep *扫描,int Reset){
Int carry1 = 0;
如果(重置){
sweep->value = sweep->first;
sweep->i = 0;
如果(sweep->delta =0) sweep->delta = 1; //不进行零除
sweep->n =(int)( sweep->last - sweep->first )/sweep->delta +.5);
} 否则,如果(sweep->i=sweep->n){
残留1 = 1;
sweep->value = sweep->first;
sweep->i = 0;
} 否则{
sweep->value += sweep->delta;
扫描->i++;
}
回送1;
}
该函数调用:
if (进位&& VIN_sweep_on){ 进位= SweepStep (&VinSweep、0);//当上一次扫描达到最终值时、递增下一次扫描 } if (执行&& Vout_sweep_on){ 进位= SweepStep (&VoutSweep、0); //扫描在达到其最终值时返回1,否则返回0 } if (进位&& VCO_sweep_on){ 进位= SweepStep (&VcoSweep、0);//当上一次扫描达到最终值时、递增下一次扫描 }
该程序运行 SweepStep (&VinSweep、0)的扫描、直到它绕回并返回1。 然后运行 SweepStep (&VoutSweep、0)、并使用指向不同结构的指针。
这就是问题发生的时间。
这个问题的另一个特点是很难重现,因为似乎不相关的变化影响到它的发生。 最初、我在进行调用的两个函数中都使用了本地"carry (进位)"变量
(B4状态机函数)和 SweepStep 函数中。 我发现、如果我在任一位置更改进位变量的名称、问题就会消失。 这是没有意义的、因为两者都是
局部变量、但这是我的观察结果。 但现在问题再次出现、如上所述、两个变量具有不同的名称。
我正在运行 C2000Ware_3.01.00.00和 CCS 9.2.0.00013

