Die Hauptreferenz des Artikels: https://blog.csdn.net/killercode11/article/details/104290949, die sich auf
rt_hw_console_getchar()
die Definition bezieht.
Artikelverzeichnis
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 .
Importieren Sie es in das Projekt, die spezifische Operation wird hier nicht vorgestellt, denken Sie daran, die Header-Datei einzuschließen,
Aktivieren Sie FinSH
Ändern rtconfig.h
, öffnen finsh config
, das Folgende ist die grafische Konfiguration mit dem Configuration Wizard
Assistenten ,
Vielmehr ist die finsh_fonfig.h
Header -Datei in das Projekt einzubinden, die die grundlegende Parametrierung von FisSH enthält.
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).
Dann definieren board.c
wir 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.
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
Es gibt viele Gründe für diesen Fehler, z. B. is RT_MAIN_THREAD_STACK_SIZE
too small , und ich RT_THREAD_PRIORITY_MAX
setze ihn zu klein (nur auf 8 gesetzt), was kleiner als FINSH_THREAD_PRIORITY
der 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.
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.