MANIPOLAZIONE DI STRINGHE

di fabriziof il
11 risposte
Buongiorno a tutti, sono un programmatore autodidatta a cui piace creare firmware per PIC; ho sempre gestito numero e mai stringe di caratteri e quindi mi trovo in difficoltà; ricevo caratteri da una scheda, devo esaminarne il significato e trasmettere a questa scheda altri caratteri tramite un PIC; ho notato che se immagazzino i caratteri in un array CHAR, non riesco a passarne degli altri ad una funzione dichiarata CHAR per la trasmissione e credo che il motivo sia che non utilizzo i puntatori; ho centrato il problema?

11 Risposte

  • Scusa ma non hai fornito quello che serve.

    Del codice tuo di esempio di quello che fai e che non funziona. Altrimenti si rimane troppo sul generico.

    Mi sembra la ripetizione del primo thread dove dicevi di avere fatto progressi in base alle mie risposte.
  • #include <string.h>

    char Online[] = "AT+CREG=?;\r\n"; //Dichiarazione di un array con i caratteri che devo trasmettere al PIC

    while (1) //main del programma
    {
    for (n = 0; n < 13; n++)
    {
    Trasmissione(Online[n]);
    }


    char Trasmissione(char valore)
    {
    Routine_Ritardo(100); //Assestamento linea
    RCIE = 0; //Disabilitazione interrupt ricezione
    TXEN = 1; //Abilitazione trasmissione seriale

    //INIZIO TRASMISSIONE
    Routine_Ritardo(50); //Assestamento linea

    while(TXIF)
    {
    TXREG = valore;
    Routine_Ritardo(50); //Assestamento linea
    }

    //SETTAGGIO RICEZIONE
    TXEN = 0; //Disabilitazione trasmissione seriale
    Routine_Ritardo(50); //Assestamento linea
    RCIE = 1; //Abilitazione interrupt ricezione
    return 0;
    }
  • Trasmissione(Online);

    char Trasmissione(char *str)

    E poi usi una for per inviare ogni carattere dell'array



    P.S. utilizza i tag CODE per postare il codice sul forum
  • Provandolo col simulatore di MPLABX non funziona lo stesso...mi trasmette sempre e solo il primo carattere dell'array
  • Non so che hai scritto quindi che ti posso rispondere?
  • Ho scritto quello che ti ho inviato. Io ho precedentemente chiesto: per passare un array di stringa bisogna utilizzare i puntatori?
    I progressi li avevo fatti, ma ora che devo trasferire dei caratteri da trasmettere non ci riesco.
  • Ma hai letto la mia risposta dopo che hai postato il codice?

    La tua funzione dovrebbe accettare un puntatore a char e non restituire nulla, quindi
    
    void Trasmissione(char *str)
    {
    
    }
    
    ovviamente senza return finale.

    La chiami semplicemente con
    
    Trasmissione(Online);
    
    e al suo interno puoi utilizzare una for per inviare i caratteri anche se modificherei la while di invio nel modo seguente
    
    int i, n;
    
    n=strlen(str);
    for(i=0; i<n; i++)
    {
       while(!TXIF) ;
       
       TXREG = str[i];
    }
    
  • L'avevo fatto funzionare ma nella compilazione mi dava un warning. Così è perfetto grazie, anche perchè la funzione è versatile per tutti gli array che devo trasmettere, avendo la stringa che mi misura la grandezza dell'array. Quindi posso dedurre che quando si manipolano array stringa bisogna fare uso dei puntatori?
  • Un array è individuato da un puntatore. Dovresti studiare la parte di C relativo agli array perché è meglio per proseguire con lo sviluppo.
  • Hai ragione, lo farò, grazie ciao.
  • Se vuoi velocizzare ed ottimizzare il codice, puoi scrivere
    
    while(*str)
    {
       while(!TXIF) ;
       
       TXREG = *str++ ;
    }
    
Devi accedere o registrarti per scrivere nel forum
11 risposte