【发布时间】:2012-04-30 08:50:53
【问题描述】:
我正在开发一个嵌入式 C 程序,其中即使调用 killnoise 函数并且程序总是到达它,它也不会执行,但是当我检查该函数输出的值时,我发现没有发生任何事情:
void KillNoise( int* array, int size )
{
int k;
for (k=0;k<size;k++)
{
if (array[k] < 20)
array[k] = 0;
}
}
这是我在哪里以及如何称呼它的:
void UX_zswDecide( void )
{
float __xdata centerOfMass[UX_NUM_SENSORS];
float __xdata vectx, vecty, module, tg;
int __xdata i,j;
KillNoise( UX_bigUpArray, NUMPOINTS );
KillNoise( UX_bigDownArray, NUMPOINTS );
KillNoise( UX_bigLeftArray, NUMPOINTS );
KillNoise( UX_bigRightArray, NUMPOINTS );
/* the rest of the function */
}
其中 NUMPOINTS、biguparray、bigleftarray ... 是之前声明的全局变量:
int __xdata UX_bigUpArray[100];
int __xdata UX_bigDownArray[100] ;
int __xdata UX_bigLeftArray[100];
int __xdata UX_bigRightArray[100] ;
#define NUMPOINTS 100
非常感谢您的帮助,(我在使用另一个函数时遇到了同样的问题)
【问题讨论】:
-
这看起来不错。你能提供一个minimal test-case吗?
-
如果数组中的所有值都等于或大于 20,则不会发生任何事情。
-
你确定 UX_zswDecide(() 正在执行吗?如果没有执行,就不会调用 KillNoise()
-
这是来自您的来源的剪切粘贴吗?如果没有,请检查您的 for 循环后是否有分号!
-
@Nick ahh 太棒了,你是我被开除工作的救星,hhhhhh
标签: c embedded firmware 8051 sdcc