|
Autore |
Messaggio |
opzioni |
MB54
postato il: 26.05.2020, alle ore 15:30 |
capire librerie di Arduino
Sto cercando di studiare alcune librerie di Arduino. Del 'C' conosco solo le istruzioni elementari, e mi perdo con le 'classi', costruttori ecc.
Quando nel codice di una libreria trovo due volte i 'due punti' ( ::) che vuol dire? Es.
float WinsenZE03::readContinuous(){ecc
mi pare di capire che WinsenZ03 sia il nome dell' oggetto e readContinuous() sia il nome di una delle funzioni che posso richiamare dal mio codice. Nel caso dell' esempio è la funzione readContinuous che mi restituisce un int
E' così? |
|
caccamo2
postato il: 26.05.2020, alle ore 17:59 |
https://en.wikipedia.org/wiki/Scope_resolution_operator
... |
|
MB54
postato il: 26.05.2020, alle ore 18:24 |
Grazie, almeno ho un punto di partenza. |
|
still
[pagine pubblicate]
postato il: 27.05.2020, alle ore 07:05 |
Buongiorno,mi unisco alla discussione per fare una domanda: c'è un modo per sapere quali sono le funzioni contenute in una libreria? Finora per scovarle ho sempre cercato degli esempi, mi chiedevo se da qualche parte ci sia modo di risalire ad un elenco di quello che la libreria può fare. Grazie
Chi ha argomenti discute serenamente e rispetta le opinioni altrui, chi non ne ha insulta e basta.
Non ti curar di lor, ma guarda e passa |
|
MB54
postato il: 27.05.2020, alle ore 07:26 |
still: .. c'è un modo per sapere quali sono le funzioni contenute in una libreria? .
Era il mio obiettivo. Direi che sono quelle che seguono i :: In pratica non tutte sono utilizzabili convenientemente dall' esterno della libreria, ma si dovrebbe capire quali sono utili. Oggi dovrò guardarmi in dettaglio la libreria di un sensore e ne saprò di più (spero) a fine giornata.
Se credi puoi indicare una libreria di tuo interesse, non troppo complessa, in modo che gli eventuali interventi si riferiscano ad un codice condiviso.
In generale vedo che le librerie per A.essendo scritte ovviamente da programmatori molto bravi, si presentano con sintassi veramente ostiche per un apprendista programmatore. Come mio commento, quindi imho, manca una tabella di testo di esposizione delle funzioni con due righe due di chiarimento; gli esempi sono in genere scarni ed esemplificano pochi casi. Credo che la concisione del codice e la mancanza di chiarimenti sia dovuta non tanto alla mancanza di tempo, quanto ad una naturale tendenza alla cripticità esoterica, che fa parecchio figo...
Imho, hai perso un sacco di tempo per scrivere la libreria (bravo), perdici ancora un ora per renderne chiaro l' uso.
|
|
pippodue
postato il: 27.05.2020, alle ore 07:47 |
Non sarà per la poca voglia di chiarire le limitazioni o di garantire la funzione?
anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire) |
|
MB54
postato il: 27.05.2020, alle ore 07:56 |
pippodue: Non sarà per la poca voglia di chiarire le limitazioni o di garantire la funzione?
non ho capito |
|
double_wrap
postato il: 28.05.2020, alle ore 11:54 |
Un modo empirico per scovare le funzioni di una libreria e' questo:
A) si apre il file NOME_LIBRERIA.CPP con notepad++ (e' free, indenta e colora) o con un altro editor
B) si cercano le righe che iniziano con
tipo_variabile nome_libreria::nome_funzione(parametri){
ad esempio
void LCD03::setCursor(uint8_t col, uint8_t row) {
uint8_t RTC_DS1307::readnvram(uint8_t address) {
float SunLight::calcMezzoDiMedio(){
C) si cerca di capire cosa faccia la funzione, spesso all'interno della libreria ci sono dei commenti che ne spiegano l'uso ed anche nella pagina github da dove e' stata scaricata la libreria spesso ci sono delle descrizioni
"se peso cado, ma se cado non peso"
adamatj.altervista.org |
|
MB54
postato il: 28.05.2020, alle ore 12:35 |
double_wrap: ...
Si. Girando attorno ad alcune librerie semplici, ho visto che nel nomelibreria.h sono definite quali funzioni sono pubbliche e quali private. Ho provato anche a rendere pubbliche funzioni private (laddove abbia un senso) e pare funzionare.
Ad esempio in questo file WinsenZE03.h dove viene definita la classe WinsenZE03 si ha:
class WinsenZE03
{
public:
WinsenZE03();
void begin(Stream *ser, int type);
void setAs(bool active);
float readManual();
float readContinuous();
private:
void debugPrint(byte arr[]);
Stream *_s; //Serial1 - Serial3 are USARTClass objects.
int _type;
};
Le funzioni pubbliche sono richiamabili con nomeclasse.nomefunzione() es.
WinsenZE03.readManual()
Se rendo pubblica la funzione debugPrint(byte arr[]) poi la posso usare come le altre.
O almeno questo mi é parso di capire (ma che fatica)
|
|
caccamo2
postato il: 28.05.2020, alle ore 12:53 |
still: c'è un modo per sapere quali sono le funzioni contenute in una libreria?
usare ambienti di sviluppo ufficiali messi a disposizione o promossi dai produttori del silicio.
I compilatori seri quando chiami una funzione esce un popup con la lista delle opzioni, tanto per fare un esempio, e le librerie sono documentate su manuali, cose che nel mondo arduino sono solo sogni.
... |
|
|