RTスレッドナノポーティングFinSH

記事の主なリファレンス:https://blog.csdn.net/killercode11/article/details/104290949、これはrt_hw_console_getchar()定義を参照しています。

この記事では、RT-Threadのシリアルポート構成については紹介していません。必要に応じて、以下を参照してください。シリアルポートをrt_kprintf関数に再マップする

FinSHソースコードをプロジェクトに追加します

FinSHソースコードは、RT-Threadソースコードcomponents\finsh\ディレクトリにあります。

ここに画像の説明を挿入

プロジェクトにインポートします。特定の操作はここでは紹介されません。ヘッダーファイルをインクルードすることを忘れないでください。

ここに画像の説明を挿入

FinSHを有効にする

変更rtconfig.h、開くfinsh config、以下はConfiguration Wizardウィザード、

ここに画像の説明を挿入
実際には、finsh_fonfig.hヘッダーます。このヘッダーファイルには、FisSHの基本的なパラメーター構成が含まれています。

ここに画像の説明を挿入

端末読み取り機能を定義する

FinSHソースコードを移植した後、通常、最初のコンパイルでエラーが報告され、弱められた関数の#error行rt_hw_console_getchar()をあります(最初にファイルの読み取り専用属性をオフにすることを忘れないでください)。

ここに画像の説明を挿入
board.c次にrt_hw_console_getchar()、ファイル内の関数を手動で再定義します。関数の内容は次のとおりです。これは標準ライブラリバージョンです。HALライブラリバージョンが必要な場合は、記事の冒頭にあるリンクを参照してください。

char rt_hw_console_getchar(void)
{
    
    
    /* Note: the initial value of ch must < 0 */
    int ch = -1;
		if(USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) != RESET)
    {
    
    
        //USART_ClearITPendingBit(USART_DEBUG,  USART_FLAG_RXNE);
        ch = USART_ReceiveData(DEBUG_USARTx) & 0xFF;
    }
    else
    {
    
    
        if(USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_ORE) != RESET)
        {
    
    
            USART_ClearITPendingBit(DEBUG_USARTx,  USART_FLAG_ORE);
        }
        rt_thread_mdelay(10);
    }

    return ch;
}

FinSHを体験する

SSCOMを端末として使用していますが、効果は悪くありません。コマンドは表示ウィンドウに直接入力されます。

ここに画像の説明を挿入
PuTTyやXShellなどの一般的な端末ソフトを使わない理由を聞かれる方もいらっしゃるかもしれませんが、使いたいのですが、端末ソフトを接続すると開発ボードが動作しなくなります。

発生した問題

1.セグメンテーション違反

ここに画像の説明を挿入

このエラーには、RT_MAIN_THREAD_STACK_SIZE小さすぎるます。デフォルト値の21よりRT_THREAD_PRIORITY_MAXも小さい小さすぎる(8に設定のみ)ように設定したため、解決策は、スレッドの優先度(値)を変更することです。 FINSHを小さい値にFINSH_THREAD_PRIORITY変更するか、システム優先順位の最大値(値の範囲)を大きい値に変更します。

ここに画像の説明を挿入

2.ターミナルツールは印刷できません

PuTTy、XShellを使用すると、端末が応答せず、ボードがスタックします。予備分析の理由は、「パンクチュアアトミックワンキーダウンロード回路とターミナルツールの競合」(インターネット上の他の結論)であるため、シリアルデバッグアシスタントはFinshの操作にのみ使用できます。

3.プログラムが実行されない

この問題にはさまざまな理由が考えられますが、FinSHを使用する場合は、シリアルポート割り込みを開くことができないことに注意してください。理由については、まだ理解していません。

おすすめ

転載: blog.csdn.net/weixin_43772810/article/details/125269698