Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

DAVE™プロジェクトでコンパイルの問題が発生しています。 問題をわかりやすくするために、コードを簡略化しました。
添付されたプロジェクトでは、ビルド中にエラーが発生します。 個々のファイルには間違いとして何も表示されません。 「関数」ファイルがプロジェクトから削除されると、正常にビルドされます。
問題を特定するための助けをいただければ幸いです。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/td-p/690054

0 件の賞賛
1 解決策
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは@yalcin-haksoz

declarations.h で次の変更を行ってください。 ファイル。

Pradeep_PN_0-1707296216716.png

宣言中に extern を使用することを常にお勧めします。

配列をローカルではなくグローバルに初期化してください。

配列をローカルで初期化すると、別のファイルからこの配列にアクセスしようとしても値は反映されません。

parameters.c ファイルは次のようになります。

Pradeep_PN_1-1707296364473.png

これにより、エラーが解決されます。

これがお役に立てば幸いで、さらに質問がある場合はお知らせください。

よろしくお願いいたします
プラディープ。

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/690947

元の投稿で解決策を見る

0 件の賞賛
8 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは @Yalcin_Haksoz

私はあなたのプロジェクトを見ました。

エラーは 'SWper'の複数の定義であることがわかります

上記の理由は、ヘッダーファイルで関数を定義したり変数を初期化したりすると、同じ関数が複数のモジュールで定義されているため、リンカーエラーが発生する可能性があるためです。

そのため、宣言はヘッダー ファイルに、定義はソース ファイルに必ず配置してください。

したがって、宣言を変更してください.h 次として:

Pradeep_PN_0-1707215825939.png

functions.c の 次として:

Pradeep_PN_1-1707215854529.png

これでエラーは解決します。

次のように変数を定義することもできます。

Pradeep_PN_2-1707216216481.png

上記の 2 つの方法のいずれかを使用して、ビルド エラーの解決に役立てることができます。

これがお役に立てば幸いですし、さらに質問がある場合はお知らせください。

よろしくお願いいたします
プラディープ。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/690326

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

大きな助け、今働いています。 ありがとうございました。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/690575

0 件の賞賛
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちはPradeep 、あなたの推奨事項に沿って、宣言を変数の定義から分離し、今ではプログラムが正常に動作します。 しかし、今、私は私の本当のプロジェクトで別の問題を抱えています。 宣言ファイルで宣言し、パラメータファイルで値を定義した配列がありますが、問題が発生しています。 プロジェクトファイルが添付されています。 問題の特定を手伝っていただければ幸いです。

ありがとうございました

うん

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/690579

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは@yalcin-haksoz

declarations.h で次の変更を行ってください。 ファイル。

Pradeep_PN_0-1707296216716.png

宣言中に extern を使用することを常にお勧めします。

配列をローカルではなくグローバルに初期化してください。

配列をローカルで初期化すると、別のファイルからこの配列にアクセスしようとしても値は反映されません。

parameters.c ファイルは次のようになります。

Pradeep_PN_1-1707296364473.png

これにより、エラーが解決されます。

これがお役に立てば幸いで、さらに質問がある場合はお知らせください。

よろしくお願いいたします
プラディープ。

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/690947

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

素晴らしい、すべてがうまくいきます。 ありがとうございます。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/691259

0 件の賞賛
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは

私はDAVE™を初めて使用します。

しかし、古いプログラマである私は、 ".h"で本当の定義を見るのは不快に感じます ファイル

「.c」を含むそれぞれと同様に、 ファイル、変数の異なるインスタンスが割り当てられ、confilictsをcouse 可能性があります。

そこで、いくつかのファイルを次のように変更しました。

declarations.h (英語)

#ifndef DECLARATIONS_H_
#define DECLARATIONS_H_


#include"XMC4200.h"
#include
#include 

extern	uint16_t SWper;	//Switching period in clock cycles. 1600 for fs=50kHz. 1250 for 64kHz. QuarterSine table must be changed accordingly.
extern	uint16_t Gain;	//PeakOfSine/InputDC, 1000 for 1. Do not use values above 1.
extern	uint8_t Ipklim;

extern	uint8_t Step;	//0 to 250, 0: Zero crossing
extern	bool Polarity;	//0: negative half cycle, 1: positive half cycle. Start with 0 to ensure fast leg bootstrap capacitor precharge.
extern	bool CountDir;	//1: Count up, 0: Count down. Start with 0 to ensure slow leg bootstrap capacitor precharge.
extern	bool G3state;	//Current state of G3
extern	bool G4state;	//Current state of G4


extern	uint16_t QuarterSine[];

#endif /* DECLARATIONS_H_ */

パラメータ.c

#include 

uint16_t SWper = 1250;	//Switching period in clock cycles. 1600 for fs=50kHz. 1250 for 64kHz. QuarterSine table must be changed accordingly.
uint16_t Gain = 222;	//PeakOfSine/InputDC, 1000 for 1. Do not use values above 1.
uint8_t  Ipklim = 6;
uint8_t  Step = 0;	//0 to 250, 0: Zero crossing
bool     Polarity = 0;	//0: negative half cycle, 1: positive half cycle. Start with 0 to ensure fast leg bootstrap capacitor precharge.
bool     CountDir = 0;	//1: Count up, 0: Count down. Start with 0 to ensure slow leg bootstrap capacitor precharge.
bool     G3state;	//Current state of G3
bool     G4state;	//Current state of G4

//Quarter sine for fs=64kHz: 0 to 1250, 251 steps and unity gain. Use the Excel file to generate tables for other switching frequencies.
uint16_t QuarterSine[] = {
	0,7,15,23,31,39,47,54,62,70,78,86,94,101,109,117,125,133,141,148,156,164,172,180,187,195,203,211,218,226,234,241,249,257,265,272,280,287,295,303,310,
	318,326,333,341,348,356,363,371,378,386,393,401,408,416,423,430,438,445,452,460,467,474,481,489,496,503,510,517,525,532,539,546,553,560,567,574,581,588,
	595,602,609,615,622,629,636,643,649,656,663,669,676,682,689,696,702,709,715,721,728,734,741,747,753,759,766,772,778,784,790,796,802,808,814,820,826,832,
	838,844,849,855,861,867,872,878,883,889,894,900,905,911,916,921,927,932,937,942,947,953,958,963,968,973,977,982,987,992,997,1001,1006,1011,1015,1020,
	1024,1029,1033,1038,1042,1046,1051,1055,1059,1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1102,1106,1110,1113,1117,1120,1124,1127,1131,1134,1137,
	1140,1144,1147,1150,1153,1156,1159,1162,1165,1167,1170,1173,1176,1178,1181,1183,1186,1188,1191,1193,1195,1198,1200,1202,1204,1206,1208,1210,1212,1214,
	1216,1218,1219,1221,1223,1224,1226,1227,1229,1230,1232,1233,1234,1235,1236,1238,1239,1240,1241,1242,1242,1243,1244,1245,1245,1246,1247,1247,1248,1248,
	1248,1249,1249,1249,1249,1249,1249,1250
};

main.c の main()

int main(void)
{

  DAVE_Init();           //Initialization of DAVE APPs


  PORT1->IOCR0 |= 0x800000;	//P1.2 is setup for loop timing. Bit23 set to 1 for push-pull output.
  CCU80_CC82->PRS = SWper;	//Change switching frequency. App setting is ignored for fsw. But ensure dead times are set correctly in the app.

//  Parameters(); // removed on 8-Feb-2024

  while(1U)
  {
	  PORT1->OMR |= 0x40004;	//P1.2 is toggled at each loop cycle. Setting OMR bits 2 and 18 high for toggle. Pin switches at high frequency except during interrupt handling.
  }
}

 

私はこれを私の環境でコンパイルすることができましたが、ハードウェアがないので、それが機能するかどうかをテストすることができませんでした。

モト

P.S. 言葉遣いが悪くてうるさくてすみません。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/691345

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

実際のCOOLDIM_PRG_BOARDで動作します。 ありがとうございます。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/691405

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは@MotooTanaka

「extern」キーワードを使用することは、ヘッダーファイルで変数を宣言するときに実際に最良の方法です。

あなたのコードは間違いなく問題なく動作します。

"extern" はリンケージを変更します。 キーワードを使用すると、関数/変数は別の場所で使用できると見なされ、解決はリンカーに延期されます。

ヒントをありがとう。

よろしくお願いいたします
プラディープ。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/DAVE-build-issue/m-p/691373

0 件の賞賛