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
セレステ
View full article