codeVision AVR の C プロジェクトにライブラリを追加しました。その関数を使用したい場合、このエラーが発生します。関数 '関数名' は宣言されていますが、定義されていません。ここに私のコードがあります:
#include "pid.h"
#include <mega32.h>
PidType _pid;
void main(void)
{
//some uC hardware initializing codes which are removed here to simplify code
PID_Compute(&_pid);
while (1)
{
// Place your code here
}
}
pid.h:
.
.
bool PID_Compute(PidType* pid);
.
.
および pid.c:
#include "pid.h"
.
.
bool PID_Compute(PidType* pid) {
if (!pid->inAuto) {
return false;
}
FloatType input = pid->myInput;
FloatType error = pid->mySetpoint - input;
pid->ITerm += (pid->ki * error);
if (pid->ITerm > pid->outMax)
pid->ITerm = pid->outMax;
else if (pid->ITerm < pid->outMin)
pid->ITerm = pid->outMin;
FloatType dInput = (input - pid->lastInput);
FloatType output = pid->kp * error + pid->ITerm - pid->kd * dInput;
if (output > pid->outMax)
output = pid->outMax;
else if (output < pid->outMin)
output = pid->outMin;
pid->myOutput = output;
pid->lastInput = input;
return true;
}
エラー:
関数 'PID_Compute' が宣言されていますが、定義されていません。
問題はどこだ?
編集:
ライブラリをプロジェクトに追加するために、.c および .h ライブラリ ファイルをメイン プロジェクト ファイルと同じフォルダに配置しました。
次に #include "pid.h" をメイン ファイルに追加します。
#include "pid.h"
#include <mega32.h>
// Declare your global variables here
PidType _pid;
void main(void)
{
.
.
EDIT2:コードを簡略化し、コード全体を表示できるようになりました:メインコード:
#include "pid.h"
PidType _pid;
void main(void)
{
PID_Compute(&_pid);
while (1)
{
}
}
pid.h:
#ifndef PID_H
#define PID_H
#include <stdbool.h>
typedef struct {
int i;
} PidType;
bool PID_Compute(PidType* pid);
#endif
pid.c:
#include "pid.h"
bool PID_Compute(PidType* pid) {
pid->i = 2;
return true;
}