Home › Forums › Mastering STM32 book support forum › I/O Retargeting
- This topic has 19 replies, 2 voices, and was last updated 8 years, 7 months ago by Carmine Noviello.
-
AuthorPosts
-
April 21, 2016 at 9:17 am #2493CarminioParticipant
Buondi’ Carmine,
a proposito del paragrafo che dedichi all’ I/O Retargeting ho definito la macro USE_IO_RETARGET a livello di progetto ed implementato il main ma il compilatore e’ come se non riconoscesse la funzione RetargetInit e mi restiruisce l’errore “undefined reference to RetargetInit”. Sicuramente questo problema ha a che fare con la mia poca dimestichezza con il C…Grazie
DavideApril 21, 2016 at 9:21 am #2495Carmine NovielloKeymasterMa i file nel progetto Eclipse ci sono? Hai verificato che la compilazione non è disabilitata? (tasto dx sul file, Resource Configuration->Exclude from build…”
April 21, 2016 at 9:31 am #2497CarminioParticipantFacendo tasto destro sul main e andando in Resource Configuration->Exclude from build compaiono debug e release senza segno di spunta. E’ corretto?
Perdona l’ignoranza, io non ho implementato il file retarget.c ho dato per scontato che gia’ esistesse in qualche libreria, forse e’ questo l’errore?April 21, 2016 at 9:38 am #2499Carmine NovielloKeymasterNo, quello va implementato. È responsabilità dell’utente. Per un problema che ho avuto con gli esempi del libro, non lo trovi su github. Lo risolvo a breve (spero). Te lo allego.
Attachments:
You must be logged in to view attached files.April 21, 2016 at 10:53 am #2504CarminioParticipantGrazie Carmine, ma dal tempo che ho impiegato per risponderti avrai capito che ho avuto comunque qualche problema. Ho implementato l’header file e adesso non da’ problemi di compilazione ma quando cerco di lanciarlo in modalita’ debug restituisce il seguente errore:
123456789101112131415161718Error in final launch sequenceFailed to execute MI command:symbol-file C:\\STM32Toolchain\\Projects\\UART_ReTargetError message from debugger back end:C:\STM32Toolchain\Projects\UART_ReTarget: No such file or directory. ,Failed to execute MI command:load C:\\STM32Toolchain\\Projects\\UART_ReTargetError message from debugger back end:C:\STM32Toolchain\Projects\UART_ReTarget: Permission denied.Failed to execute MI command:symbol-file C:\\STM32Toolchain\\Projects\\UART_ReTargetError message from debugger back end:C:\STM32Toolchain\Projects\UART_ReTarget: No such file or directory.C:\STM32Toolchain\Projects\UART_ReTarget: No such file or directory.Failed to execute MI command:load C:\\STM32Toolchain\\Projects\\UART_ReTargetError message from debugger back end:C:\STM32Toolchain\Projects\UART_ReTarget: Permission denied.C:\STM32Toolchain\Projects\UART_ReTarget: Permission denied.April 21, 2016 at 11:16 am #2506Carmine NovielloKeymasterNon ti so dire proprio, è un messaggio troppo generico. Facciamo prima se mi condividi il progetto.
April 21, 2016 at 11:22 am #2508CarminioParticipantHo risolto il problema precedente, era legato a un problema di path nella configurazione GDB, te lo stavo scrivendo proprio adesso.
Tuttavia il codice non funziona come dovrebbe, stampa sulla console la richiesta del nome ma quando provo a darglielo come input non fa nulla, non riesco neppure a vedere cosa scrivo sulla console.
Non capisco se e’ un problema legato a scanf o ad altro
Strano…April 21, 2016 at 11:23 am #2510Carmine NovielloKeymasterMa non stampa neanche nulla?
April 21, 2016 at 11:45 am #2512CarminioParticipantStampa solo la richiesta del nome ma poi non prende l’input (o comunque non mi fa vedere cosa scrivo sulla console). Ho provato a fare un debug step dopo step per capire dove si impianta ed ho visto che si ferma sull’istruzione scanf…
Mah…April 21, 2016 at 11:56 am #2514Carmine NovielloKeymasterSulla console non dovrebbe apparire nulla perché l’echo va implementato a livello di firmware, ossia tutto quello che viene catturato dalla scanf() deve essere ristampato perché da se non lo fa. È qualcosa connesso con l’emulatore di terminale. Per escludere altri problemi, verifica se l’HAL_UART_Receive() riceve qualcosa.
April 21, 2016 at 1:07 pm #2516CarminioParticipantAllora, l’HAL_UART_Receive() funziona, l’unico problema e’ che per prendere l’input deve riempire completamente la variabile buf se la sua cardinalita’ e’ 10 solo se gli mando in input almeno 10 caratteri mi restituisce Hello, come se il carriage return non funzionasse…
Tuttavia pensavo che tra gli argomenti che passo a HAL_UART_Receive io do’ strlen(buf) quindi forse e’ normale che se non gli mando i 10 caratteri non fa nulla poiche’ immagino che si aspetti di ricevere un flusso di 10 caratteri, giusto? In tal caso come si fa a gestire in maniera dinamica la lunghezza dell’input?
Invece scanf non va.
Che puo’ essere?Thanx!
April 21, 2016 at 1:12 pm #2518Carmine NovielloKeymasterL’’HAL_UART_Receive() del carriage return non ne sa nulla: per lei è solo un byte come un altro. L’unico modo è leggere byte dopo byte e mettere i byte letti in un buffer finché non viene letto il ‘\r’. Tipicamente, la modalità interrupt si presta meglio a queste cose.
Con la scanf(), mica per caso stai provando a leggere un float? In caso affermativo, devi attivare l’opzione nelle impostazioni di progetto Cross ARM C++ Linker->Miscellaneous->Use float with scanf().
April 21, 2016 at 2:01 pm #2520CarminioParticipantMmhh non mi e’ molto chiara questa faccenda del buffer…
Ho provato a dargli a fine sequenza ‘\r’ ma non serve a nulla.
In ogni caso sto provando a leggere solo caratteri con scanf().
Perche’ non funziona? 🙁April 21, 2016 at 3:29 pm #2522Carmine NovielloKeymasterHo fatto una prova e neanche a me va. Dammi tempo di capire.
April 21, 2016 at 3:32 pm #2524CarminioParticipantCarmine tutto il tempo che vuoi, intanto sto continuando nella lettura del libro.
Grazie mille. -
AuthorPosts
- You must be logged in to reply to this topic.