I2C adress för MCP4728 beter sig konstigt?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
AndLi
Inlägg: 17045
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av AndLi »

>Just _ betyder "this" i C språket

I vilken version då? Har du någon referens till detta påstående?
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av ToPNoTCH »

Jag vet inte hur CubeMX definerar det. Dom bara skriver hi2c1 eller hi2c2 osv.
Asså du ser väl själv hur den automatgenererade koden ser ut ?

Om du ändrar handle från hi2s3 i denna (automatgenererade) definition till något jävla underline, så blir det överskrivet varje gång du gå in i MX för att ändra en inställning.
Namnlös.png
Nedan är motsvarande initieringskod (den automatgenererade) även den genereras med pekare mot handle (enligt tidigare definition)
Samma gäller här. Om du hittar på egna namn, så skrivs dom över av MX.

Jag tror det dessutom räcker med en uppdatering av Cube IDE för att den automatiskt skall generera om koden.

Jag har förstått att du anser dig veta bättre än ST-Microelectronics om hur man kodar, men i detta fallet så ligger dig det bara i fatet.
Namnlös2.png
Eftersom du säkert kommer hävda storheten i ditt underline oavsett vad jag skriver så kan du väl åtminstone adressera rätt. I ditt särfall HAL_I2C_Master_Transmit(&_hi2c, _address << 1, pData, sizeof(pData), Timeout);
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av TomasL »

DanielM skrev: 5 maj 2022, 20:36:12
Just _ betyder "this" i C språket. Alltså _hi2c betyder att denna fick sitt minne från "konstruktören", dvs init-funktionen och konstruktörens argument heter hi2c.

Vet inte var du fått det från, generell rekomendation är att INTE använda "_" i början eller slutet av variabler/funktioner
De enda tillfällena man rekommenderar det är.
1. Skriva obfuskerad kod.

Inga andra tillfällen bör man använda det.

tänk på att int _; är en fullständigt gilltig variabel i C.

Dessutom finns det inget som heter Konstruktor eller liknande i C. Begreppet eller funktionaliteten existerar överhuvudtaget inte, ej heller något som heter "this"
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av mankan »

Angående _ och this, finns inget "this" i C. Möjligen kan man ha det som olyckligt vald namnkonvention för att skriva objektorienterad C. Se https://stackoverflow.com/questions/228 ... identifier för mer info. Kort sagt undvik _ och __ i början på variabler i din kod. Såvida du inte har råkoll på hela miljön, dvs all kod du bygger är skriven av dig själv, dvs inga systemlibbar, inget HAL från SoC-tillverkaren osv. Mao, låt bli helt enkelt.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av DanielM »

AndLi skrev: 5 maj 2022, 21:48:14 >Just _ betyder "this" i C språket

I vilken version då? Har du någon referens till detta påstående?
Okej, inte just i "C språket" som standard. Utan mer som generellt skrivsätt. T.ex. i Java skriver man alltid getTheValue(), men i C skriver man get_the_value()

Det är mycket vanligt med _ i C. Men i C++ brukar det inte alls vara så vanligt. Jag tror detta har med att förr i tiden så skrev man C på ett sådant sätt, som idag lever kvar.

Jag skriver mycket kod och jag blir rätt deprimerad hur dålig många C kodare faktiskt är på att skriva ren, snygg och tydlig C kod. Oftast är det rätt dåliga for-loopar där { är direkt under for. Ser riktigt slitet ut att bara slösa rader i onödan.
mankan skrev: 5 maj 2022, 22:17:47 Angående _ och this, finns inget "this" i C. Möjligen kan man ha det som olyckligt vald namnkonvention för att skriva objektorienterad C. Se https://stackoverflow.com/questions/228 ... identifier för mer info. Kort sagt undvik _ och __ i början på variabler i din kod. Såvida du inte har råkoll på hela miljön, dvs all kod du bygger är skriven av dig själv, dvs inga systemlibbar, inget HAL från SoC-tillverkaren osv. Mao, låt bli helt enkelt.
Även ST själva använder datatypen __weak. Eller i alla fall ordet __weak.
Senast redigerad av DanielM 5 maj 2022, 22:38:19, redigerad totalt 1 gång.
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av ToPNoTCH »

:shock:
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av mankan »

Kanske i kod du har sett är det så. Och visst olika namnkonventioner av variabler, funktioner och filnamn mm är olika vanliga i olika språk men dina generaliseringar håller inte.

__weak, är med största sannolikhet ett makro för GCC-specifika __attribute__((weak)). Blanda inte ihop språk, miljö och standardbibliotek även om de hänger tätt ihop.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av TomasL »

IO C skriver man ALDRIG på det sättet.
Personligen har jag aldrig sett _ användas i C, det kan förekomma i mitten av variabelnamn, men är rätt ovanligt.
. T.ex. i Java skriver man alltid getTheValue(), men i C skriver man get_the_value()
Nej det gör man inte.
I C är det vanligaste att man skriver getTheValue()

Det händer att man använder __ dvs dubbel understrykning i kombination med #pragma och definitioner av Interruptprioriteter och liknande
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av mankan »

Nej, du är lika kategorisk och generaliserande som vanligt TomasL. Det enda man säkert kan säga att enligt din erfarenhet så är getTheValue() vanligast.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av DanielM »

Jasså?

https://github.com/foone/BRender-v1.3.2 ... /devclut.c

Kod: Markera allt

static br_token BR_CMETHOD_DECL(br_device_clut_vga, type)(br_device_clut *self)
{
	return BRT_DEVICE_CLUT;
}

static br_boolean BR_CMETHOD_DECL(br_device_clut_vga, isType)(br_device_clut *self, br_token t)
{
	return (t == BRT_DEVICE_CLUT) || (t == BRT_OBJECT);
}

static br_int_32 BR_CMETHOD_DECL(br_device_clut_vga, space)(br_device_clut *self)
{
	return sizeof(br_device_clut);
}
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av TomasL »

Bara för att nån skriver så på github, betyder inte att det är allmänt förekommande, snarare tvärtom.
agehall
Inlägg: 418
Blev medlem: 12 augusti 2020, 19:27:54

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av agehall »

Garanterar APIerna att SPI-anropen skickar/tar emot data innan de returnerar eller är de asynkrona? En inte helt ovanlig källa till buggar där saker beter sig konstigt när data skickas är att man använder lokala variabler som buffrar och som sedan inte längre innehåller giltig data när datat faktiskt skickas…
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av DanielM »

Eller så kanske man måste ha en fördröjning? När jag ändrar från 0v till 3.3v så tar det ändå en stund innan min multimeter reagerar. Tänkte om DAC:en tar tid på sig.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av sodjan »

Det är väl helt OK med en "underscore" *inne* i variabelnamn, ser inget problem med det.
Däremot är det ovanligt *i början* av variabler och brukar vara reserverat för "internal use".
Så en god vana och regel är att aldrig använda "leading underscore" för egna variabler.

Men som sagt, inne i variabel namn så är det helt OK. Om det ökar läsbarheten, så OK.

Googla "leading underscore variable name" så får du en massa förklaringar.

> Tänkte om DAC:en tar tid på sig.

"Tar tid på sig"??
Du menar utöver vad som databladet specificerar? Nej, varför skulle den göra det?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: I2C adress för MCP4728 beter sig konstigt?

Inlägg av TomasL »

DanielM skrev: 5 maj 2022, 23:11:23 Eller så kanske man måste ha en fördröjning? När jag ändrar från 0v till 3.3v så tar det ändå en stund innan min multimeter reagerar. Tänkte om DAC:en tar tid på sig.
Ja, typ någon enstaka ms eller så, beroende på om man har autorange eller inte.
Skriv svar