我在我的代码中使用了三个计数器c1,c2和c3,用于系统中的一个进程。在某些点我需要触发每个计数器并在特定点结束它(targetc1,targetc2,targetc3)。因此,我使用三个标志cf1,cf2和cf3来检查计数器标志是否在我的进程被触发时设置为ON,然后检查计数器目标是否到达终点。有没有更好的方法来做而不是使用三个标志?我将来可能需要在我的代码中使用更多的计数器,但它不应超过我认为的6个计数器。 下面给出了p1流程的代码片段来解释我的问题。
/*P1 process variables*/
static int c1,c2,c3;
static int targetc1,targetc2,targetc3;
static int cf1,cf2,cf3;
p1startingfunction()
{
int a;
if(cf1 == 1)
{
c1++;
if(c1==targetc1)
/*counter reached do something*/
c1trigger();
}
if(cf2 == 1)
{
c2++;
if(c2==targetc2)
/*counter reached do something*/
c2trigger();
}
if(cf3 == 1)
{
c3++;
if(c3==targetc3)
/*counter reached do something*/
c3trigger();
}
}
答案 0 :(得分:1)
这方面仍有很大的改进空间,但这个答案专门用于减少代码重复。
话虽如此,你可以使用数组:
/*P1 process variables*/
static int c[3];
static int targetc[3];
static int cf[3];
static void (*ctrigger[3])(void);
p1startingfunction()
{
int a, i;
for (i = 0; i < 3; i++) {
if (cf[i] == 1) {
c[i]++;
if (c[i] == targetc[i]) {
/* counter reached do something */
ctrigger[i]();
}
}
}
}
或者你可以使用类似于:
的结构struct counter {
int c;
int target;
int f;
void (*trigger)(void);
};
然后创建一个结构数组。
struct counter counters[3];