Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Dessa funktioner är farliga att använda, eftersom det inte finns någon kontroll av argumenten. Och det är väldigt enkelt att få det fel.
Därför är det bättre att inte använda dem överhuvudtaget.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av DanielM »

Då är det bättre att inte göra något, för då kan man inte ha gjort fel :lol:
Jag hade ett problem när jag skulle använda sprintf med float. Gick inte. Då fick jag använda ett tredjepartsbibliotek för sprintf. Då fungerade det. _sprintf med andra ord som funktionen hete.

Hur som helst kommer jag bygga om min grunka (PCB) helt från grunden nu. Jag vill använda mig av STM32F373C8 och inte av STM32F373R8 som jag använder nu.
Men nu har man ju lärt sig vad man ska kolla efter och lite tips från er alla. Så hoppas det ska gå bättre denna gång :)

Denna gång väljer jag att ha en kristall med också. Jag bara gör det, för att vara på den säkra sidan. Inte för att jag känner att jag har ett behov av den.
Senast redigerad av DanielM 2 november 2020, 00:04:29, redigerad totalt 1 gång.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Man måste ju inte använda osäkra funktioner, det finns alltid alternativa sätt.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av DanielM »

Lustigt att du anser att C programmeringsspråket innehåller osäkerheter. Det som har prisats av gurus världen över för att vara det mest genomtänkta och utvecklade språk någonsin.
Du har inte funderat på att dela med dig av dina kunskaper till dom som utvecklar C-standarder och dess kompilatorer? Tror du kan tjäna enormt på detta.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Javisst, och at.. str.. mem.. funktionerna samt några fler är kända för att vara osäkra och ibland farliga, just därför undviker man dem i största möjliga grad.
Det är inga nyheter, utan ett välkänt faktum bland de som programmerar.

C är jättebra, eftersom man kan göra fantastiska saker, men det är också så att man samtidigt kan göra fantastiskt fel.

Fundera på följande två rader:

if (a == 1){.........}
och
if (a = 1){.........}

Bägge rader är fullt valid C-kod, och ger inga som helst kompileringsfel.
Dock, LINT och liknande verktyg varnar troligen för en av dessa rader.
hummel
Inlägg: 2269
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av hummel »

DanielM skrev: 1 november 2020, 23:57:01 Då är det bättre att inte göra något, för då kan man inte ha gjort fel :lol:
Jag hade ett problem när jag skulle använda sprintf med float. Gick inte. Då fick jag använda ett tredjepartsbibliotek för sprintf. Då fungerade det. _sprintf med andra ord som funktionen hete.
Varför fungerade det inte med sprintf() för dig?
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av DanielM »

Jag tror det har något med FPU att göra. Jag försökte aktivera -u float flaggan, men det blev ingen skillnad.

Hittar dock inte biblioteket nu. Men den finns på GitHub.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av DanielM »

TomasL skrev: 2 november 2020, 00:13:05 Javisst, och at.. str.. mem.. funktionerna samt några fler är kända för att vara osäkra och ibland farliga, just därför undviker man dem i största möjliga grad.
Det är inga nyheter, utan ett välkänt faktum bland de som programmerar.

C är jättebra, eftersom man kan göra fantastiska saker, men det är också så att man samtidigt kan göra fantastiskt fel.

Fundera på följande två rader:

if (a == 1){.........}
och
if (a = 1){.........}

Bägge rader är fullt valid C-kod, och ger inga som helst kompileringsfel.
Dock, LINT och liknande verktyg varnar troligen för en av dessa rader.
Det finns väll utrymme för detta också?
Exempel om man vill tilldela en variabel ett värde i en if-sats.
if ((a = 1) + b > c)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Snälla nån, vad händer i en if-sats.
och vad är meningen med just en if-sats.
Javisst, är du en inkompetent programmerare så kan du göra tilldelningar i if-satser, eller om du tävlar i att skriva oläsbar kod.
du kan ju fundera på detta:

Kod: Markera allt

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}
eller

Kod: Markera allt

#include                                     <math.h>
#include                                   <sys/time.h>
#include                                   <X11/Xlib.h>
#include                                  <X11/keysym.h>
                                          double L ,o ,P
                                         ,_=dt,T,Z,D=1,d,
                                         s[999],E,h= 8,I,
                                         J,K,w[999],M,m,O
                                        ,n[999],j=33e-3,i=
                                        1E3,r,t, u,v ,W,S=
                                        74.5,l=221,X=7.26,
                                        a,B,A=32.2,c, F,H;
                                        int N,q, C, y,p,U;
                                       Window z; char f[52]
                                    ; GC k; main(){ Display*e=
 XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
 *D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
  XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
                                   XEvent z; XNextEvent(e ,&z);
                                       ++*((N=XLookupKeysym
                                         (&z.xkey,0))-IT?
                                         N-LT? UP-N?& E:&
                                         J:& u: &h); --*(
                                         DN -N? N-DT ?N==
                                         RT?&u: & W:&h:&J
                                          ); } m=15*F/l;
                                          c+=(I=M/ l,l*H
                                          +I*M+a*X)*_; H
                                          =A*r+v*X-F*l+(
                                          E=.1+X*4.9/l,t
                                          =T*m/32-I*T/24
                                           )/S; K=F*M+(
                                           h* 1e4/l-(T+
                                           E*5*T*E)/3e2
                                           )/S-X*d-B*A;
                                           a=2.63 /l*d;
                                           X+=( d*l-T/S
                                            *(.19*E +a
                                            *.64+J/1e3
                                            )-M* v +A*
                                            Z)*_; l +=
                                            K *_; W=d;
                                            sprintf(f,
                                            "%5d  %3d"
                                            "%7d",p =l
                                           /1.7,(C=9E3+
                              O*57.3)%0550,(int)i); d+=T*(.45-14/l*
                             X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
                             *I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
                             179*v)/2312; select(p=0,0,0,0,&G); v-=(
                              W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
                               )/107e2)*_; D=cos(o); E=sin(o); } }
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av DanielM »

Bara Galenskaparna skulle skriva så där.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Bägge programmen kompilerar felfritt och fungerar som tänkt.
Det är bara i C du kan göra något sånt.
Så, C är underbart, men livsfarligt.

Kan du gissa vad programmen gör?
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av DanielM »

Nej. Programmet är skrivet av folk som vill testa gränserna hos C. Totalt ointressant att kompilera rappakalja än fast det fungerar.

Kod ska vara snyggt skrivet. Pedagogiskt, välbeskrivande, planerat och följa standarder. Inte "jävulskt smart" eller "optimerat som satan". Detta bäddar för att koden blir ej förstådd av andra.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Naturligtvis är det så, därför så gör man aldrig någonsin en tilldelning i en if-sats.
för att du skall veta, det första programmet är skrivet i original K&R-C och beräknar talet pi.
Det andra är ANSI-C och är en flygsimulator, naturligtvis, och det ser du ju.
Poängen är att med C kan du göra vad du vill, men det är inte helt lätt att göra saker rätt, så därför skall man vara försiktig med bibliotekskod, den kan funka i 99% av fallen, men inte nödvändigtvis i din applikation.

BTW, dessa program antingen vann eller var sk "runner-up" i IOCCC (International Obfuscated C Code Contest) där man skall skriva så korta fungerande program som möjligt, med en fullständigt obegripbar kod, och helst formaterarad på ett estetiskt sätt, som flygplanet ovan,
Användarvisningsbild
Klas-Kenny
Inlägg: 11343
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av Klas-Kenny »

hummel skrev: 2 november 2020, 00:13:59 Varför fungerade det inte med sprintf() för dig?
ST har valt att inte stödja utskrifter av float i sin implementation av printf osv per default. För att spara lite minne tydligen, vilket är lite ironiskt när de förespråkar sitt "HAL" som äter upp det där sparade minnet och mer därtill.

Men går att aktivera utan tredjepartsbibliotek, se tex. här:
https://community.st.com/s/question/0D5 ... -in-printf
TomasL skrev: 1 november 2020, 23:26:38 Dessa funktioner är farliga att använda, eftersom det inte finns någon kontroll av argumenten. Och det är väldigt enkelt att få det fel.
Därför är det bättre att inte använda dem överhuvudtaget.
Fast med det argumentet så ska man ju helt låta bli att använda C. Så gott som allt i C är farligt, om man gör fel. :D
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Inlägg av TomasL »

Naturligtvis är det så, men det går alltid att göra på andra sätt.
Men som sagt, använder man dessa sk osäkra funktioner så måste man hålla tungan rätt i munnen.
Skriv svar