STM32 cube ide

trix

Golden Member

nou pffffffh ;) mijn versie beheer lijkt te werken.
gitkraken geïnstalleerd en gekoppeld aan github.
ik wijzig iets in stm32cub
- copieer de volledige map vanuit workspace_1.8.0 naar de doelmap van
gitkraken
- do een pull
- zie de wijzigingen in gitkraken (het gewijzigde in groen lijnen en de oude
in rode lijnen
- doe een push
- en het gewijzigde staat in github (met de comentaar wat ik in gitkraken
meegaf.
was wel wat uitzoek werk.

moet nu nog wel uitzoeken hoe ik naar een oude versie terug ga.
en of ik op deze manier ook op 2 laptops kan werken, 1 staat in de schuur en de ander in huis. de workspace_1.8.0 staat wel in dropbox.

eigenwijs = ook wijs
trix

Golden Member

ik ben aan het kijken hoe ik de code terug krijg in cubeide.
doe ik dit vanuit gitkraken of github ?
en hoe gaat dat ongeveer ?
tnx.

edit: ik zie nu dat ik in github (op internet) de mogelijkheid heb om de code te downloaden naar "github desktop" (die je dan eerst moet instaleren).
maar "github desktop" is denk ik een verglijkbaar programma als gitkraken.
klopt dit ?
een andere optie is, om te downloaden als een ZIP file.

eigenwijs = ook wijs

heb je al eens een git tutorial op youtube gevolgd?
Het moet zo werken dat als je in gitkraken een andere commit uitchecked, al je files in je lokale repository worden aangepast. Dus ook automatisch je files in stm cube ide.
Vergeet heel die github website, die heb je helemaal niet meer nodig als je het gewoon goed hebt ingericht.

Heb je de betaalde versie van gitkraken? want volgens mij kun je met de gratis versie helemaal geen cloud based repos zoals bitbucket of github gebruiken. (Dat is in jouw geval ook niet persee nodig),
wat heb je over voor een mini cursusje GIT? via teams ;)

bprosman

Golden Member

Als je met een en de zelfde persoon aan code werkt is de toegevoegde waarde van GitHub oid mi zeer beperkt. Zelf gebruik ik nog de "ouderwetse" manier van versiebeheer door namen van sourcefiles, of schema's / tekeningen gewoon een datum/tijd in de bestandsnaam mee te geven. Synchen over/naar andere machines gaat automatisch via OneDrive.

De jongere generatie loopt veel te vaak zijn PIC achterna.

Ook als je alleen werkt Bram is git een uitkomst om met 1 klik naar een vorige versie van je complete project kan. Een remote repository heb je dan weer niet perse nodig, al is het qua backup vaak wel handig

bprosman

Golden Member

GitHub heeft overigens zelf ook een "Learning Lab" https://lab.github.com/githubtraining/introduction-to-github
https://lab.github.com/lmachens/git-and-github-first-timers

@Stijn, niet dat ik jou je Teams sessie niet gun hoor :-)

[Bericht gewijzigd door bprosman op woensdag 16 maart 2022 11:43:46 (35%)

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

Golden Member

nee ik heb nog geen betaalde versie van gitkraken, de trail loopt nog.

Op 16 maart 2022 08:28:16 schreef bprosman:
Als je met een en de zelfde persoon aan code werkt is de toegevoegde waarde van GitHub oid mi zeer beperkt. Zelf gebruik ik nog de "ouderwetse" manier van versiebeheer door namen van sourcefiles, of schema's / tekeningen gewoon een datum/tijd in de bestandsnaam mee te geven. Synchen over/naar andere machines gaat automatisch via OneDrive.

ik wil voor mij de simpelste manier van versie beheer, en als extra zet ik de back-up in dropbox, voor het geval de laptop crasht of gestolen word, en ik kan dan hoop ik ook op 2 laptops werken.

dus ik denk dat ik ook die ouderwetse manier ga toepassen, alleen wil dat bij cubeide nog niet lukken.
voorheen gebruikte ik een AVR en werkte ik met atmel-studio, daar kon ik het programma van de vorige keer kopiëren in een nieuwe map met een nieuwe datum. zo had ik allemaal mappen met een datum.
alleen wil dat bij cubeide nog niet lukken, ik kan natuurlijk alles in een map kopiëren, maar vanuit die map alles weer in cubeide krijgen en weer werkend, dat wil nog niet lukken.
hier een plaatje hoe zo'n backup er bij mij dan uit ziet, en vanaf hier wil ik graag naar een werkend programma in cubeide.

eigenwijs = ook wijs

Dat is zo 1980...
Niet te snel opgeven. Git is echt een verademing als je er je even in verdiept.

Ik gebruik zelf "sourcetree" https://sourcetreeapp.com dat werkt redelijk goed.

Het voordeel is dat je van een file versie, zelfs stukjes code kunt terugzetten ipv de hele file als je die verkl**t hebt.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
trix

Golden Member

eigenwijs = ook wijs

Sourcetree is dus net als gitkraken een git cliënt. Sourcetree is wel gratis, maar de werkwijze is gelijk. Ipv github heb je ook gitlab of bitbucket als repository host.

trix

Golden Member

maar weet iemand wellicht ook, hoe ik van die losse bestanden die ik gepost heb weer een werkend cubeide code verkrijg ?

eigenwijs = ook wijs

Je moet dus gewoon heel die map 6-3-2022-sravo in je git repository zetten.
Daar zit alles in wat je moet hebben

Dat kan je testen door de map te copieren naar een nieuwe naam met je verkenner en dan de cube-ide daarheen te verwijzen.

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

Golden Member

vriendelijk bedankt voor de input, ik ben even aan het "rommelen" geweest en ik heb het denk ik voor mekaar op de meest eenvoudige manier.

file -> import -> general -> projects from folder or archive
vervolgens kan je bij: import source, directorie naar je map browsen.
selecteren en hij komt onder project explorer terecht.

dit is de meest eenvoudige manier van project beheer die ik kan wensen, voorlopig meer dan voldoende voor mijn toepassing.
in geval van gecrasht/gestolen laptop, heb ik ook in dropbox een back up (dat gaat automatisch).

[Bericht gewijzigd door trix op donderdag 17 maart 2022 16:19:38 (100%)

eigenwijs = ook wijs
trix

Golden Member

ik ga hier maar verder, omdat hier al gesproken is over "includen" en dergelijke.
dat "includen" gaat goed, alleen komt de compiler met een warning die ik niet goed kan plaatsen.

in main.c declareer ik een variabele: LX_to_back voor de main loop.
die kan ik dan gewoon gebruiken in de main.C.
deze variabele geef ik ook mee als parameter aan de funcie: stepper_manual en die gebruik ik in stepper_manual.c
ik prototype deze functie keurig in stepper_manual.h

als ik dit compile krijg ik de warning:
/Core/Src/stepper_manual.c:30:6: warning: type of 'RX_to_front' defaults to 'int' [-Wimplicit-int]

op de een of andere manier weet hij bij stepper_manual.c niet dat LX_to_back is gedeclareerd in main.c en zit die dan maar default naar een int.
wat toevallig goed uitkomt, maar waarom komt hij daar mee ?

eigenwijs = ook wijs

Nee, de variabele declaratie in main declareert 1 variabele, bij je functie-definitie declareer je in het "prototype" een nieuwe variabele. En als je daar geen type opgeeft, dan gaat ie standaard van "int" uit. 50 jaar geleden was "int" het meest gebruikelijk en vonden ze het nutteloos om dat steeds te typen.

code:



int a, b;

int somefunc (int a)
{  
   printf ("a=%d, b = %d.\n", a, b);
}
int main (int argc, char **argv)
{
  int b;

  if (argc > 1) b = atoi (argv[1]);
  else b=23;

  a = 45;

  somefunc (b);
  somefunc (a);
  somefunc (56);
}

Er zijn globale variabelen a en b. Variabele a wordt in main gebruikt. B wordt in de functie somefunc gebruikt. Daarnaast is er een argument a op de functie, dat is een locale naam (gedraagt zich als een variabele!) voor wat je hebt meegegeven aan de functie. Toevallig heet die "a".

Verder is er nog in de main functie een locale variabele "b" die het in main onmogelijk maakt om de globale variabele "b" te benaderen.

Hetzelfde geldt voor de parameter "a" die het in de "somefunc" onmogelijk maakt om de globale variabele "a" te benaderen.

Hier is PRECIES hetzelfde programma, maar dan uitgeschreven wat de verschillende variabelen zijn.

code:



int a1, b1;

int somefunc (int a2)
{  
   printf ("a=%d, b = %d.\n", a2, b1);
}
int main (int argc, char **argv)
{
  int b2;

  if (argc > 1) b2 = atoi (argv[1]);
  else b2=23;

  a1 = 45;

  somefunc (b2);
  somefunc (a1);
  somefunc (56);
}

De bedoeling is dat je functies kan schrijven waarvan je niet hoeft te weten hoe de argumenten heten. Wel wat ze DOEN, maar niet hoe ze heten.

Dus stel dat ik een "calc_dist (x, y);" functie nodig heb. Dan schrijf ik: "calc_dist (float x, float y) { return (sqrt(x*x+y*y));}" (effe op 1 regel).

Als jij nu in je main een x, y en z coordinaat nodig hebt, dan mag je die gerust x, y en z noemen, dat een fucntie die ik geschreven heb door jou gebruikt wordt en toevallig ook x en y gebruikt hoef je helemaal niet te weten. En als jij een afstand in het y-z vlak wil uitrekenen kan je zomaar calc_dist (y, z) aanroepen. Geen enkel probleem.

[Bericht gewijzigd door rew op zondag 3 april 2022 09:11:26 (32%)

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

Op 2 april 2022 16:42:53 schreef trix:

in main.c declareer ik een variabele: LX_to_back voor de main loop.
die kan ik dan gewoon gebruiken in de main.C.
deze variabele geef ik ook mee als parameter aan de funcie: stepper_manual en die gebruik ik in stepper_manual.c
ik prototype deze functie keurig in stepper_manual.h

Een "globale" variabele die in een c file gedefinieerd is, is nog niet zichtbaar in andere c files ! Je kan wel deze variabele zichtbaar maken door een declaratie met het keyword "extern". Dan weet de compiler dat het geen "nieuwe" variabele is, maar een globale variable die ergens anders is gedefinieerd. Dus in jouw toepassing
main.c
int LX_to_back=0;

stepper_manual.c
extern int LX_to_back;

Opgelet, in main.c is dit dus een "definitie", in stepper_manual.c is dit een "declaratie", dusmag je niet opnieuw "=0" gebruiken !
Een "definitie" mag maar éénmaal voor elke variabele, een "declaratie" kan meermaals in c.

trix

Golden Member

het heeft dus alles te doen met de scoop van een variabele.
een en ander is dus bedoeld om er voor te zorgen dat wanneer een andere programmeur er een source file aan toevoegt deze zich niet druk hoeft te maken over de namen van de variabelen.

extern int LX_to_back;
werkt niet, die LX_to_back word in een functie gebruikt die in stepper_manual.c staat.
is het sowieso niet de bedoeling om variabelen in de header files te declareren ? dat werkt trouwens ook niet.

eigenwijs = ook wijs
trix

Golden Member

ik heb dus:

main.c

c code:


int  LX_to_back  ;

int main (void)
{
   while (1)
   {
     if (Rx_Data[5] == 0x50)  LX_to_back  = 1;
     stepper_manual(LX_to_back);
   }
}

stepper_manual.h

c code:


void stepper_manual(LX_to_back);

stepper_manual.c

c code:


void stepper_manual(LX_to_back)
{

 if (LX_to_back == 1)   { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   }


}

verkort voor de duidelijkheid, in werkelijkheid zijn er meer parameters met de functie mee gegeven.

eigenwijs = ook wijs

Als je deze variabele meegeeft als parameter, moet deze bij de oproep van deze functie de variabele "globaal" gekend zijn. In welke c-file roep je deze functie dan op ?

trix

Golden Member

in main.c (bovenste blokje van mijn vorige post).
ik heb daar nog een stukje code toegevoegd (ook verkort).
edit: ook bij stepper_manual.c

[Bericht gewijzigd door trix op zondag 3 april 2022 11:24:27 (13%)

eigenwijs = ook wijs

Op 3 april 2022 10:57:24 schreef trix:
ik heb dus:

main.c

c code:


int  LX_to_back  ;

int main (void)
{
   while (1)
   {
     if (Rx_Data[5] == 0x50)  LX_to_back  = 1;
     stepper_manual(LX_to_back);
   }
}

stepper_manual.h

c code:


void stepper_manual(LX_to_back);

stepper_manual.c

c code:


void stepper_manual(LX_to_back)
{

 if (LX_to_back == 1)   { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   }


}

verkort voor de duidelijkheid, in werkelijkheid zijn er meer parameters met de functie mee gegeven.

Precies! Zo had ik het begrepen, op basis van je foutmelding en omschrijving. Dat jij van plan bent om iedere keer de integer "LX_to_back" aan de functie mee te geven dat weet de compiler niet, dat kan hem niet schelen, dat hoeft ie niet te weten enz.

Bij aanroep doe jij nu meestal de "lx_to_back" variabele meegeven.

Het feit dat je nu je code post betekent dat je nog steeds niet begrijpt hoe het werkt.

Bij:

c code:

void stepper_manual(LX_to_back)
{
 if (LX_to_back == 1)   { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   }
}

maakt de compiler een functie aan met 1 argument waarvan het argument binnen de functie de naam "LX_to_back" krijgt.

Als je die een andere naam geeft begin je het misschien te begrijpen:

code:

void stepper_manual(int back)
{
 if (back == 1)   { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   }
}

Dit is net als hierboven een locaal naampje voor "wat de aanroeper tussen de haakjes zet". Het heeft niets met de andere variable "LX_to_back" te maken.

RP6conrad kraamt onzin uit. De vraag gaat over een foutmelding die komt bij het declareren van de functie-zonder dat er een type-aanduiding is.

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

Golden Member

inderdaad die andere naam maakt het een en ander voor mij duidelijker, nu "match" het meer met jou eerdere post.
bedankt, kijk het straks even aandachtiger door, moet nu even weg.

eigenwijs = ook wijs
trix

Golden Member

getest met een andere naam voor de parameter mee gegeven aan de functie
dit hieronder compileert zonder warnings en errors.

main.c

c code:


int  LX_to_back  ;

int main (void)
{
   while (1)
   {
     if (Rx_Data[5] == 0x50)  LX_to_back  = 1;
     stepper_manual(LX_to_back);
   }
}

stepper_manual.h

c code:


void stepper_manual(int back);

stepper_manual.c

c code:


void stepper_manual(int back)
{

 if (back == 1)   { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   }


}

[Bericht gewijzigd door trix op zondag 3 april 2022 18:46:57 (100%)

eigenwijs = ook wijs