C variabele declareren ?

Goed..... Even gewerkt aan het herstructureren van de manual stepper routines.

Ik heb nu een stepper struct gemaakt met daarin welke pin step, dir enz. is.

Ik heb nu een routine gemaakt die aangeroepen moet worden als je een bepaalde as/stepper met de hand wil bedienen.

Waar nu

code:

#include "manual_right_W.h" 

stond.

Ik heb eerst de struct geschreven en even later bleek ik nog wat extra nodig te hebben. Heb ik nog niet toegevoegd.

Ik heb manual_right_X.h als basis genomen, ik heb de "endstops" nog niet gedaan zoals het hoort, dus nu zou het alleen voor die werken.

Ik heb nu ook maar 1 lus voor accellereren, bewegen en stoppen. Dus nu zitten de checks voor endstops en buttons loslaten ineens in alledrie. Lijkt me een bug die ik zo "vanzelf" gefixed heb.

De "core" van de routine is nu van 137 regels in manual_right_W.h naar 36 regels gegaan. Dat maakt het een stuk overzichtelijker.

Daarnaast heb ik een aantal dingen naar subroutines verbannen, dus de totale hoeveelheid code is niet zo enorm minder geworden.

Er zijn wel een zwik (bijna) een-regel functies. Bijvoorbeeld:

code:



void stepper_set_dir (struct stepper_desc *step, int dir)
{
  write_pin (step->dir, dir); 
}

void stepper_send_a_pulse (struct stepper_desc *step)
{
  write_pin (step->pulse, 1); 
  delay_us (5);
  write_pin (step->pulse, 0); 
}

Dit zijn zo van die functies waar je geen "brainpower" aan hoeft te besteden. Je ziet in 1 oogopslag dat dit werkt, correct is en in de aanroepende code zie je aan de aanroep ook direct wat er moet gebeuren.

In dat kader heb ik ook een "enable_stepper ()" functie gemaakt. Die schrijft de enable pin LAAG, want zo werkt de chip. Daarmee zit die "kennis" op 1 plek in de code ipv dat je daar iedere keer aan moet denken. Idem voor disable.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

ga ik zo meteen bekijken.
bedankt _/-\o_ .

eigenwijs = ook wijs
EricP

mét CE

Respect rew, voor de hoeveelheid tijd die je er in steekt.
En inderdaad, gewoon zoals het hoort, niks op aan te merken (behalve dat ik in het verleden getraind ben op 'geen magic numbers gebruiken' en 1 en 0 dus een define zouden zijn. Beroersdeformatie? Project deformatie? Geen idee :) ).

Voor wat betreft functies van 1 regel: het zal voor dit project wel los lopen, maar ik maak daar doorgaans macro's van. Als zal het waarschijnlijk nauwelijks uitmaken in performance en memory. En als er een delay in zit, maakt het helemaal niet meer uit :)

trix

Golden Member

net bekeken, ik ga hem bestuderen of ik het ook snap.
tnx.

eigenwijs = ook wijs

Jaja, ik ben er nog lang niet klaar mee, Maar 0 als "magic number voor laag" dat mag in mijn boekje.

Een alternatief is

code:

#define DM556T_ENABLE  0
#define DM556T_DISABLE 1

en dan verstop je DAAR de signaal niveaus van het driver chipje. (ik ben het chipnummer vergeten, dus als dat niet klopt: Dat weet ik).

Edit: Nummertje even ingevuld. P.S. Ik denk morgen ochtend weer een halfuurtje.

[Bericht gewijzigd door rew op 4 april 2021 17:59:26 (11%)]

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

eigenwijs = ook wijs
trix

Golden Member

ik maak nu gebruik van acc. en dcc. met een trapezium vorm.
maar ik wil naar een S vorm toe. niet met ingewikkelde berekeningen maar met een look up table.
is dat ook mogelijk in de nieuwe set-up.

ik ben ook nog even zoekende hoe ik in github de code kan wijzigen, maar kom ik nog wel uit.

eigenwijs = ook wijs
bprosman

Golden Member

Op 5 april 2021 16:34:55 schreef trix:
ik maak nu gebruik van acc. en dcc. met een trapezium vorm.
maar ik wil naar een S vorm toe. niet met ingewikkelde berekeningen maar met een look up table.
is dat ook mogelijk in de nieuwe set-up.

ik ben ook nog even zoekende hoe ik in github de code kan wijzigen, maar kom ik nog wel uit.

In principe blijf je je code gewoon "lokaal" (op je PC aanpassen) en "Push" je de nieuwe versie naar GitHub.

Je kunt dit via de command line doen of via een GUI.
https://www.geeksforgeeks.org/working-on-git-for-gui/

De jongere generatie loopt veel te vaak zijn PIC achterna.
trix

Golden Member

ok...op die manier, bekijk ik nog.
tnx.

eigenwijs = ook wijs

ik heb heel even gekeken naar je project.
Eigenaardige opzet, maar ik snap nu wat meer wat je tot je includes in je functies heeft gebracht.

je definieerd in je h file echt een stuk C code wat inplace geplakt wordt op de plaats waar je de includes aanroept.
Dus eigenlijk heb je nog steeds 1 giga main.c waar alle code in geplakt zit. Dit verberg je enkel door wat code in aparte h files te "verstoppen"
Op deze manier zou je elke variabele die je globaal wilt gebruiken bovenaan in main.c moeten declareren, maar ik zou toch overwegen hiervan af te stappen.

Ik pas er nu even niks aan aan, want ik weet niet precies wat rew al aan het doen is, en als ik het aan ga passen, snap je er straks misschien ook weer niks van. Daarnaast kan ik hier even geen nieuwe branch aanmaken. (ik ben bang dat Git weer de nodige vragen oproept bij je :))

Ik heb nu "stepper.c" een beetje in de vorm dat ik hem hebben wil.

Er moet nu in main een struct gedefinieerd worden voor 1 van de steppers en dan 1 van de "manual" aanroepen van #include <een van de manual>.h vervangen worden door mijn do_stepper_manual .

En er moeten nog wat portbits uitgeschreven worden in de bits.h . Dat is niet moeilijk, maar moet wel een keer door iemand gedaan worden.

(Ik ben even wat geirriteerd omdat ik voor zo'n "snel effe editen" gewoon "vi" gebruik. In vi is "r" het commando "vervang karakter". Dus tik ik "ra" dan vervangt ie het karakter onder de cursor door een "a". Maar iemand heeft het voor mekaar gekregen dat "rB" niet het huidige karakter door een B vervangt maar de rest van de regel in hoofdletters verandert. Na 30 jaar met vi gewerkt te hebben DENK ik: "hier moet een B" en dan hebben m'n vingers al "rB" getypt. Als er dan wat anders gebeurt wat ik dan weer moet gaan fixen is dat vervelend. Hoe HAALT iemand het in z'n hoofd om bestaande goed werkende commandos te gaan lopen verprutsen? Denken ze nu echt dat er nieuwe gebruikers zijn die zeggen: Oh, dat is wel handig, en dat dit de oude gebruikers die het oude gedrag gewend zijn overtreft???)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

en al een beetje tot rust gekomen..........;)
ik ben het aan het bekijken, kost moeite, er staan dingen in van een "echte" programeur waar ik als leek goed over na moet denken en op zoeken.
tnx.

eigenwijs = ook wijs

Daarom, heb ik het nog even gelaten voor wat het is.

En ja rew. Dat is je straf voor het gebruik van vi :p
Snap echt niet waarom mensen dat willen gebruiken? Kun je me 1 voordeel ervan geven?

Ik heb gelukkig atmel (inmiddels microchip) studio al geïnstalleerd, dat maakt het openen en organiseren van dit project toch net wat makkelijker

trix

Golden Member

b.v. een regel als: x -= step->acc; echt iets van een ervaren programeur, ik zou natuurlijk x = x - step->acc; doen (de amateur ;) )

eigenwijs = ook wijs

Tja, dat is een idioom van de C-taal.
Omdat er vaak x = x + 3 en dergelijke dingen geschreven werden is een afkorting bedacht. dus dat is x += 3 geworden.

Als jij liever x = x - step->acc ziet, dan moet je dat voor jezelf veranderen.

@stijnos: VI dateert uit de tijd dat niet alle terminals cursor-toetsen hadden. En het is dus zo goed als helemaal te bedienen met de toetsen die je blind kan typen als je tienvinger-blind kan typen. Dus dat is het voordeel. Maar ik ben de eerste die zegt dat niemand het meer moet leren. Maar als je het kent, dan vind ik dat het gewoon moet blijven werken....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Ander voordeel is dat je via putty op de raspberry kunt editen in vi.
Geen grafische schil nodig.

Via putty kan je ook met nano editen, neem ik aan. Of is de terminal emulator in putty niet goed genoeg voor nano (maar wel vi?!??).

@muj hieronder: Tuurlijk. dat zou te gek voor woorden zijn als het niet zou werken.

[Bericht gewijzigd door rew op 7 april 2021 10:47:28 (25%)]

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

@rew

Nano werkt perfect in Putty

trix

Golden Member

de operator -> is ook niet echt simpel te noemen.

eigenwijs = ook wijs

Dat is niet echt een operator maar behoord bij het gebruik van pointers. Ik denk niet dat we je daar mee moeten vermoeien. :)

Moet ik hem uitleggen?

Eerst moeten wehet hebben over een "struct". Een struct is een setje variabelen waarvan jij vind dat ze bij mekaar horen. En misschien heb je meer van die "combo's" nodig.

Een eenvoudig voorbeeld is als je met punten werkt.

code:


struct point {int x, y;}; 

Nu kan je iedere keer als je een xy paartje nodig hebt gewoon het type "struct point" gebruiken.

Vervolgens heb je een fuctie die een point doorgegeven moet krijgen.

Als we dan

code:


void line (struct point a, struct point b} 

declareren dan krijgt de functie een KOPIE van de hele point a en point b mee. Hier is ieder van de struct 4 bytes, dus dat valt wel mee. Dit is handig als je een parameter van een functie direct als variabele wil gebruiken. Bijvoorbeeld:

code:

 
void telaf (int x)
{
  while (x > 0) {
    x--;
  }
} 

Maar voor een struct meestal niet handig. Dus wat je dan doet is dat je een struct definieerd maar de POINTER naar de struct doorgeeft:

code:


void line (struct point *a, struct point *b} 
{ 
 ... 
}


void main (void)
{
  struct point x1, x2; 

  ... 

  line (&x1, &x2); 

}

Nu kan de "line" functie dus met a aan de variabele x1 zitten.

En /dat/ werkt met -> .

code:


void line (struct point *a, struct point *b} 
{ 
  int dx, dy;
  dx = b->x  -  a->x; 
  dy = b->y  -  a->y; 

  ... 

}
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

eigenwijs = ook wijs