C variabele declareren ?

trix

Golden Member

eigenwijs = ook wijs

Is de code voor beide of meerdere steppers steeds nagenoeg een kopie van elkaar? Ik vermoed van wel.
Dan zou ik dus geen losse files daarvoor gebruiken of iig 1 functie die voor alle motoren hetzelfde doet en die iets generieker maken en dan als argument de motor index meegeven ofzo.

Ik neem aan dat je je mysterieuze project voor je wil houden, maar anders wil ik je code wel eens reviewen en je wat constructieve tips geven, zodat je opzet veel logischer en onderhoudbaarder wordt.

trix

Golden Member

ik ben aan het testen om met .h en .c files te gaan werken.
maar ik krijg errors van:
TCNT1......undeclared (first used in this function)
TCCR1B.....undeclared (first used in this function)
CS10.......undeclared (first used in this function)
TIFR1......undeclared (first used in this function)
TOV1.......undeclared (first used in this function)
allen voor timer1.
moetik hier nog iets speciaals voor doen ?

eigenwijs = ook wijs

Die gebruik je in de c files neem ik aan. In h files schrijf je geen code.
In je c file waar je deze processor specifieke registers gebruikt moet je de h file includen waar deze registers in gedefinieerd zijn. Ik weet even niet uit mijn hoofd welke dat is, maar die zal in je main.c ook geinclude worden. Iets met iom dacht ik.

trix

Golden Member

klopt, nou je het zegt. maar dan moet ik dat in alle C-files doen waar ik die timer gbruikt.

#include <avr/io.h>
moet blijkbaar geincluded worden.

[Bericht gewijzigd door trix op 3 april 2021 10:14:53 (24%)]

eigenwijs = ook wijs
EricP

mét CE

Tsja... Je moet die compiler wel vertellen wat iets betekent he...
Dus als je wat met I/O registers doet... Dan moeten die wel gedefinieerd zijn. Idem als je zaken als INT_MAX enzo gebruikt. Dan zul je limits.h nodig hebben. Als je met strncmp aan de gang gaat... Dit zit in strings.h.

Als je het echt niet weet, dan kun je altijd de reference manual erbij pakken. Heb je die van de C compiler waar je mee werkt al eens gelezen? Vroeger (heel lang geleden, toen ik nog wel eens wat op windhoos deed), hadden we winavr. Simpele maar redelijke complete reference in html zat erbij.

Overigens is die io.h sneaky. Ergens heb je verteld welke controller je gebruikt. Die wordt als parameter aan de compiler en dus aan de pre-processor doorgegeven. Als je eens in io.h kijkt, dan zul je zien dat die voor elke controller z'n eigen eigenaardigheden heeft. Zo kun je dus de source voor meerdere controllers gebruiken (aangenomen dat de peripheral daar ook in zit en hetzelfde werkt natuurlijk), zelfs als de registers met dezelfde naam opeens op een ander address zitten. Zonder dat je een letter aan je source hoeft te veranderen.

trix

Golden Member

krijg het niet werkend :( ik ben nu bezig het bestaande programma aan te passen, maar dan "verzand" ik in van alles.

ik wil nu gewoon met atmel studio 7 een nieuw project aan maken, en zo op 0 beginnen, blokken code kan ik dan met copy/paste overzetten van het oude programma. dan moet het goed komen.

edit: ik ga nu per steppermotor een sourcefile maken.

eigenwijs = ook wijs

OK. Het zal niet de eerste keer zijn dat ik dit zeg: Maar: Ik geef het op. Succes er mee.

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

Golden Member

eigenwijs = ook wijs
bprosman

Golden Member

@Trix, waarom zet je het niet op GitHub ?. Dat kun je afschermen dat alleen bepaalde mensen toegang hebben, die kunnen dan meekijken met je code. Dat is hier al meerdere keren aangeboden.

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

Golden Member

ga ik inderdaad graag gebruik van maken.
ik zit nu op het punt dat 80% van de code werkt (al of niet mooi geprogrammeerd). zitten best lastige dingen bij, waarvan ik blij ben dat ik het werkend heb gekregen.
ik loop nu vast op het doorgeven van 1 variabele (staat in een .h file en wil ik bebruiken in een andere .h file).
de hulp van jullie kant word enorm gewardeerd, laat dat duidelijk zijn _/-\o_ . alleen worden in veel posts termen gebruikt en voorbeeld codes die voor mij lastig te begrijpen zijn, waardoor het lijkt alsof ik er niks mee doe, maar dan begrijp ik het vaak niet goed....even over nadenken....en er zijn al weer 2 nieuwe posts met een andere insteek, gaat soms snel.

even uitzoeken hoe dat github werkt.

eigenwijs = ook wijs
trix

Golden Member

bprosman, ik heb je net een uitnodiging gestuurd, maar ik moet de code nog eerst uploaden.

edit: zojuist geupload

[Bericht gewijzigd door trix op 3 april 2021 16:34:58 (13%)]

eigenwijs = ook wijs
bprosman

Golden Member

Gelukt , ik kan GitHub wel verifieren voor je maar qua C (structuur) zijn er anderen met meer ervaring.

[Bericht gewijzigd door bprosman op 3 april 2021 16:35:21 (14%)]

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

Golden Member

edit: zojuist geupload

mocht er iemand mee willen kijken, dan is hij altijd welkom.
ik heb dan je gebruikers naam op github nodig.
(die van bram was voor de hand liggend)

eigenwijs = ook wijs

Effe voor anderen: Als je zo'n repo probeert te clonen moet je de "ssh" methode gebruiken anders moet je je usernaam/wachtwoord gaan opgeven (die weet ik niet meer / moet ik opzoeken).

Die "3-1... " directory is iets met "hoe het was" en die andere waar je aan het werk mee bent? of zoiets?

[Bericht gewijzigd door rew op 3 april 2021 17:24:33 (23%)]

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 dubbelklik altijd op: display_testing.atsln
dan word het programma automatisch geopend in atmel studio 7
hoe die gelinkt is met die 2 mappen weet ik eigenlijk niet.

even gekeken, hij is gelinkt met 3-1-2020 test(20)

[Bericht gewijzigd door trix op 3 april 2021 17:44:20 (15%)]

eigenwijs = ook wijs
PE9SMS

Special Member

Op 3 april 2021 13:21:55 schreef trix:edit: ik ga nu per steppermotor een sourcefile maken.

Klinkt als niet heel handig trix. Want de code in die files zal voor 80% (90% ? 99% ?) overeenkomen. Aanpassingen, oplossen van bugs, etc moet je dan steeds op 2 plaatsen doen. Dat leent zich nou juist prima voor een enkele stepper.c met stepper.h Want wat zijn nou helemaal de verschillen? Vermoedelijk alleen de hardware interface?

c code:

void laat_draaien(uint8_t stepper_id)
{
  if (stepper_id==1)
  {
     ....
  }
  else if (stepper_id==2)
  {
     ....
  }
}
This signature is intentionally left blank.

Goed... Als eerste indruk dan: De verhouding stuff-in-C-file t.o.v. stuff-in-H-files is verkeerd. 1731 regels in de enige C file main.c en 3866 regels in 15 .h files.

Ik heb geen atmel studio, dus dat "click op dat ene xml bestandje" dat kan ik niet.

@PE9SMS: Exact die suggestie heb ik een paar paginas terug gedaan en dat werd genegeerd.

[Bericht gewijzigd door rew op 3 april 2021 18:03:37 (15%)]

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

Golden Member

is niet echt negeren, meer niet goed begrijpen ;). ik vroeg nog ergens, of het dan ook mogelijk is(mocht het nodig zijn) dat er 2 steppers tegelijk draaien. werd niet op gereageerd ondertussen weer andere posten met andere inhoud.......enfin, de strekking is wel duidelijk. (waar mee ik me eigen niet wil goed praten).

ja het grootste deel v/d code staat inderdaad in .h files........niet goed.

het zijn 8 steppers, die dan in 1 source code komen (.c).
die stepper moet dan kunnen homen, manual, positioneren.
je krijgt dan ook automatisch veel variabele naar die stepper file toe.
word die code dan niet te groot ?

eigenwijs = ook wijs

De compiler kan alles aan. Jij hebt een kleine 5000 regels code. Een groot project bevat makkelijk 100 tot 1000 keer meer. Project: "Linux kernel" heeft 27 miljoen regels code.

Maar om het als mens te behappen moet je structuur enigszins kloppen.

Ik heb "manual right W" en "manual right X" zitten bekijken en die code is dus behoorlijk op mekaar gelijkend.

Ik heb een lege regel toegevoegd en gepushed. Dat mag kennelijk.

Mag ik zo een poging doen om daar (van die manual dingen) wat van te maken? Misschien moet ik het in een andere branch doen.

Ik heb zelf ook te weinig overzicht over jou project. dus ik zou beginnen met "peephole" verbeteringen. (kleine dingen zonder het grotere geheel te bekijken/zien).

EDIT:
Ik heb ondertussen een nieuwe branch aangemaakt. Ook dat mocht.

Ik ga even aan mijn eigen project werken, morgen hoop ik even tijd voor de jouwe te hebben.

Ik /denk/ dat jou project, voor zover ik het nu gezien heb, in zo'n 500 regels moet kunnen. En met 10x minder regels is het 10x overzichtelijker.

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

Golden Member

ik denk dat al die manuals, behoorlijk op elkaar lijkend zijn.

uiteraard is wijzigen toegestaan

eigenwijs = ook wijs
EricP

mét CE

het zijn 8 steppers, die dan in 1 source code komen (.c).
die stepper moet dan kunnen homen, manual, positioneren.
je krijgt dan ook automatisch veel variabele naar die stepper file toe.
word die code dan niet te groot ?

Eh... Waarom? Heb je wel eens van structs gehoord? (zo nee: huiswerk).
1 variabele waar alles in zit. Klaar. Ohja, je geeft er een pointer aan mee. Zolang de functionaliteit van al die steppers hetzelfde is (of sterk op elkaar lijkt en de verschillen zijn relatief eenvoudig te parameteriseren), is dat uiteraard appeltje-eitje.

dat er 2 steppers tegelijk draaien

ik heb een redelijk groot programma, die eigenlijk veel dingen na elkaar doet en eigenlijk niets tegelijk.

Make up your mind!

Als je het fatsoenlijk schrijft, dan kan het ook 20 steppers 'tegelijk' laten draaien. Let wel: dat vereist wel wat inzicht. En (met alle respect), als ik zie waar je nu mee aan het vechten bent... dan is dat niveau nog lang niet bereikt (niet lullig bedoeld, gewoon constaterend). Hangt er ook vanaf hoe belangrijk 'synchroon' is en hoe onafhankelijk ze moeten zijn. Ik kan me zo voorstellen dat je steppers allemaal dezelfde step lengte hebben. Dan zou je ze allemaal 'klaar' kunnen zetten (in memory opbouwen), dan zeggen 'doe' (ofwel: zet de juiste bitjes op de juiste pinnen). Zet ergens een timer interrupt op scherp (in de ISR haal je de puls weer weg). En ondertussen ga je de volgende ronde voorbereiden. Wacht tot de ISR geweest is. Go! (Dat is in het kort een manier om het te doen, maar, nogmaal, het vereist wel behoorlijk wat begrip).

trix

Golden Member

en dat moet nog komen dus :)
het is nog niet zeker of er 2 tegelijk moeten, maar voor het geval dat.

[Bericht gewijzigd door trix op 3 april 2021 20:14:20 (57%)]

eigenwijs = ook wijs