Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema errore compilazione lib per MCP4251

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Problema errore compilazione lib per MCP4251

Messaggioda Foto Utentealien75 » 26 apr 2025, 15:18

Salve, ho installato le librerie per MCP4251 nell'ide per ARDUINODUE ed è andato a buon fine,
ma se compilo mi da il seguente errore:
Codice: Seleziona tutto
/home/fabio/Arduino/libraries/MCP4251/src/MCP4251.cpp:64:6: error: prototype for 'void MCP4251::DigitalPotSetWiperPosition(bool, unsigned int)' does not match any in class 'MCP4251'
void MCP4251::DigitalPotSetWiperPosition(bool potNum, unsigned int value)
      ^
In file included from /home/fabio/Arduino/libraries/MCP4251/src/MCP4251.cpp:1:0:
/home/fabio/Arduino/libraries/MCP4251/src/MCP4251.h:43:8: error: candidate is: void MCP4251::DigitalPotSetWiperPosition(bool, uint16_t)
   void DigitalPotSetWiperPosition(bool potNum, uint16_t value); // Need confirmation if it is working
        ^
exit status 1

Compilation error: exit status 1


Il codice è il seguente:
Codice: Seleziona tutto
#include "Arduino.h"
#include "MCP4251.h"


Non capisco perché mi da tale errore aiutatemi.
Sotto ArduinoUno la compilazione va a buon fine.
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

[2] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utentebanjoman » 26 apr 2025, 15:29

La dichiarazione e l'implementazione della funzione membro sono diverse nel tipo del secondo parametro:

Nell'include .h:
Codice: Seleziona tutto
MCP4251::DigitalPotSetWiperPosition(bool, uint16_t)


Nel file .cpp:
Codice: Seleziona tutto
MCP4251::DigitalPotSetWiperPosition(bool, unsigned int)


Max
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1623
Iscritto il: 19 set 2013, 19:27

0
voti

[3] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utentealien75 » 26 apr 2025, 15:40

Io non ho messo mano nel file .h e nel file .cpp: come mai sono diverse?
Non capisco il perché.
Hai qualche idea?
qual è il tipo di parametro vero?
Non conosco questa lib nella profondità.
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

[4] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utentebanjoman » 26 apr 2025, 15:51

Dipende dal compilatore che usi. Alcuni , (piu' permissivi) emettono solo un warning, altri si fermano riportando un errore.
Prova a mettere uint16_t al posto di unsigned int e vediamo cosa accade...

Se non erro Arduino due e' un micro a 32 bit, quindi l'equivalente di uint16_t sarebbe
Codice: Seleziona tutto
unsigned short int
, mentre
Codice: Seleziona tutto
unsigned int
sarebbe equivalente a uint32_t.

Poi non conosco la libreria, quindi ci sarebbe da approfondire se chi l'ha scritta intendeva usare proprio un uint16_t piuttosto che un uint32_t....
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1623
Iscritto il: 19 set 2013, 19:27

0
voti

[5] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utentebanjoman » 26 apr 2025, 16:15

Per curiosita' ho dato un'occhiata alla libreria. Il MCP4251 accetta valori compresi tra 0 e 255, quindi anche l'uint16_t sarebbe inutile (basterebbe un unsigned char oppure un uint8_t).
Di fatto chi ha scritto la libreria alla fine fa un cast a (byte) prima di spedire il dato sulla SPI.
Un po' pasticciato insomma... :-)
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1623
Iscritto il: 19 set 2013, 19:27

0
voti

[6] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utenteboiler » 26 apr 2025, 16:26

Benvenuti nel mondo arduino!

Sono andato a vedermi la libreria (qui: https://github.com/kulbhushanchand/MCP4 ... master/src)
Codice: Seleziona tutto
void MCP4251::DigitalPotSetWiperPosition(bool potNum, unsigned int value)
{
    byte cmdByte = B00000000;
    byte dataByte = B00000000;
    if (value > 255)
        cmdByte |= B00000001;
    else
        dataByte = (byte)(value & 0X00FF);


Il safeguarding invece di ritornare un errore (come sarebbe buona prassi) genera un side-effect non documentato (ma poi in realtà cosa c'è di documentato?!?)

Tendenzialmente correggerei sempre prendendo il tipo specificato "piú univocamente", che in questo caso è uint16_t.

Gli orrori continuano:
Codice: Seleziona tutto
    if (potNum)
    {
        cmdByte = cmdByte | ADDRESS_WIPER_1 | COMMAND_WRITE;
        SPI.transfer(cmdByte);
        SPI.transfer(dataByte);
    }
    else
    {
        cmdByte = cmdByte | ADDRESS_WIPER_0 | COMMAND_WRITE;
        SPI.transfer(cmdByte);
        SPI.transfer(dataByte);
    }

potNum è di tipo bool, così che se si dovesse estendere la biblioteca ad un potenziometro a 4 canali, cambierebbe l'interfaccia.
Ah, è ovviamente il paradigma "don't repeat yourself" lo mandiamo a quel paese.

Ogni tanto fa bene dare un'occhiata a queste cose, mi confermano che la scelta di starne alla larga è quella giusta :mrgreen:

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

0
voti

[7] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utenteboiler » 26 apr 2025, 16:28

banjoman ha scritto:Per curiosita' ho dato un'occhiata alla libreria. Il MCP4251 accetta valori compresi tra 0 e 255

In realtà no, va fino a 0x100 (scelta molto opinabile, secondo me):
https://ww1.microchip.com/downloads/aem ... 22060b.pdf

Di fatto chi ha scritto la libreria alla fine fa un cast a (byte) prima di spedire il dato sulla SPI.
Un po' pasticciato insomma... :-)

Molto peggio: tronca qualsiasi valore superiore a 256 senza preavviso e senza errore.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

0
voti

[8] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto Utentebanjoman » 26 apr 2025, 16:29

Lo so, ma non volevo infierire... tu invece si :mrgreen:
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1623
Iscritto il: 19 set 2013, 19:27

0
voti

[9] Re: Problema errore conpilazione lib per MCP4251

Messaggioda Foto UtenteGioArca67 » 30 dic 2025, 12:05

boiler ha scritto:Benvenuti nel mondo arduino!

[...]

Ogni tanto fa bene dare un'occhiata a queste cose, mi confermano che la scelta di starne alla larga è quella giusta :mrgreen:


Però non puoi dare la colpa al micro e al suo contorno HW se ci sono anche cani a scrivere SW... (senza riferimento specifico alla libreria in questione, ovviamente)
Basta selezionare e/o scrivere in proprio. :lol:
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti