1

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;
}
4

2 に答える 2

1

すべての体に感謝します。あなたが言ったように、pid.cはプロジェクトに追加されませんでした。同じ問題に直面する可能性がある人のために: codeVision AVR では、project->configure->files->input files->add からプロジェクトに .c ファイルを追加する必要があります。

プロジェクトに.cファイルを追加すると、エラーはなくなりました。

于 2021-02-23T14:33:56.880 に答える