皆さん、こんにちは。
KDS3.0およびKSDK1.2を使用して、このガイド の更新 バージョンを添付してください。MQXプロジェクト用の新規プロジェクトウィザードはないため、手動で作成する必要があります。これらのガイドでは、それを行うための2つの異なる方法について説明します。
以前のバージョンではご不便と混乱を招き、大変申し訳ございません。
RTOS(ベアボード)を使用しない新しいKSDKプロジェクトの作成については、次のドキュメントを参照してください。
初めてのKSDK1.2を書くKDS3.0 でのアプリケーション - Hello World と GPIO 割り込み付きトグル LED
従来のMQX RTOSプロジェクトをMQX RTOS for KSDKプロジェクトに移植する方法については、以下のドキュメントを参照してください。
http://www.freescale.com/files/soft_dev_tools/doc/support_info/MQXKSDKPUG.pdf?fsrch=1
MQX for KSDK1.2 での新規 C++ プロジェクトの作成については、以下を参照してください。以下のドキュメントをご覧ください。
MQX RTOS for KSDK1.2を使用したC++プロジェクトの作成方法
FreeRTOS と KSDK1.2 の使用開始方法については、次のドキュメントを参照してください。
方法: KSDS1.2 用の新しい FreeRTOS を作成するKDS3.0 のプロジェクト
よろしくお願いいたします。
Carlos Musich
テクニカルサポートエンジニア
Carlos,
ありがとうございました。最初の解決策は、何もないよりはましでした - 私のフラストレーションを示したことをお詫びします。時間があるときにウィザードと更新された提案を試してみます。私は近づいてきましたが、いずれにせよMQXについてもっと学ぶ必要があります。
私はできる限りの解決策を試しており、ここにバックアップして役立つものを投稿します。
よろしくお願いします ![]()
Hi Turboman,
ここでは、プロジェクト生成ツールをダウンロードできます。まだベータ版であることに注意してください。
次のドキュメントも興味深いかもしれません: KDS3.0 プロジェクトに lwIP を追加する方法
よろしくお願いします。
カルロス
もどかしい!とても近いのに、まだ落とし穴があります。
新しいプロジェクトのpdfは、セクション2.8で「これで新しいプロジェクトは完全に自己依存し、実行する準備ができました」と書かれています。
悪い。
新しいプロジェクトは、元のプロジェクトと同じ ファイル を参照します。
仮想フォルダ (main.c) に新しい物理ファイルを作成できません。だから、私は半分修正されたデモ/サンプルコードで、どうにかして最初からやり直す必要があります。
KDS 用の新しい MQX プロジェクト・ウィザードはいつ利用可能になりますか?
私が新製品を作っていて、LWIP K64F pingデモで必要なものにかなり近いものを手に入れたと想像してみてください。デモを変更するだけですか?それとも、新しいプロジェクトを最初から作成しますか?
心配ありません![]()
私はそれを見逃しました。それは恥ずかしいことです。
どうもありがとうございます。
A:ステップ3.5で、仮想フォルダ構造が手動で再作成されることを示しています。
ステップ3.6では、フォルダを削除する必要があるProject_Settingsが示されています。
最後に、プロジェクトはデモのコピーと同じように見える必要があります。
ドキュメントのセクション 3 の手順に従ってプロジェクトを最初からビルドしようとすると、サンプル プロジェクトとは大幅に異なる結果が得られます。新しいプロジェクト ウィザードは、サンプル プロジェクトにないサブディレクトリ "Startup_Code" を持つディレクトリ "Project_Settings" を作成します。このディレクトリ内のファイルは、-nostartfiles リンカ・スイッチが設定されている場合でも、リンカ・コマンドに含まれます。その結果、ベクタ テーブルは MQX ライブラリからではなく、これらのファイルから入力され、プロジェクトは MQX を開始しません。
MQXプロジェクトをゼロから構築するための手順は廃止されていますか?
デモからコピーするのではなく、ゼロからビルドされたサンプル プロジェクトはありますか?
Hi,
万が一の参考までに、Kinetis SDKのMQX RTOSへの移植に関する詳細を掲載した新しいガイドをご用意しました。これには、RTCS ライブラリと MFS ライブラリをプロジェクトに追加するためのパスと設定が含まれています。
方法: MQX RTOS v4.x から MQX RTOS for KSDK v1.2 への移植
感謝
マック
追加の注意点:
RTCSライブラリを追加し、そのディレクトリをインクルードした後、最初にPLATFORM_SDK_ENABLED=1をコンパイラプリプロセッサに追加する必要があることがわかりました(インクルードディレクトリとlibの場所も同様に。しかし、それについては後で詳しく説明します)。
その後、__aeabi_d2izが未定義で、libmにあるというエラーが発生しました。この投稿(__aeabi_d2iz )に基づいて、リンカライブラリでは、libmがlibgccにあるものを参照しているため、 gcc は mの後に配置する必要があることがわかりました。
コメントありがとうございます、私はそれを修正します。見えない柱には気づきませんでした。
また、環境変数やその他のライブラリを追加するためのガイドラインも含めます。
スペースがない限り、パスに引用符を追加する必要はありません。
よろしくお願いします。
カルロス
まずは朗報です。
この新しいガイドと新しいツールは機能します!いくつかの基本的なテストのプロジェクトでは、前のプロジェクトのような割り込み検出の問題なしに実行できます。また、問題なくコンパイルするために必要なすべてのインクルード、プリプロセッサ設定、およびリンカ コマンドもリストされています。
中途半端なニュース:
ここにRTCS / MFS / ETCを含めることについてはまだ言及されていませんが、一般的な方法の概要を説明しているので、自分でそれを行うことができます。翌日か翌々日には、私が知っているコンポーネントを追加する方法を示すコメントをここに書くかもしれません。
また、相対パスの代わりに絶対パスを使用するという決定は、私のKSDKがC:/にインストールされていないため、少し面倒でした。しかし、KSDK 1.2 は KSDK_PATH 環境変数自体も書き込まないので、相対パスを適切に使用するために手動で書き出す必要がありました。
凶報:
PDFのフォーマットは、コードの一部をコピーして貼り付けるのにひどいです。インクルードディレクトリには非表示の列があり、ディレクトリをコピーしてチャンクに貼り付け、一部の部分が繰り返されます。私はそれらの多くを自分で修正しなければなりませんでした。
他の人を助けるために、ここに固定フォーマットのものの一部を貼り付けます。注: また、「変数の構築」で定義されたPROJECT_KSDK_PATH変数を使用して相対パスに切り替えました。私はそれらをコードフォーマットで配置したかったのですが、新しいコミュニティサイト投稿ツールでオプションを見つけることができません。
3.9a 物理フォルダ
"../BSP_Files"
"../Config_Files"
"../Config_Files/common」と入力します。
"../Debug_Console"
"../KSDK_Files"
"${PROJECT_KSDK_PATH}\rtos\mqx\mqx\source\include"
「${PROJECT_KSDK_PATH}\platform\devices\MK64F12\startup」
「${PROJECT_KSDK_PATH}\platform\devices\MK64F12\include」
「${PROJECT_KSDK_PATH}\platform」
「${PROJECT_KSDK_PATH}\platform\devices」
"${PROJECT_KSDK_PATH}\platform\CMSIS\Include"
「${PROJECT_KSDK_PATH}\platform\hal\inc」
"${PROJECT_KSDK_PATH}\platform\drivers\inc"
「${PROJECT_KSDK_PATH}\platform\drivers\src\mpu」
"${PROJECT_KSDK_PATH}\platform\drivers\src\uart"
「${PROJECT_KSDK_PATH}\platform\utilities\inc」
「${PROJECT_KSDK_PATH}\platform\osa\inc」
「${PROJECT_KSDK_PATH}\platform\system\inc」
「${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\config」
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx"
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx_stdlib"
3.9b 仮想フォルダ
"${PROJECT_KSDK_PATH}\rtos\mqx\config\mcu\MK64F12"
"${PROJECT_KSDK_PATH}\rtos\mqx\config\board\frdmk64f"
"${PROJECT_KSDK_PATH}\rtos\mqx\config\common"
"${PROJECT_KSDK_PATH}\rtos\mqx\mqx\source\include"
"${PROJECT_KSDK_PATH}\rtos\mqx\mqx\source\bsp"
「${PROJECT_KSDK_PATH}\platform\utilities\src」
「${PROJECT_KSDK_PATH}\platform\utilities\inc」
「${PROJECT_KSDK_PATH}\examples\frdmk64f」
「${PROJECT_KSDK_PATH}\platform\devices\MK64F12\startup」
「${PROJECT_KSDK_PATH}\platform\devices\MK64F12\include」
「${PROJECT_KSDK_PATH}\platform」
「${PROJECT_KSDK_PATH}\platform\devices」
"${PROJECT_KSDK_PATH}\platform\CMSIS\Include"
「${PROJECT_KSDK_PATH}\platform\hal\inc」
"${PROJECT_KSDK_PATH}\platform\drivers\inc"
「${PROJECT_KSDK_PATH}\platform\drivers\src\mpu」
"${PROJECT_KSDK_PATH}\platform\drivers\src\uart"
「${PROJECT_KSDK_PATH}\platform\utilities\inc」
「${PROJECT_KSDK_PATH}\platform\osa\inc」
「${PROJECT_KSDK_PATH}\platform\system\inc」
「${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\config」
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx"
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx_stdlib"
3.11 リンクライブラリパス
ksdk_platform_mqx
_mqx_stdlib
_mqx
gcc
c
SUPC ++の
m
ノシス
「${PROJECT_KSDK_PATH}\lib\ksdk_mqx_lib\kds\K64F12\debug」
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx_stdlib"
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx"
3.12 ライブラリのフルパス
"${PROJECT_KSDK_PATH}\lib\ksdk_mqx_lib\kds\K64F12\debug\libksdk_platform_mqx.a"
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx_stdlib\lib_mqx_stdlib.a"
"${PROJECT_KSDK_PATH}\rtos\mqx\lib\frdmk64f.kds\debug\mqx\lib_mqx.a"
3.18
-Xlinker -static -Xlinker -z -Xlinker muldefs -Xlinker --undefined=__isr_vector -Xlinker --defsym=__stack_size__=0x400 -Xlinker --defsym=__heap_size__=0x200
3.19
#include
#include
#include
/* タスクID */
#define HELLO_TASK 5
#define WORLD_TASK 6
extern void hello_task(uint32_t);
エクスターンボイドworld_task(uint32_t);
定数 TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
/* タスクインデックス、関数、スタック、優先度、名前、属性、パラメータ、タイムスライス */
{WORLD_TASK, world_task, 700, 9, "world", MQX_AUTO_START_TASK, 0, 0},
{HELLO_TASK, hello_task, 700, 8, "hello", 0, 0, 0},
{0}
};
/*タスク*-----------------------------------------------------*
* タスク名 : world_task
*コメント:
※このタスクでは、hello_taskを作成してから「ワールド」を印刷します。
*
*END*-----------------------------------------------------*/
ボイドworld_task(uint32_t initial_data)
{
_task_id hello_task_id;
hello_task_id = _task_create(0, HELLO_TASK, 0);
if(hello_task_id == MQX_NULL_TASK_ID)
{
printf("\n hello_taskを作成できませんでした\n");
}
else
{
printf(" ワールド \n");
}
_task_block();
}
/*タスク*-----------------------------------------------------*
* タスク名 : hello_task
*コメント:
* このタスクは「Hello」を出力します。
*
*END*-----------------------------------------------------*/
void hello_task(uint32_t initial_data)
{
printf("\n Hello\n");
_task_block();
}
/* EOF */
Hi Sean,
たぶん明日。しかし、確かに金曜日までです。
よろしくお願いします。
カルロス
申し訳ありませんが、このガイドの新しいバージョンは、KSDK1.2に関連しています解放。ガイドの新しいバージョンはいつ利用可能になりますか?
現在入手可能です。
Kinetisソフトウェア開発キット マイクロコントローラ|フリースケール
よろしくお願いします。
David
こんにちはカルロス、KSDK1.2の新しいバージョンがどれくらい離れているか知っていますかです。
ありがとうございます
ショーン
皆さん、こんにちは
このドキュメントを公開してからしばらくして、これらのエラーを見つけました。私は調査を続け、ゼロから作成された完全に機能するプロジェクトがあることを知っています。添付されています。
これを修正し、KSDK1.2とKDS3.0で新しいバージョンをすぐに公開します。
ご不便をおかけして申し訳ございません。
カルロス
テストしていただきありがとうございます。
昨日、このプロジェクトの変更に数時間を費やしましたが、残念ながら成功しませんでした。
間違った動作の理由は明らかです:コンパイラ/リンカは、MQXライブラリからこれらのコンポーネントを選択するのではなく、SDKプロジェクトのスタートアップコードとベクトルテーブルをどういうわけか好みます。悪いことに、これまでMQXコードを実装するためにリンカーを「納得させる」方法が見つからなかったことです(例:boot.s)元のSDKの代わりに。
RadekS
Hello RadekS,
短いバージョン:
変更をテストしましたが、問題は解決しませんでした。
「Hello World」は、常に端末に問題なく印刷されています。問題は、"Hello World" の実行が速すぎて問題が明らかにならないことです。テキストを長い文字列に置き換えると、実行が途中で停止することがわかります(SysTick_Handler()が呼び出されようとするときに賭ける5msのマークで)。または、printf ステートメントの 1 つに _time_delay(10) 呼び出しを追加します。
長いバージョン:
これは、新しいプロジェクトと既存のサンプルプロジェクトとの紛らわしい違いの1つを説明するのに役立ちます:既存のサンプルには.aしかありませんでしたこのガイドで説明されているライブラリやライブラリディレクトリではなく、リンクされているファイル。サンプルプロジェクトには、入力をラップする -Xlinker --start-group ${INPUTS} -Xlinker --end-group もあり、これは上記のコマンドと同じことを行っているようです。また、RTCS/MFS を追加するときに必要だった -z muldefs オプションを追加する必要もなくなります。サンプルプロジェクトには muldefs オプションが追加されていますが、リンカーオプションは「 -Xlinker -static -Xlinker -z -Xlinker muldefs -Xlinker --undefined=__isr_vector」 に加えて「クロスリファレンス (-Xlinker --cref)」 が選択されています。ただし、コンパイルする必要はなさそうで、冗長なだけかもしれません。
私の視点から見ると、割り込みとSysTickの問題は副作用のように見えます。
KDSガイドの「 How To: Create a New MQX RTOS for KSDK Project 」を試してみました。
さらに、Cross Arm C Compiler ==> Preprocessorシンボルを追加します。
「CPU_MK64FN1M0VMD12=1」
"FSL_RTOS_MQX=1"""
「_AEABI_LC_CTYPE=C」
「__STRICT_ANSI__=1」
"_DEBUG=1"
また、Cross Arm C Compiler ==> Optimization を "GNU ISO C99 (-std=gnu99)" として設定します。
しかし、ステップ3.15で止まりました。この手順でプロジェクトをビルドできましたが、それらがないと、ビルドがエラーを引き起こします(シリアルインターフェイスへの参照はありません)。ステップ 3.15 はステップ 3.13 と 3.14 を一緒に行う必要があるため、奇妙でした。
これにより、問題はコンパイラの依存関係にあることがわかります(Marianに感謝します)。
提案された解決策:
Cross Arm C++ リンカのコマンドラインパターンに "-Wl,--start-group" と "-Wl,--end-group" の推奨行オプションを追加して変更してください。
${COMMAND} ${cross_toolchain_flags} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} -Wl,--start-group ${INPUTS} -Wl,--end-group
これにより、 複数のライブラリ間の循環参照が解決されます。
これらの設定では、ステップ3.15は必要なく、コードは私の側で正しく機能します。ターミナルに「Hello World」と表示されます。
あなたの側でテストしていただけませんか?
お役に立てれば幸いです。
私は何かを掴んだと思いました:ここで生成したプロジェクトとhttpsrv_frdmk64fプロジェクトを比較すると、いくつかの注目すべきリンカー設定が異なることに気づきました。
ただし、これらの設定を一致させて変更しても問題は解決しません。次に、C ++リンカの代わりにCリンカを使用するように強制できるかどうかを見ていきます。
クリス、私はあなたの問題を事前にはっきり読んでいなかったはずです。私はかなり長い間この問題に取り組んでおり、なぜ私のプロジェクトがランダムに停止するのかを理解しようとしています。私はこのコミュニティの投稿を始めて、多くのことを試しました(Re:Printfが印刷の途中で失敗し、ファームウェアの実行が停止しますか?その関数を追加した後、コードを適切に実行できるようになりました。
しかし、あなたと同じように、私はこれが決して安全な解決策だとは感じていません。ティックハートビートを無効にすることで、MQXが正常に機能しなくなるようです。MQXが任意のタイミングで内部的にティックを使用する場合(タスクの切り替えなど)そうすると、それらの機能が壊れる可能性があります。DavidSさん、これが事実かどうか、または機能させないために何が欠けている可能性があるか教えていただけますか?これは、プロジェクトの実行に5ms以上かかる人には起こるようで、この方法で有用なものをプログラムするのが難しくなります。
編集:私はちょうど恐ろしい考えを持っていました。この内部割り込みが正しくリンクされていない場合、他に何が見つからないかは誰にもわかりません。また、他の奇妙で微妙な障害を引き起こす可能性があります。
また、そうした後、ライブラリヘッダーを含めるときに複数の定義エラーがポップアップし始めるなど、いくつかの問題に遭遇しました(Re:arm-none-eabiがmqxと競合する:stdio.hの複数の定義などがコンパイラの問題を引き起こしています)。これが理想的な解決策かどうかはわかりませんが、コンポーネントを追加してコンパイルすることができました。
私も全く同じことを考えています。また、回答をいただければ幸いです!
Hello, Kris
私もMQX-SDKでこの問題を解決する方法を見つけるのに苦労しています。問題がSysTick_Handlerによって引き起こされる可能性があるとは思いもしませんでした。ヒントをありがとう。main.cに含めたときファイル、それは私にも働きました。しかし、この回避策が本当に問題を解決するのか、それとも単に問題を隠しているのかはわかりません。残念ながら、ソフトウェア開発中に、これによりバグがさらに発生する可能性があります。ですから、このコミュニティでIvaが提案した方法、 https://community.freescale.com/docs/DOC-104144 を使用する方が快適で安全だと感じています。
この方法では、既存のプロジェクトをmqx/examplesフォルダから同じフォルダにクローンして、プロジェクトの参照として使用できるようにします。エラーが発生しにくくなります。
あなたや他の誰かが問題を解決する方法を見つけた場合は、私に知らせてください。同じ問題に直面している人は多いのではないでしょうか。
ありがとうございます
Marco Coelho
カルロスさん、ありがとうございました。
これは非常に役に立ちました、そしてあなたのガイドとこれらのコメントの間で、私は予想外の多くのステップと私がKSDKに含まれているMQXマニュアルのいずれにも文書化されていないステップの多くに従って新しいプロジェクトを実行することができました。そこで、私の質問にたどり着きました。
これを複製して、RTCS、MFS、またはその他のコンポーネントをプロジェクトに含めるには、どうすればよいですか。驚いたことに、RTCSのドキュメントには、プロジェクトに組み込む方法について何も言及されておらず、機能が何であるかについてのみ言及されています。「${PROJECT_KSDK_PATH}/tcpip/rtcs/lib/frdmk64f.kds/debug/rtcs」を含むディレクトリと関連するlib_rtcs.aファイルだけではできません。これにより、RTCS プロジェクトの特定の #defines が新しいプロジェクトで正しく読み取られず、コンパイルが停止します。また、rtcs_user_config.hをコピーするべきだという印象を受けています作成したConfig_filesディレクトリにファイルを作成しますが、これ以上コピーする必要があるかどうかはわかりません。
ありがとうございます
ショーン
はい、MQX ライブラリはクリーン インストール後にデフォルト設定でコンパイルされ、プロジェクトにリンクされています。チュートリアルの指示に従いました。私が知る限り、MQXは2つの「hello」タスクと「world」タスクで正常に動作しています。
ハンドラの有無にかかわらず、コンパイルエラーや複数の定義エラーは発生しませんが、ハンドラを含めないと、SysTick割り込みが初めて発生したときにDefaultHandler()クラッシュが発生します。
Hello Kris Simonsen:
実際には、SysTickハンドラの追加に関するあなたの解決策は奇妙です。MQXプロジェクトは期待どおりに機能していますか?タスクは1つ以上ありますか?
ハンドラーは MQX ライブラリーの一部としてコンパイルされ、_boot で宣言されます 。S;Davidが述べたように、SysTickはMQXスケジューラのタイムベースとして使用されます。プロジェクトで定義すると、複数の定義エラーが表示されるはずで、何らかの理由でコンパイルされた場合は、MQX SysTickハンドラーをオーバーライドすることになります。mqxライブラリを追加しましたか(lib_mqx.a)あなたのプロジェクトに?
また、上記のMyke Predkoによるコメントを読んでください、チュートリアルにはプリプロセッサのマクロ定義がいくつか欠けているようです。これについてはカルロスに知らせます。
敬具
ホルヘ・ゴンザレス
私がまだ理解するのに苦労しているのは、このプロジェクトが、まったく同じMQX初期化コードとBSP設定ファイルを使用するデモプロジェクトとどのように異なるかということです。これらのプロジェクトにはSystick_Handlerがないため、割り込みを無効にしているに違いないと推測しますが、このチュートリアルでは割り込みがまだ発生し、ハンドラを追加する必要があります。
どう違いますか。
良いデバッグKris.修正を共有してくれてありがとう。
Systickタイマーは、200Hzまたは5msごとのRTOS TICK(心拍)に使用されます。
よろしくお願いします。
David
更新: 割り込みは、欠落しているSystick_Handlerから発生していると判断されました。これをmain.cに追加すると、プログラムが実行されます。
ボイド SysTick_Handler(ボイド) {}
なぜこの割り込みが有効になっているのか、MQXで必要なのかはわかりませんが、このプロジェクトを動作させるにはハンドラが必要でした。
カルロス、私はこのチュートリアルに正確に従いました(それは非常によく書かれています)が、結果のプログラムはまだIRQベクトルに問題があるようです。
FRDM-K64Fボードを使用しています。
プロジェクトは警告なしに正常にコンパイルされ、正常にプログラムされて実行を開始しますが、プロジェクトを開始した直後にハードフォールト/未処理の割り込みが発生するようです。私はこの障害の原因を特定するために多くのことを試しましたが、無駄でした。このプロジェクトでは、他の何も実行できません。
エラー発生時のスタックトレースとレジスタを次に示します。
必要なすべてのライブラリは、デフォルト設定でコンパイルされています。フラグが設定されていないため、実際にはWDOG割り込みではないことを確認しました-また、WDOG_EWM_IRQのハンドラを含めると、それは起動せず、DefaultHandlerに行く他の未定義の割り込みの1つが代わりに逆アセンブル画面に表示されます。これはベクトルの問題またはMQXとのメモリ競合である可能性があるように思われますが、わかりません。
この手順は、使用可能なベースライン プロジェクトにはならないと思うので、確認してください。
これをまとめてくれてありがとう、うまくいけば誰かが問題が何であるかを整理することができます。
こんにちは、カルロス・エンリケ:
FRDM-KL25 はまだサポートされていません。これは、4月末または5月初旬に 予定されているKSDK v1.2 の次のリリースに付属しています。
敬具
ホルヘ・ゴンザレス
Hi Carlos Musich:
このチュートリアルをボードFrdm-KL25Zで使用できますか?、ボードFrdm-K64Fしか表示されないため、
感謝
カルロス・エンリケ
これは、2つの問題のいずれかである可能性があります。最初に見ていくのは、「FRDM-K22FでMQX USBデモを実行する方法」でカバーされています。図書館の問題が議論されている場所。
ライブラリがファイル システムにある場合は、C/C++ ビルド リンカー セクションのプロジェクト プロパティを確認し、ライブラリが一覧表示されていること、およびライブラリへのパスが正しいことを確認します。
これがお役に立てば幸いです!
Hi Myke
これを見つけていただきありがとうございます...。私もまったく同じエラーが発生したため、プリプロセッサの定義は 間違いなく必要であり、Carlosの命令には含まれていません。
このエラーの原因となっている可能性のあるアイデアはありますか?
make: *** ターゲットを 'C:/Freescale/KSDK_1.1.0/lib/ksdk_mqx_lib/K22F51212/Debug/libksdk_platform_mqx.a' にするルールはありません。「xxxxxxxxxxx.elf」が必要です。止める。
みんなを解決しました......プロセッサ名の前に /kds フォルダがありませんでした。
私のプロジェクトの正しいパスを以下に示します。
`C:/Freescale/KSDK_1.1.0/lib/ksdk_mqx_lib/kds/K22F51212/Debug/libksdk_platform_mqx.a'
こんにちは、みんな。
ビルドすると、次のエラーが発生します。
<
例と同じボードを選択したので、まったく同じことを行いました。
何か提案はありますか?
どうぞよろしくお願いいたします。
Alberto
Hi Myke,
私はただ彼らのデモを実行させようとしていただけです。KDS/KSDK/PE/MQXの組み合わせが弱気であるという意見には同意します。この組み合わせを初めて知ったとき、「素晴らしいことだ」と思いましたが、フリースケールの道のりは長いことがわかりました。
私にとって、PEの側面は重要であり、あるデザインから別のデザインにプロジェクトを迅速に移行できる必要があります。しかし、ドキュメントがまばらですぐに古くなってしまうため、これはうまくいっていません。今のところは、このスレッドの冒頭で紹介した資料に基づいて構築することにしました。つまり、 FRDM-K22Fについては、Freescale MQX RTOS 4.1 の資料に戻り、必要に応じてコードの一部を「借用」します。(主な問題は、ダウンロードに KDS 用のものが含まれていないことです。そのため、移行する必要があります。また、PEをまったく使用していないようです-本当に残念です!
その間、フリースケールがそれをまとめて、トータルパッケージを提供できることを願っています。それは製品ラインにとって本当の恩恵となるでしょう。
KSD/KSDK/PE/MQXの使用に基づいてこの記事が書き直されるのを見るのは素晴らしいことです。それはソフトウェアがすべきことをするでしょう:物事をセットアップする面倒なものを取り除き、私たちに仕事に取り掛からせてください!
Hi David,
デバイス モード、特に USB 双方向 HID の実装に興味があります。
上で引用した例では、例の.wsdを持ち込んでいましたかそれとも、自分でゼロからプロジェクトを作っていたのですか?私は定型アプリケーションが非常にうまく機能することがわかったので尋ねていますが、あなた自身のKDS / KSDK(MQX用)を考え出すのはクマです。
myke
host_msd_fatfs_frdmk22f_mqx_frdmk22fでスループットテストを試すをご覧ください
ホストモードとデバイスモードのどちらに興味があるかは述べられていませんが、デバイスモードのデモをFRDM-K22Fボードで動作させることができました。私はその数字にかなり感銘を受け、より一般的なアプリケーションで動作するように取り組んでいます。
Hi Marco,
プリプロセッサの設定がお役に立ててうれしいです。
フリースケールのエンジニアから、この点でKDS / KSDK(MQXを使用)を簡単に操作できるように取り組んでいると言われました-スタックのUSB部分を使用したい(これが私が 議論を始めた理由です https://community.freescale.com/thread/342700)これはうまくいけば、すぐにいくらかの牽引力を得るでしょう。
KDS/KSDKのUSBスタックに詳しい方がいらっしゃいましたら、ディスカッションにお答えください。
myke
Myke,
あなたとまったく同じエラーがあります。貴重なご参加いただき、誠にありがとうございました!私がどれだけ一生懸命取り組んだか想像もつかないでしょう。
しかし、同時に、これらのシンボルがMQXヘッダーファイルとライブラリのリンクおよびコンパイル中に自動的に含まれるのではなく、なぜ「プリプロセッサ設定」に手動で含める必要があるのか、まだ疑問に思っています...
KSDKチームのどなたか説明していただけますか?
よろしくお願いいたします。
Marco Coelho
Hi Carlos,
まず第一に、優れた記事です!
私は手順に従いましたが、FRDM-K22Fの場合、コンパイルするとエラーが発生します。
=====
'ビルド ファイル: ../ソース/ユーティリティ/fsl_debug_console.c'
「呼び出し:Cross ARM C Compiler」
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -D"CPU_MK22FN512VDC12" -I"../sources" -I"../ソース/ボード" -I"../sources/BSP_Files" -i"../sources/Config_Files" -i"../sources/Config_Files/common" -i"../sources/utilities" -I"C:\Freescale\KSDK_1.1.0/rtos/mqx/lib/frdmk22f.kds/debug/mqx" -I"C:\Freescale\KSDK_1.1.0/rtos/mqx/mqx/source/bsp"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/include"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/lib/frdmk22f.kds/debug/config" -I"C:\フリースケール\KSDK_1.1.0/platform/hal/inc"-I"C:\Freescale\KSDK_1.1.0/platform/drivers/inc"-I"C:\Freescale\KSDK_1.1.0/platform/osa/inc"-I"C:\Freescale\KSDK_1.1.0/platform/system/inc"-I"../Project_Settings/Startup_Code" -I"../SDK/platform/CMSIS/Include" -I"../SDK/platform/CMSIS/Include/device" -I"../SDK/platform/CMSIS/Include/device/MK22F51212" -I"C:\Freescale\KSDK_1.1.0/platform/utilities/inc"-I"C:\フリースケール\KSDK_1.1.0/platform/utilities/src"-std=c99 -MMD -MP -MF"ソース/ユーティリティ/fsl_debug_console.d"-MT「ソース/ユーティリティ/fsl_debug_console.o」-c -o "ソース/ユーティリティ/fsl_debug_console.o""../sources/utilities/fsl_debug_console.c"
arm-none-eabi-gcc:致命的なエラー: 入力ファイルがありません
コンパイルが終了しました。
make: *** [ソース/ユーティリティ/fsl_debug_console.o]エラー 1
====
このファイルは、ハードドライブとプロジェクトの両方のSources/Utilitiesフォルダにあります。だから、私の問題はプロジェクトが "../Sources/Utilities" これを確認する方法はありますか?
Windowsエクスプローラでは、私のファイル構造は次のとおりです。
私が見落としていたものが見えますか?感謝。
うん、よく調べて見た。インクルードパスの引用符(")を忘れました。参照: "../Sources/BSP_Files" (下線に注意してください)。
この後、Myke Predko が行ったのと同じ問題に遭遇し、同じ方法でプリプロセッサ ディレクティブを編集して修正しました。
さて、Help ==> Install New SoftwareからMQXプラグインを追加した後も、すべてが機能します...
そして、上部に「MQX」ドロップダウンがあるので、すべてが順調だと思います。
カルロス(そして他の誰でも)、
プロジェクトのために他に何かする必要がありますか?
ありがとう、
myke
成功!(と思う)。
KSDK 1.1.0にある「hello_frdmk64f」プロジェクトのコンパイラのプロパティを見てみましたMQX の例では、Cross Arm C Compiler ==> プリプロセッサに次のものが含まれていることがわかりました。
CPU_MK64FN1M0VMD12=1
FSL_RTOS_MQX=1
_AEABI_LC_CTYPE=C
__STRICT_ANSI__=1
_DEBUG=1
Carlosの指示から構築されたプロジェクトでは、次のものがあります。
「CPU_MK64FN1M0VMD12」
そこで、その行を残してから、サンプルアプリケーションから他の行をコピーして...
ビルドして実行します。
さて、次のステップは、実行中に操作を確認できるように、タスク認識デバッガーを追加しようとしています。
myke
もう少し掘り下げて、fsl_debug_console.hで、「setvbuf」と「IONBF」の問題の前に次の行を見つけました。
#if ((defined(__GNUC__)) && (!defined(FSL_RTOS_MQX))) && (!defined(__KSDK_STDLIB__))
私は、*どこかで*「FLS_RTOS_MQX」フラグを設定するだろうと思っていました(これはこれがMQXプロジェクトであることを示していると私は推測します)-__KSDK_STDLIB__言うまでもありません。
これは私の問題でしょうか、もしそうなら、このフラグはどこで設定されますか?
ありがとう、
myke
Hi Carlos,
プロジェクトの説明はここで非常によく見えますが、私はそれを機能させることができません。私は2台のPCで2回同じ結果でそれを行いました - それは標準のインクルードファイル(下記参照)にある情報を探しているようですが、これらのインクルードはソースから呼び出されず、インクルードファイルもこれらのインクルードファイルへのパスはビルドプロパティの一部ではありません。
私はFreescaleのWebサイトから最新バージョンのKDSとKSDKを使用しており、このスレッドの上部にあるドキュメントの指示に明示的に従っています。
13ページ(セクション3.15まで)の手順を実行すると、次の違いが見られました。
3.7 BSP_Files私が「はい」と言っているいくつかのパスステートメントを生成します。これらはセクション3.10で見ることができます
3.8 パスは「C:\Freescale\KSDK_1.1.0\rtos\mqx\config\board\
」にすべきですか?オリジナルは一致していないようです。 3.12 PDFの指示の10ページのスクリーンショットの順序と一致するように、インクルードを再配置しました。注 : 手順 3.7 で生成されたインクルードは、これらのインクルードの後にあります。
3.15 PDFの指示の12ページのスクリーンショットの順序と一致するようにライブラリリストを再配置しました。
3.7で生成されている余分なパスステートメントが問題を引き起こしているとは思いませんか?
私がビルドすると、次のようになります。
17:08:34 **** プロジェクトK64_MQX_KSDK_Exampleの構成デバッグのビルド ****
すべて作る
'ビルド ファイル: ../ソース/ユーティリティ/fsl_debug_console.c'
「呼び出し:Cross ARM C Compiler」
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -D"CPU_MK64FN1M0VMD12" -I"../sources" -I"../ソース/ボード" -I"../sources/BSP_Files" -i"../sources/Config_Files" -i"../sources/Config_Files/common" -i"../sources/utilities" -I"C:\Freescale\KSDK_1.1.0/rtos/mqx/lib/frdmk64f.kds/debug/mqx" -I"C:\Freescale\KSDK_1.1.0/rtos/mqx/mqx/source/bsp"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/include"-I"C:\Freescale\KSDK_1.1.0/rtos/mqx/lib/frdmk64f.kds/debug/config" -I"C:\フリースケール\KSDK_1.1.0/platform/hal/inc"-I"C:\Freescale\KSDK_1.1.0/platform/drivers/inc"-I"C:\Freescale\KSDK_1.1.0/platform/osa/inc"-I"C:\Freescale\KSDK_1.1.0/platform/system/inc"-I"../Project_Settings/Startup_Code" -I"../SDK/platform/CMSIS/Include" -I"../SDK/platform/CMSIS/Include/device" -I"../SDK/platform/CMSIS/Include/device/MK64F12" -I"C:\Freescale\KSDK_1.1.0/platform/utilities/inc"-I"C:\フリースケール\KSDK_1.1.0/platform/utilities/src"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/drivers/nio_serial"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/string"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/config/common"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/psp/cortex_m/core/M4"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx_stdlib/source/include"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/kernel"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/src"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/bsp"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/drivers/nio_serial/src"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx_stdlib/source/strings"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/psp/cortex_m"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/drivers/nio_tty/src"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/drivers/nio_dummy/src"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/psp/cortex_m/cpu"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/fs"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx_stdlib/source/stdio"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/psp/cortex_m/compiler/gcc_arm"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/drivers/nio_tty"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/nio/drivers/nio_dummy"-I"C:\フリースケール\KSDK_1.1.0/rtos/mqx/mqx/source/include"-std=c99 -MMD -MP -MF"ソース/ユーティリティ/fsl_debug_console.d"-MT「ソース/ユーティリティ/fsl_debug_console.o」-c -o "ソース/ユーティリティ/fsl_debug_console.o""../sources/utilities/fsl_debug_console.c"
C:\Freescale\KSDK_1.1.0/rtos/mqx/mqx_stdlib/source/include/std_prv.h:30:0からインクルードされたファイルでは、
C:\ Freescale \ KSDK_1.1.0 / rtos / mqx / mqx_stdlib / source / include / stdio.h:32から、
差出人。。/ソース/ユーティリティ/fsl_debug_console.c:32:
C:\Freescale\KSDK_1.1.0/rtos/mqx/lib/frdmk64f.kds/debug/mqx/nio.h:122:1:エラー: 不明なタイプ名 'ssize_t'
ssize_t _nio_read(int fd, void *buf, size_t nbytes);
^
C:\Freescale\KSDK_1.1.0/rtos/mqx/lib/frdmk64f.kds/debug/mqx/nio.h:132:1:エラー: 不明なタイプ名 'ssize_t'
ssize_t _nio_write(int fd, const void *buf, size_t nbytes);
^
../sources/utilities/fsl_debug_console.c:関数 'DbgConsole_Init' では、次のようになります。
../Sources/Utilities/fsl_debug_console.c:214:5:警告:関数 'setvbuf'の暗黙の宣言[-Wimplicit-function-declaration]
setvbuf(stdout, NULL, _IONBF, 0);
^
../Sources/Utilities/fsl_debug_console.c:214:27:エラー:'_IONBF'が宣言されていません(この関数で最初に使用
setvbuf(stdout, NULL, _IONBF, 0);
^
../sources/utilities/fsl_debug_console.c:214:27: 注:宣言されていない各識別子は、それが出現する関数ごとに一度だけ報告されます
make: *** [ソース/ユーティリティ/fsl_debug_console.o]エラー 1
17:08:34 ビルド完了 (479ms を要しました)
「ssize_t」で検索を行うことは、C:/Freescale/KDS_2.0.0/toolchain/arm-none-eabi/include/sys/types.hで定義されています。
「_IONBF」はC:/Freescale/KDS_2.0.0/toolchain/arm-none-eabi/include/stdlib.hで定義されています。
また、"setvbuf" は C:/Freescale/KDS_2.0.0/toolchain/arm-none-eabi/include/stdio.h で定義されています。
プロジェクト==>プロパティ==>C / C ++ビルド==>設定==>クロスARM Cコンパイラ==>出力を変更せずにインクルードのビルドパスに「C:/ Freescale / KDS_2 1.0.0 / toolchain / arm-none-eabi / include」を追加してみました(出力を変更せずにクロスARM Cコンパイラ==インクルード(インクルードファイルが見つからないエラーメッセージがあると思っていたので、これは驚きではありませんでした。
上記のエラーにインクルードファイルを追加しようとしますが、私が間違っていることについて何か提案はありますか?
ありがとう、
myke
Hi David,
最後に、私は引用に悩まされました。すべての引用符を書き直すと、アプリケーションが機能します。
ありがとうございました。
よろしくお願いします。
Daniel
Hi Daniel,
「KDS.pdf での KSDK プロジェクト用の新しい MQX RTOS の作成」の手順に従っていましたか?
1.5 次のライブラリをビルドする必要があります: 1.5.1 MQX用プラットフォームライブラリ、'libksdk_platform_mqx.a'
• このプロジェクトは、"$/lib/ksdk_mqx_lib/kds/ 1.5.2 MQX Library, 'lib_mqx.a' にあります。 • このプロジェクトは "$/rtos/mqx/mqx/build/kds/mqx_" 1.5.3 にあります。MQXスタンダードライブラリ「lib_mqx_stdlib.a」
• このプロジェクトは「$/rtos/mqx/mqx_stdlib/build/kds/mqx_stdlib_」にあります。
注意: KDSでのKSDKおよびMQXライブラリの構築については、MQX for KSDKのインストール・パスC:\Freescale\KSDK_1.1.0\rtos\mqx\doc\toolsにある「Getting Started with Freescale MQX™ RTOS for Kinetis SDK and Kinetis Design Studio IDE」の「3 MQ RTOSライブラリの構築」の章を参照してください。
よろしくお願いします。
David
親愛なるカルロス、
マニュアルをありがとう。私はそれに従うことを試みましたが、プロジェクトを構築したときに、このエラーが発生します。
make: *** ターゲットを 'C:/Freescale/KSDK_1.1.0/lib/ksdk_mqx_lib/K64F12/Debug/libksdk_platform_mqx.a' にするルールはありません。「Enrutadora.elf」が必要でした。止める。
そして、私はそれをどのように解決するのかわかりません。
よろしくお願いいたします。