RA2A2でC++の標準出力が使えない

こんにちは。こじこじです。

RAファミリのRA2A2を使用しています。C++言語の標準出力が使用できなくて原因を調査中です。

開発環境は以下の通りです。

IDE:Renesas e² studio (Version: 2024-01.1)

言語:C++

コンパイラ:GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc) (Version:13.2.1.arm-13-7)

FSP:v5.3.0

使用ボード:EK-RA2A2

<iostream>をインクルードしてもcoutを使用しなければ問題なく動作します。

hal_entry.cpp

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

#include "hal_data.h"
#include "main.h"
#include <iostream>

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
void hal_entry(void)
{
    Main main ;
   
    //std::cout << "Hello, World!" << std::endl;

    /* TODO: add your own code here */
    main.Loop() ;    
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ただ、上記コードの std::cout~~を記述すると、hal_entry()前のSystemInit()内でエラーとなってしまいます。

場所は以下です。

SytemInit()内の

__init_array_start[i]()実行時にbsp_common.cの__assert_funcに飛んでしまい、無限ループとなるので、これ以上プログラムが進みません。

C++言語のサンプルプロジェクトの【cpp_ek_ra2a2_ep】で同じことをすると、上記画像部分は問題ないのですが、

coutの行を実行しようとすると”_swiwrite()" に対して使用できるソースがありません ”となります。(その他_swrite()など複数も同様)

自作も【cpp_ek_ra2a2_ep】プロジェクトもGNU Arm Cross C++ Linker設定のMiscellaneousのOther linker flagsに

”--specs=rdimon.specs”を追加しています。

GNU Arm Embedded Toolchainではシステムコールの詳細を実装していない部分があり、実装の必要があると記事で見ました。

https://qiita.com/takahashim/items/120d69a44a80d08b70e7

手動で実装する代わりにrdimonを使うことで解決するとのことで、”--specs=rdimon.specs”を追加しています。

”--specs=rdimon.specs”を追加しないと、別途ビルドエラーが発生してしまいます。

これが何か関係あるのか不明ですが、情報として記載しておきます。

 

以上、手詰まりとなってしまい、ここに投稿させていただきました。

原因と解決策のアドバイスをお願いいたします。

Parents
  • 皆様、返答ありがとうございます。ここの返信にてまとめてお礼させていただきますこと、ご了承ください。

    デバッグ時にe2studioのコンソール出力に文字を表示できればなと思ったのが、coutを使用しようとしたきっかけです。

    皆様のアドバイスを参考に組み込みではメモリ容量が限られていますので、

    今回はcout および printfなどの標準出力、 そもそもSTL はよほどのことがない限り使用しない方向とします。

    改めまして、ありがとうございました。

  • これをもう少し読んでみるといいと思います。
    ja.na4.teamsupport.com/.../17797636

Reply Children
No Data