【发布时间】:2019-08-23 12:35:40
【问题描述】:
我用 MATLAB 文件和免费的在线转换工具在 arduino 上创建了一个模糊控制系统。但是,当我尝试运行它时,我得到一个无法修复的错误:
'_FIS_ARR_OP' 尚未声明
我知道 typedef 是什么,但我不完全理解它在此处如何与双括号一起使用...
Header file
//***********************************************************************
#define FIS_TYPE float
#define FIS_RESOLUSION 101
#define FIS_MIN -3.4028235E+38
#define FIS_MAX 3.4028235E+38
typedef FIS_TYPE(*_FIS_MF)(FIS_TYPE, FIS_TYPE*);
typedef FIS_TYPE(*_FIS_ARR_OP)(FIS_TYPE, FIS_TYPE);
typedef FIS_TYPE(*_FIS_ARR)(FIS_TYPE*, int, _FIS_ARR_OP);
//***********************************************************************
使用_FIS_ARR_OP的函数声明:
FIS_TYPE fis_array_operation(FIS_TYPE *array, int size, _FIS_ARR_OP pfnOp)
{
int i;
FIS_TYPE ret = 0;
if (size == 0) return ret;
if (size == 1) return array[0];
ret = array[0];
for (i = 1; i < size; i++)
{
ret = (*pfnOp)(ret, array[i]);
}
return ret;
}
函数的使用:
FIS_TYPE fis_MF_out(FIS_TYPE** fuzzyRuleSet, FIS_TYPE x, int o)
{
FIS_TYPE mfOut;
int r;
for (r = 0; r < fis_gcR; ++r)
{
int index = fis_gRO[r][o];
if (index > 0)
{
index = index - 1;
mfOut = (fis_gMF[fis_gMFO[o][index]])(x, fis_gMFOCoeff[o][index]);
}
else if (index < 0)
{
index = -index - 1;
mfOut = 1 - (fis_gMF[fis_gMFO[o][index]])(x, fis_gMFOCoeff[o][index]);
}
else
{
mfOut = 0;
}
fuzzyRuleSet[0][r] = fis_min(mfOut, fuzzyRuleSet[1][r]);
}
return fis_array_operation(fuzzyRuleSet[0], fis_gcR, fis_max);
}
【问题讨论】:
-
考虑将minimal reproducible example 放在一起,这样我们就可以看到整个画面。您可能会发现无法在一个小示例中重复该问题,这可能会导致您找到答案
-
其实也有支持模糊逻辑指令集的微控制器,比如飞思卡尔HCS12。不过,您必须得心应手地使用摩托罗拉汇编程序。但最终产品将围绕迟缓的 Arduino 转圈圈。
-
愚蠢的问题......你是否包含了头文件?
标签: c arduino typedef fuzzy-logic