LoginSignup
1
0

More than 1 year has passed since last update.

Longan Nanoを使ってみる 4 ~printfを使ったデバッグ~

Last updated at Posted at 2022-02-15

前の記事

Longan Nanoを使ってみる 3 ~デバッガの使用方法~を参照

全体の目次

Longan Nanoを使ってみる 1 ~ビルド環境の構築~
Longan Nanoを使ってみる 2 ~デバッガの環境設定~
 Sipeed RISC-V Debugger
Longan Nanoを使ってみる 3 ~デバッガの使用方法~
Longan Nanoを使ってみる 4 ~printfを使ったデバッグ~
Longan Nanoを使ってみる 5 ~ゲームのプロジェクトを作成~
Longan Nanoを使ってみる 6 ~文字出力~
 Longan Nanoを使ってみる ~FONTX2ファイルを作る~
Longan Nanoを使ってみる 7 ~外枠とブロックを書く~
 Longan Nanoを使ってみる ~謎の画像表示関数~
Longan Nanoを使ってみる 8 ~ボールを動かす~
Longan Nanoを使ってみる 9 ~A/Dコンバータから入力~
Longan Nanoを使ってみる 10 ~パドルを動かす~
Longan Nanoを使ってみる 11 ~ボタンの入力
Longan Nanoを使ってみる 12 ~ボールのロス~
Longan Nanoを使ってみる 13 ~ステージの遷移とゲームオーバー~
Longan Nanoを使ってみる 14 ~PWMとサウンド~
Longan Nanoを使ってみる 15 ~音楽を鳴らす~
Longan Nanoを使ってみる 16 ~とりあえずのまとめ~

printfによるデバッグ

RV Debuggerは、ソースコードレベルのデバッグが売りだが、多少ソースコードを変えることで、printfを使ったデバッグも可能。

Longan Nanoでは、USARTが0~4まで存在するが、デバッガに接続するポートの8ピンには、USART0が出力されている。外部のターミナルなどを使うのでなければ、USART0を使うのが簡単。

注意

このページは、quiita.com で公開されています。URLがqiita.com以外のサイト、例えばjpdebug.comなどのページでご覧になっている場合、悪質な無許可転載サイトで記事を見ています。正しいURLは、https://qiita.com/BUBUBB/items/7ce85ada67a3f6d1944d です。
無許可転載サイトでの権利表記(CC BY SA 2.5、CC BY SA 3.0とCC BY SA 4.0など)は、不当な表示です。
正確な内容は、qiitaのページで参照してください。

プログラム側の準備

Main関数の先頭に、次のような初期化処理を追加する。

int main(void)
{ 
     :

    // GPIOのAが、USART0なのでGPIOAにクロックを供給する
    rcu_periph_clock_enable(RCU_GPIOA);
    // USART0にクロックを供給
    rcu_periph_clock_enable(RCU_USART0);

    // TX、RXがGPIOAの9と10に出ているので、それぞれを初期化する。
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); // USART0 TX
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); // USART0 RX

    // TXの設定を行う。デバッグでは、ターミナルへの出力だけを行うので、最低限の設定でよい。
    usart_deinit(USART0);
    usart_baudrate_set(USART0, 115200U);
    usart_word_length_set(USART0, USART_WL_8BIT);
    usart_stop_bit_set(USART0, USART_STB_1BIT);
    usart_parity_config(USART0, USART_PM_NONE);
    usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
    usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);

    //USARTを有効にする
    usart_enable(USART0);

     :

さらに、printfが呼び出す_put_char関数をオーバーライドしてUSART0に出力するように変更する。場所はどこでもよい。main関数の前などでかまわない。

int _put_char(int ch)
{
    usart_data_transmit(USART0, (uint8_t) ch );
    while ( usart_flag_get(USART0, USART_FLAG_TBE)== RESET){
    }
    return ch;
}

プログラム中に、出力したい情報をprintfで追加する。

    while(1){!

        /* turn on builtin led */
        for (i = 0;i<10;i++) {
            longan_led_on();
            delay_1ms(i*Speed1);
            longan_led_off();
            delay_1ms((10-i)*Speed1);
            printf("off->on : %d\r\n",i);
        }
        /* turn off uiltin led */
        for (j = 0;j<10;j++) {
            longan_led_off();
            delay_1ms(j*Speed2);
            longan_led_on();
            delay_1ms((10-j)*Speed2);
            printf("on->off : %d\r\n",j);
        }
        longan_led_off();
        delay_1ms(100);
    }

ターミナルの起動

ステータスバーのSerial Monitorをクリックする。

printf1.png

シリアルモニターのセッションが開始する。右側ペインには、"Monitor"というタスクが表示され、稼働中となる。

printf2.png

接続情報を調整する。

CTRL+T CTRL+Hを連続して押すと、ヘルプが表示される。よく使うものは次の通り。ほとんどの場合デフォルトで問題ない。

コマンド 動作
CTRL+T P ポートを変更する。複数のCOMポートが存在する場合、このコマンドを使って明示的にDebuggerのポートの指定が必要になる場合がある。
CTRL+T 7/8 ビット幅。 プログラム側の準備で、usart_word_length_set(USART0, USART_WL_8BIT); で指定したビット幅に合わせる。
CTRL+T N/E/O/S/M パリティ。プログラム側の準備で usart_parity_config(USART0, USART_PM_NONE); で指定したものに合わせる。
CTRL+T 1/2/3 ストップビット。usart_stop_bit_set(USART0, USART_STB_1BIT);の指定に合わせる。
CTRL+T b ボーレートを指定する。usart_baudrate_set(USART0, 115200U);の指定に合わせる。
CTRL+T x X ソフトウェアフローコントロール。usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);に合わせる。
CTRL+T r R ハードウェアフローコントロール。usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);に合わせる。

プログラムの実行

プログラムをデバッガを使わずに実行する。printfデバッグは、ソースコードデバッグとは同時に使用できない。

printf3.png

Monitorタスクのターミナルに、printfの内容が表示される。

printf4.png

モニターを停止するには、Monitorタスクの右側のごみ箱アイコンを使用する。もしくは、CTRL+Cで停止させる。

ここまででできたこと

ソースコードにprintfを追加し、printfを使ったデバッグができるようになった

次の記事

Longan Nanoを使ってみる 5 ~ゲームのプロジェクトを作成~

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0