RT-Gewinde Nano-Portierung FinSH

Die Hauptreferenz des Artikels: https://blog.csdn.net/killercode11/article/details/104290949, die sich auf rt_hw_console_getchar()die Definition bezieht.

Dieser Artikel stellt die Konfiguration des seriellen Ports von RT-Thread nicht vor. Falls erforderlich, können Sie sich darauf beziehen: Remap serial port to rt_kprintf function

Fügen Sie den FinSH-Quellcode zum Projekt hinzu

Der FinSH-Quellcode befindet sich im components\finsh\Verzeichnis .

Bildbeschreibung hier einfügen

Importieren Sie es in das Projekt, die spezifische Operation wird hier nicht vorgestellt, denken Sie daran, die Header-Datei einzuschließen,

Bildbeschreibung hier einfügen

Aktivieren Sie FinSH

Ändern rtconfig.h, öffnen finsh config, das Folgende ist die grafische Konfiguration mit dem Configuration WizardAssistenten ,

Bildbeschreibung hier einfügen
Vielmehr ist die finsh_fonfig.hHeader -Datei in das Projekt einzubinden, die die grundlegende Parametrierung von FisSH enthält.

Bildbeschreibung hier einfügen

Definieren Sie die Lesefunktion des Terminals

Nach der Portierung des FinSH-Quellcodes wird in der Regel bei der ersten Kompilierung ein Fehler gemeldet, und die #error-Zeile rt_hw_console_getchar()in blockiert werden (denken Sie daran, zuerst das Nur-Lese-Attribut der Datei auszuschalten).

Bildbeschreibung hier einfügen
Dann definieren board.cwir rt_hw_console_getchar()die Funktion in der Datei manuell neu. Der Inhalt der Funktion ist wie folgt. Dies ist die Standard-Bibliotheksversion. Wenn Sie die HAL-Bibliotheksversion benötigen, können Sie auf den Link am Anfang des Artikels verweisen.

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;
}

Erleben Sie FinSH

Als Terminal verwende ich SSCOM, der Effekt ist nicht schlecht, der Befehl wird direkt im Anzeigefenster eingegeben.

Bildbeschreibung hier einfügen
Manche Leute fragen sich vielleicht, warum ich keine gängige Terminalsoftware wie PuTTy und XShell verwende, ich möchte sie auch verwenden, aber nach dem Anschließen einer solchen Terminalsoftware läuft das Entwicklungsboard nicht.

aufgetretene Probleme

1. Segmentierungsfehler

Bildbeschreibung hier einfügen

Es gibt viele Gründe für diesen Fehler, z. B. is RT_MAIN_THREAD_STACK_SIZEtoo small , und ich RT_THREAD_PRIORITY_MAXsetze ihn zu klein (nur auf 8 gesetzt), was kleiner als FINSH_THREAD_PRIORITYder Standardwert von 21 ist, also besteht die Lösung darin, die Thread-Priorität (Wert) von zu ändern FINSH auf einen kleineren Wert ändern Oder den Maximalwert (Wertebereich) der Systempriorität auf einen größeren Wert ändern.

Bildbeschreibung hier einfügen

2. Terminal-Tools können nicht drucken

Bei PuTTy, XShell reagiert das Terminal nicht und das Board bleibt hängen. Der Grund für die vorläufige Analyse ist "der Konflikt zwischen der pünktlichen atomaren One-Key-Download-Schaltung und dem Terminal-Tool" (das Fazit anderer im Internet), sodass der serielle Debugging-Assistent nur zum Betrieb von Finsh verwendet werden kann.

3. Das Programm läuft nicht

Es gibt viele mögliche Gründe für dieses Problem, aber es sollte beachtet werden, dass Sie den seriellen Port-Interrupt nicht öffnen können, wenn Sie FinSH verwenden möchten, was ich noch nicht verstanden habe.

Supongo que te gusta

Origin blog.csdn.net/weixin_43772810/article/details/125269698
Recomendado
Clasificación