Definizione di una funzione

11 Anni 9 Mesi fa - 11 Anni 9 Mesi fa #1 da Kopernico
Definizione di una funzione è stato creato da Kopernico
Ciao a tutti
Avviso subito i...naviganti che mi sono avvicinato da poco al linguaggio C.
Del resto il mio avatar mostra chiaramente un micro 'chip' senza ali !!!
Il mio problema e' che in un programma main.c devo chiamare una funzione :

Send(Address);

dove Address e' stata dichiarata in setting.h come :

int Address=255;

Sempre in setting.h e' stata messa anche la funzione da eseguire :

void Send(unsigned int Address)
{
RCIE=0; // interrupt di ricezione su seriale disattivato
EN=1;//abilito la trasmissione RS485
printf("%d \n",Address);
DelayMs(3);//tempo di attesa per terminare la trasmissione dei dati
EN=0;//disabilito la trasmissione RS485
RCIE=1; // interrupt di ricezione su seriale attivato
}

Quando compilo da MPLAB IDE, il risultato che mi restituisce e':


Warning [361] C:\....\settings.h; 124.1 function declared implicit int
Error [987] C:....\stdio.h; 207.37 arguments redeclared
Error [1098] C:\Program Files\HI-TECH Software\PICC\9.83\include\stdio.h; 207.37 conflicting declarations for variable "printf" (C:\.....\settings.h:124)
Warning [344] C:\....\usart.c; 23.7 non-void function returns no value

a parte i due warning, dove sbaglio sbaglio?

Grazie
Ultima Modifica 11 Anni 9 Mesi fa da Kopernico.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Kopernico
  • Visitatori
  • Visitatori
11 Anni 9 Mesi fa #2 da Kopernico
Risposta da Kopernico al topic Re: Definizione di una funzione
Ciao
il problema e' che tu (io) stai cercando di chiamare una variabile 'Address' che si trova in un altro file.
Dovresti utilizzare il comando 'extern' in modo da avvisare il compilatore che deve effettuare il link con il file main.c o piu' semplicemente puoi creare un file send.c dentro il quale metti la tua funzione così:


void Send(unsigned char Address)
{
RCIE=0; // interrupt di ricezione su seriale disattivato
EN=1;//abilito la trasmissione RS485
printf("%d \n",Address);
DelayMs(3);//tempo di attesa per terminare la trasmissione dei dati
EN=0;//disabilito la trasmissione RS485
RCIE=1; // interrupt di ricezione su seriale attivato
}

Nota la variante: l'argomento di send non viene identificato come una variabile, ma come un testo.

Ora puoi includere il file all'inizio del programma main.c (#include "send.c")
e utilizzarla nel programma chiamandola con
send(Address);
dove Address ha il valore che vuoi.

Qualcuno non vede spuntare una piccola ala ? :) :) :)

Morale: guarda, chiediti perche' e impara!!!

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Kopernico
  • Visitatori
  • Visitatori
11 Anni 9 Mesi fa #3 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Definizione di una funzione
...un aquilotto! :)


ma il file setting.h non e' incluso nel file main.c?

#include "send.c" e' posto dopo #include "setting.h"

Non usare lo stesso nome di variabile Address sia per una variabile globale che variabile locale per la funzione Send.
Non e' una buona pratica di programmazione a causa del differente scope delle variabili.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
11 Anni 9 Mesi fa #4 da Kopernico
Risposta da Kopernico al topic Re: Definizione di una funzione
:lol: :lol: :lol:

in ordine:
Si
Si
Ok, ma e' incredibile come mi manca la fantasia quando c'e' da dare un nome alle variabili!
Credo di essere stato colpito da pigrizia acuta.
Ma la variabile locale della funzione fa definita nel setting.h?
...eccolo, un altro attacco di pigrizia...

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Kopernico
  • Visitatori
  • Visitatori
11 Anni 9 Mesi fa - 11 Anni 9 Mesi fa #5 da Ifrit_Prog
Risposta da Ifrit_Prog al topic Re: Definizione di una funzione

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Ifrit_Prog
  • Avatar di Ifrit_Prog
  • Premium Member
  • Premium Member
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login