Renesas Rulz - Japan
Renesas Rulz - Japan
  • User
    Join or sign in
  • Site
  • Search Japan.RenesasRulz.com
  • User
  • Renesas Rulz
  • FAQ
  • パートナー
  • 半導体セミナ
  • eラーニング
  • ヘルプ
  • More
  • Cancel
  • かふぇルネ
  • がじぇるね
  • English Community
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
Web Compiler フォーラム Web Compiler 上の printf について
  • Forums
  • Blog
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New

 

 GR-SAKURA

 GR-KURUMI

 GR-COTTON

 GR-CITRUS

 GR-PEACH

 GR-KAEDE

 GR-ADZUKI

 GR-LYCHEE

 GR-ROSE

 GR-MANGO(*)

 SNShield

 Web Compiler

 IDE for GR

 TOPPERS関連

 女子美コラボ

 その他

 ※プロデューサミーティング中

 作り方使い方資料

 イベント関連

 作品記事

 体験記事

 その他

 

 ライブラリ

 ツール

 その他・過去ファイル

  • Replies 2 replies
  • Subscribers 282 subscribers
  • Views 4914 views
  • Users 0 members are here
Options
  • Share
  • More
  • Cancel
Related Tags
  • Arudino
  • dht.h
  • DHT22温湿度センサー
  • gr-sakura rtc
  • http_api
  • LCD Driver
  • make
  • webコンパイラ
  • webコンパイラ Mac OS X Mavericks
  • zipアップロード
  • zipファイルインポート
  • ライブラリ
  • ライブラリ、アップロード
Related

Web Compiler 上の printf について

mochi
mochi over 3 years ago

お世話になります。

掲題の件、本来は mbed のフォーラムに問い合わせる内容かもしれませんが、GR-LYCHEE 向けに提供されたプログラムを拝見していると、PC でのデバッグ用に printf が使用されていましたので、Web Compiler フォーラムに投稿させて頂きます。もしわかる方がいらっしゃったら教えてください。

PC 上でデバッグするため printf を使用する場合には、通常、Serial pc(USBTX, USBRX); を宣言し、pc.printf("Hello World!"); などの記述をするかと思います。ところが、pc.printf ではなく、いきなり printf を記述しても pc.printf と同様のことができるように思われます。GR-LYCHEE のコードにも printf の記述があります。標準出力にプリントするという意味だと思うのですが、C++ 初心者ということもあり、コードを追って行っても、なぜ printf で良いのか、今一つ理解ができません( pc.printf の仕組みは、C++ の観点からコードを追っていくと理解できました。。。たぶん )。Web で検索しても、本を読んでも、PC でデバッグするときは printf が使用できるという記載はあるのですが、なぜという観点からの説明は見つかりませんでした。

[質問] 

仕組みを理解したうえで printf を使用したいと思いますが、

1. マイコンから見て標準出力は COMポートを指すと思いますが正しいでしょうか?

2. 上記 1 が正しい場合、その記述は mbed ライブラリのどこにありますでしょうか?

3. printf を使用した場合、PC と Serial 通信する Baud Rate のでデフォルトは 9600 でしょうか?

4. 上記 3 において Baud Rate を変更できる場合、どこに記述するのでしょうか?

上記の質問の回答でなくても、初心者向けに、printf の仕組みが理解できる解説でも構いません。

以前、mbed のコードを書いていた時から、理解できずにモヤモヤしています。

恐れ入りますが、宜しくお願いいたします。

  • Reply
  • Cancel
  • Cancel
Parents
  • dkato
    dkato over 3 years ago

    GR-LYCHEEを例に紹介します。(他のmbedボードもほぼ同じ作りです)


    > 1. マイコンから見て標準出力は COMポートを指すと思いますが正しいでしょうか?

    はい、正しいです。
    マイコン(GR-LYCHEE)からはUARTのシリアル通信で DAPLinkマイコンにデータを送信します。
    DAPLinkからPCへは、USBのCDCクラス通信で PC にデータ送信します。
    PC側はDAPLinkのCDCクラスをCOMポートとして認識しています。

     GR-LYCHEE  <- UART serial ->  DAPLink  <-- USB CDC class --> PC

    ~参考情報~
    GR-LYCHEE回路図
    http://japan.renesasrulz.com/cfs-file/__key/communityserver-discussions-components-files/153/X50A_2D00_M01_2D00_B4.pdf
    # 回路図中の PC11U35FHI33/501 がDAPLink用のマイコンになります。


    > 2. 上記 1 が正しい場合、その記述は mbed ライブラリのどこにありますでしょうか?

    mbed-os内 mbed_retarget.cpp の"PREFIX(_write)"にて実現しています。
    https://github.com/TomoYamanaka/mbed/blob/Feature_LYCHEE/platform/mbed_retarget.cpp#L311-L351

    標準関数(コンパイラが用意している)のprintfの中から上記関数がコールされます。
    printfから実行された場合は"fh < 3"となり、「init_serial();」、「serial_putc(&stdio_uart, buffer[i]);」によってUART送信されます。
    printfに対応するUARTの端子は以下で定義されています。
    https://github.com/TomoYamanaka/mbed/blob/Feature_LYCHEE/targets/TARGET_RENESAS/TARGET_RZA1XX/TARGET_GR_LYCHEE/PeripheralNames.h#L93-L95


    > 3. printf を使用した場合、PC と Serial 通信する Baud Rate のでデフォルトは 9600 でしょうか?

    はい、9600bpsです。


    > 4. 上記 3 において Baud Rate を変更できる場合、どこに記述するのでしょうか?

    mbed環境(mbedオンラインコンパイラ、CLIなど)では、プロジェクトフォルダのトップ(通常 main.cpp が置かれるフォルダ)の "mbed_app.json" に以下のように記載するとデフォルトのBaud Rateを変更することができます。(お使いのプロジェクト内に "mbed_app.json" が無い場合は新規に作成します)

    {
        "target_overrides": {
            "*": {
                "platform.stdio-baud-rate": 115200
            }
        }
    } 

    上記のように記載すると、コンパイル時に自動生成される"mbed_config.h"の下記マクロが書き換わります。

    #define MBED_CONF_PLATFORM_STDIO_BAUD_RATE          9600                 // set by library:platform

    Renesas Web Compilerで使用する場合は"mbed_app.json"の内容は反映されませんので、プロジェクト内にある"mbed_config.h"のMBED_CONF_PLATFORM_STDIO_BAUD_RATEを直接書き換えてください。

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
Reply
  • dkato
    dkato over 3 years ago

    GR-LYCHEEを例に紹介します。(他のmbedボードもほぼ同じ作りです)


    > 1. マイコンから見て標準出力は COMポートを指すと思いますが正しいでしょうか?

    はい、正しいです。
    マイコン(GR-LYCHEE)からはUARTのシリアル通信で DAPLinkマイコンにデータを送信します。
    DAPLinkからPCへは、USBのCDCクラス通信で PC にデータ送信します。
    PC側はDAPLinkのCDCクラスをCOMポートとして認識しています。

     GR-LYCHEE  <- UART serial ->  DAPLink  <-- USB CDC class --> PC

    ~参考情報~
    GR-LYCHEE回路図
    http://japan.renesasrulz.com/cfs-file/__key/communityserver-discussions-components-files/153/X50A_2D00_M01_2D00_B4.pdf
    # 回路図中の PC11U35FHI33/501 がDAPLink用のマイコンになります。


    > 2. 上記 1 が正しい場合、その記述は mbed ライブラリのどこにありますでしょうか?

    mbed-os内 mbed_retarget.cpp の"PREFIX(_write)"にて実現しています。
    https://github.com/TomoYamanaka/mbed/blob/Feature_LYCHEE/platform/mbed_retarget.cpp#L311-L351

    標準関数(コンパイラが用意している)のprintfの中から上記関数がコールされます。
    printfから実行された場合は"fh < 3"となり、「init_serial();」、「serial_putc(&stdio_uart, buffer[i]);」によってUART送信されます。
    printfに対応するUARTの端子は以下で定義されています。
    https://github.com/TomoYamanaka/mbed/blob/Feature_LYCHEE/targets/TARGET_RENESAS/TARGET_RZA1XX/TARGET_GR_LYCHEE/PeripheralNames.h#L93-L95


    > 3. printf を使用した場合、PC と Serial 通信する Baud Rate のでデフォルトは 9600 でしょうか?

    はい、9600bpsです。


    > 4. 上記 3 において Baud Rate を変更できる場合、どこに記述するのでしょうか?

    mbed環境(mbedオンラインコンパイラ、CLIなど)では、プロジェクトフォルダのトップ(通常 main.cpp が置かれるフォルダ)の "mbed_app.json" に以下のように記載するとデフォルトのBaud Rateを変更することができます。(お使いのプロジェクト内に "mbed_app.json" が無い場合は新規に作成します)

    {
        "target_overrides": {
            "*": {
                "platform.stdio-baud-rate": 115200
            }
        }
    } 

    上記のように記載すると、コンパイル時に自動生成される"mbed_config.h"の下記マクロが書き換わります。

    #define MBED_CONF_PLATFORM_STDIO_BAUD_RATE          9600                 // set by library:platform

    Renesas Web Compilerで使用する場合は"mbed_app.json"の内容は反映されませんので、プロジェクト内にある"mbed_config.h"のMBED_CONF_PLATFORM_STDIO_BAUD_RATEを直接書き換えてください。

    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
Children
  • mochi
    mochi over 3 years ago in reply to dkato
    dkato 様

    お世話になります。
    早急かつ詳細なご回答を頂きありがとうございます。

    なかなか奥が深いということが分かりました。
    奥が深すぎて、この説明が mbed の本に記載されていないことも納得いたしました。

    また printf の Default Baud Rate が 9600 の件、拝承いたしました。

    すぐには理解できないと思いますが、少しずつ拝見させて頂き、今後の参考にさせて頂きます。

    ありがとうございました。
    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2020 Renesas Electronics Corporation. All rights reserved.