2338116_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2338116_ja-JP

2338116_ja-JP

FreeRTOSをSKEAZK128シリーズのS32DS ARMに移植する際にコンパイルに失敗しました。

FreeRTOS 14.3をSKEAZ128シリーズチップを使用して移植する際に、コンパイル中に以下の問題が発生しました。

ccFigrB2.s:250:エラー: 幅サフィックスを尊重できません -- `mov r1,#255'
ccFigrB2.s:251:エラー: 幅サフィックスを尊重できません -- `lsl r1,r1,#16'
ccFigrB2.s:252:エラー: 幅サフィックスを尊重できません -- `orr r2,r1'
ccFigrB2.s:258:エラー: 幅サフィックスを尊重できません -- `mov r1,#255'
ccFigrB2.s:259:エラー: 幅サフィックスを尊重できません -- `lsl r1,r1,#24'
ccFigrB2.s:260:エラー: 幅サフィックスを尊重できません -- `orr r2,r1'
ccFigrB2.s:266:エラー: 幅サフィックスを尊重できません -- `mov r2,#0'
ccFigrB2.s:275:エラー: 幅サフィックスを尊重できません -- `mov r3,#0'
ccFigrB2.s:308:エラー: 幅サフィックスを尊重できません -- `mov r3,#250'
ccFigrB2.s:309:エラー: 幅サフィックスを尊重できません -- `lsl r3,r3,#2'
ccFigrB2.s:349:エラー: 幅サフィックスを尊重できません -- `mov r2,#128'
ccFigrB2.s:350:エラー: 幅サフィックスを尊重できません -- `lsl r2,r2,#21'
ccFigrB2.s:396:エラー: lo レジスタが必要です -- `add r2,r3,#1'
ccFigrB2.s:451:エラー: lo レジスタが必要です -- `sub r2,r3,#1'
ccFigrB2.s:599:エラー: lo レジスタが必要です -- `sub r3,r0,#0'
ccFigrB2.s:603:エラー: 幅サフィックスを尊重できません -- `mov r2,#128'
ccFigrB2.s:604:エラー: 幅サフィックスを尊重できません -- `lsl r2,r2,#21'
ccFigrB2.s:646:エラー: 幅サフィックスを尊重できません -- `mov r3,#250'
ccFigrB2.s:647:エラー: 幅サフィックスを尊重できません -- `lsl r1,r3,#2'
ccFigrB2.s:672:エラー: 幅サフィックスを尊重できません -- `mov r0,#94'
ccFigrB2.s:681:エラー: 幅サフィックスを尊重できません -- `mov r2,#0'
ccFigrB2.s:685:エラー: 幅サフィックスを尊重できません -- `mov r2,#0'
ccFigrB2.s:692:エラー: 幅サフィックスを尊重できません -- `mov r3,#250'
ccFigrB2.s:693:エラー: 幅サフィックスを尊重できません -- `lsl r1,r3,#2'
ccFigrB2.s:696:エラー: lo レジスタが必要です -- `sub r3,r3,#1'
ccFigrB2.s:700:エラー: 幅サフィックスを尊重できません -- `mov r2,#7'
ccFigrB2.s:765:エラー: lo レジスタが必要です -- `sub r3,r0,#0'
ccFigrB2.s:776:エラー: 幅サフィックスを尊重できません -- `mov r2,#6'
ccFigrB2.s:793:エラー: lo レジスタが必要です -- `sub r2,r3,#1'
ccFigrB2.s:796:エラー: 幅接尾辞を考慮できません -- `mul r2,r3'
ccFigrB2.s:803:エラー: 幅サフィックスを尊重できません -- `mov r3,#128'
ccFigrB2.s:804:エラー: 幅サフィックスを尊重できません -- `lsl r3,r3,#19'
ccFigrB2.s:805:エラー: 幅サフィックス -- `and r3,r2' を尊重できません
ccFigrB2.s:809:エラー: 幅サフィックスを尊重できません -- `mov r2,#128'
ccFigrB2.s:810:エラー: 幅サフィックスを尊重できません -- `lsl r2,r2,#18'
ccFigrB2.s:816:エラー: 幅サフィックスを尊重できません -- `sub r3,r2,r3'
ccFigrB2.s:829:エラー: 幅サフィックスを尊重できません -- `sub r3,r2,r3'
ccFigrB2.s:838:エラー: 幅サフィックスを尊重できません -- `mov r2,#0'
ccFigrB2.s:844:エラー: 幅サフィックスを尊重できません -- `mov r1,#1'
ccFigrB2.s:845:エラー: 幅サフィックスを尊重できません -- `orr r2,r1'
ccFigrB2.s:895:エラー: 幅サフィックスを尊重できません -- `mov r2,#6'
ccFigrB2.s:900:エラー: 幅サフィックスを尊重できません -- `mov r3,#128'
ccFigrB2.s:901:エラー: 幅サフィックスを尊重できません -- `lsl r3,r3,#9'
ccFigrB2.s:902:エラー: 幅サフィックス -- `and r3,r2' を尊重できません
ccFigrB2.s:911:エラー: 幅サフィックスを尊重できません -- `sub r3,r1,r3'
ccFigrB2.s:913:エラー: lo レジスタが必要です -- `sub r3,r3,#1'
ccFigrB2.s:931:エラー: lo レジスタが必要です -- `sub r3,r3,#1'
ccFigrB2.s:940:エラー: lo レジスタが必要です -- `sub r3,r3,#1'

以下は生成された.argsファイルです。

-T
「D:/NXP/S32DS_ARM_v2.2/SKEAZ128/Project_Settings/Linker_Files/SKEAZ_flash.ld」
-Wl,-Map,"SKEAZ128.map
-Xlinker
--gc-セクション
-n
-mcpu=cortex-m0plus
-mthumb
-mlittle-endian
-mfloat-abi=soft
-specs=nano.specs
-specs=nosys.specs
--sysroot="D:/NXP/S32DS_ARM_v2.2/S32DS/build_tools/gcc_v4.9/gcc-arm-none-eabi-4_9/arm-none-eabi/newlib"
"./Middlewares/FreeRTOS/Portable/heap_4.o"
"./Middlewares/FreeRTOS/Portable/port.o"
"./Middlewares/FreeRTOS/Src/croutine.o"
"./Middlewares/FreeRTOS/Src/event_groups.o"
"./Middlewares/FreeRTOS/Src/list.o"
"./Middlewares/FreeRTOS/Src/queue.o"
"./Middlewares/FreeRTOS/Src/stream_buffer.o"
"./Middlewares/FreeRTOS/Src/tasks.o"
"./Middlewares/FreeRTOS/Src/timers.o"
"./Project_Settings/Startup_Code/startup_SKEAZ1284.o"
"./Project_Settings/Startup_Code/system_SKEAZ1284.o"
"./src/main.o"

環境設定に何か問題があるのでしょうか?

Re: SKEAZK128系列使用S32DS ARM移植FreeRTOS编译失败

いいえ、port.cとportmaco.hはGCC/ARM_CM0から移植しましたが、バージョンは10.4.3です。

バージョン9.0.0未満(あなたが提示した参照もバージョン9.0.0です)では正常に動作するため、問題の原因はおそらくGCCのバージョンが古いことにあると思われます。

組み込みのGCCのバージョンをアップグレードする方法はありますか?バージョン4.9は確かに低すぎます。

Re: SKEAZK128系列使用S32DS ARM移植FreeRTOS编译失败

こんにちは@1482825344 さん

NXPコミュニティをご利用いただきありがとうございます。

ご提供いただいたエラーメッセージに基づくと、以下のようになります。
エラー: 幅サフィックスを尊重できません -- `mov r1,#255'
エラー: lo レジスタが必要です -- `add r2,r3,#1'

これらのエラーはすべて、FreeRTOSによって生成されたccFigrB2.sに起因しています。アセンブリファイルには、アセンブリ構文とターゲットCPUアーキテクチャの不一致が示されています。SKEAZ128はARM Cortex-M0+コアを使用していますが、FreeRTOS 14.3で生成されたport.oファイルは互換性がありません。このアセンブリファイルはCortex-M0+バージョンではなく、Cortex-M3/M4の移植版のようです。

以下のパスにあるポーティングレイヤーを使用する必要があります: FreeRTOS/Source/portable/GCC/ARM_CM0_PLUS

古いport.cファイルを削除することをお勧めします。/portASM.s を置き換えてください。CM0+バージョン

含めるべきファイルの例:
portable/GCC/ARM_CM0/port.c
portable/GCC/ARM_CM0/portmacro.h
portable/GCC/ARM_CM0/portASM.s

portASM.s を確認してください。冒頭には通常、以下の内容が含まれます。


/* Cortex-M0/M0+ ポート */
。構文統一
。親指
.thumb_func


さらに、KEAによるFreeRTOSの移植に関するオンラインリソースをいくつか見つけましたので、参考になるかもしれません。

GitHub - bharadwaaj/FreeRTOS_Port_KEA128: Free RTOSカーネルをKEA128に移植 · GitHub

新しいFreeRTOSポートの作成 - FreeRTOS ™

上記の情報がお役に立てば幸いです。

BR

セレステ


---------------------------------------------------------------------------------------------------------------------
注:この投稿があなたの質問への回答になっている場合は、「解決策として承認」ボタンをクリックしてください。ありがとう!
---------------------------------------------------------------------------------------------------------------------

Re: SKEAZK128系列使用S32DS ARM移植FreeRTOS编译失败

こんにちは@1482825344 さん

GCC v6.3は、S32DS拡張機能およびアップデート経由でインストールできます。

メニューバーで「ヘルプ」→「S32DS拡張機能とアップデート」を選択すると、ポップアップ表示される「S32DS拡張機能とアップデート」ダイアログボックスに表示されます。インストールが完了したら、S32DSを再起動する必要があることに注意してください。

現在のプロジェクトで使用されている gcc バージョンの表示/変更方法については、 S32DS の「現在の/変更された gcc バージョンの表示/変更方法_s32kds コンパイラの変更 - CSDN ブログ」を参照してください。

お役に立てば幸いです。

BR

セレステ

Re: SKEAZK128系列使用S32DS ARM移植FreeRTOS编译失败

既にGCC 6.3にアップデート済みですが、ビルド変数に認識されるGCCバージョンがありません

Re: SKEAZK128系列使用S32DS ARM移植FreeRTOS编译失败

こんにちは@1482825344 さん


まず、左下隅にある「システム変数を表示する」のチェックボックスをオンにする必要があります。そうすれば、システム変数が表示されます。


BR

セレステ

Tags (1)
No ratings
Version history
Last update:
‎04-02-2026 02:30 AM
Updated by: