Pogramuje tu niekto v MPLAB X IDE v cecku?

C,C++,C#

Moderátori: psichac, Moderátori

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 04 Jún 2022, 00:29

Cavte,

Najde sa tu niekto kto robi v MPLAB X IDE a citi sa v tom doma?

Potrebujem vysvetlit par veci, co neviem najst na internete. Aby sme nezabijali cas vypisovanim, a je to rychlejsie, preferoval by som rozhovor cez skype, alebo nieco podobne v com sa da nazdielat PC orazovka (ja budem zdielat). Ak vas cas je drahy tak tu "vyuku" aj zaplatim. To nie je problem. Moja priorita je usetrit cas.

Dajte mi prosim vediet tu alebo cez SS.

Dakujem.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
Andy99
Stály člen
Stály člen
Príspevky: 339
Dátum registrácie: 05 Mar 2008, 00:00
Bydlisko: BA
Vek: 35

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa Andy99 » 04 Jún 2022, 11:07

Ahoj,

Ja by som sa chcel spýtať, či ti nie je jasné niečo konkrétne alebo všeobecne. Vlastne je to len NetBeans IDE nad kompilátorom. V konečnom dôsledku asi jediná výhoda je možnosť natívneho debugovania.
Ak by si mal nejaké konkrétne otázky, môžme ich prípadne doriešiť cez SS.

Andy
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 04 Jún 2022, 15:28

Robim projekt do skoly a zaroven sa ucim C-ko (skocil som do vody a ucim sa plavat) a tlaci ma cas (ako vdy). Niekedy mam zopar otazok a potreboval by som ich vysvetlit a cez forum by to okolo vela vypisovania a problem ktory sa da prediskutovat do 15 min (popripade ukazat cez nazdielanu obrazovku), by cez forum trvalo 2-3 dni nekonecneho vypisovania, pretoze pocas vysvetlovania sa objavia dalsie podotazky a toto sa v rozhovore > da ihned vysvetlit.

Napr. teraz konkretne by som potreboval vysvetlit ako sa v MPLAB X IDE vytvori funkcia ktora sa ulozi mimo main.c ale vola sa v main.c Na youtube kazdy ma volane funkcie v main.c Lenze ja takych funkcii budem mat viac a kvoli prehladnosti main.c ich tam nechcem mat, tak to chcem dat do samotnych xxx.c xxx.h suborov, popripade istu skupinu funkcii do jedneho xxx.c a xxx.h

Povedal by som co potrebujem vysvetlit, dohodneme si cas, a ked treba ukazat priamo v PC cez neaky program (napr. teamviewer) sa to vysvetli. A samozrejme nechcem to len za dakujem.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
Andy99
Stály člen
Stály člen
Príspevky: 339
Dátum registrácie: 05 Mar 2008, 00:00
Bydlisko: BA
Vek: 35

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa Andy99 » 04 Jún 2022, 16:02

Aj som si myslel, ze to nebude mat suvis len s MPLAB, ale konkretne Cckom. Nakolko ako som spominal, MPLAB je len IDE a samotne programovanie mozes robit v comkolvek inom.
Ok, tak sa mozes ozvat cez SS a doriesime zvysok ;).
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 04 Jún 2022, 18:04

Diki moc, ozvem sa coskoro.

Teraz robim plosak na RTC. Prave som sa 2 hodiny trapil ako vytlacit negativ z Eagle pouzitim CAM procesora. Uz som to asi rok a pol nerobil a zabudol som. Uz som na to prisiel. Neobi sa to cez CAM procesor, ale cez export image. Asi mi pamat starne.... :)
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa balu » 04 Jún 2022, 22:11

romiadam napísal:
04 Jún 2022, 15:28
Napr. teraz konkretne by som potreboval vysvetlit ako sa v MPLAB X IDE vytvori funkcia ktora sa ulozi mimo main.c ale vola sa v main.c Na youtube kazdy ma volane funkcie v main.c Lenze ja takych funkcii budem mat viac a kvoli prehladnosti main.c ich tam nechcem mat, tak to chcem dat do samotnych xxx.c xxx.h suborov, popripade istu skupinu funkcii do jedneho xxx.c a xxx.h
Cčko překládá program postupně, jak prochází zdrojový soubor. Tudíž pokud napíšeš kód takhle :

Kód: Vybrať všetko

int main( void )
{
    MojeFunkce();
}

void MojeFunkce( void )
{
    // kód funkce
}
tak Ti překlad nebude fungovat.
Musíš doplnit tzv. funkční prototyp :

Kód: Vybrať všetko

void MojeFunkce( void );
A to na před funkci main, kde už ji voláš. Prostě musíš překladači říct, že někde ta funkce je a takhle vypadá.
Výsledek pak vypadá nějak takhle :

Kód: Vybrať všetko

void MojeFunkce( void );

int main( void )
{
    MojeFunkce();
}

void MojeFunkce( void )
{
    // kód funkce
}
Tak a teď co potřebuješ :

Kód: Vybrať všetko

void MojeFunkce( void )
{
    // kód funkce
}
můžeš umístit do souboru "SouborMychFunkci.c" a vložíš ho do seznamu zdrojových souborů projektu.
Pak máš 2 možnosti :
1 - Funkční prototyp necháš tam, kde je. To je však řešení jen pro případ, že víš, že tyhle funkce už nikdy nikde nepoužiješ. Což je nepravděpodobné hlavně v případě, že si třeba píšeš knihovnu pro nějaký displej apod.
2 - Vložíš funkční prototyp do souboru "SouborMychFunkci.h" a ten vložíš pomocí direktivy #include do programu.

Soubory *.c a *.h bývá zvykem nechat vždy u sebe.

Jednotlivé soubory pak vypadají nějak takto -
Main :

Kód: Vybrať všetko

#include "SouborMychFunkci.h" // s uvozovkama

int main( void )
{
    MojeFunkce();
}
SouborMychFunkci.h :

Kód: Vybrať všetko

void MojeFunkce( void );
SouborMychFunkci.c :

Kód: Vybrať všetko

void MojeFunkce( void )
{
    // kód funkce
}
A pozor ! Direktiva #include má dva různé tvary :
1. #include "soubor.h"
2. #include <soubor.h>

Rozdíl je v tom, že #include s uvozovkama hledá nejdřív v adresáři projektu a pak teprve v knihovnách překladače, tak #include s <> hledá pouze v knihovnách překladače.

Podobné je pak použití proměnných, myslím hlavně těch globálních, použitých ve tvých funkcích :

SouborMychFunkci.c :

Kód: Vybrať všetko

int PromennaSouboruMychFunkci;
int PromennaViditelnaJenVTomtoSouboru;

void MojeFunkce( void )
{
    // kód funkce
    PromennaSouboruMychFunkci = něco ... ;
    PromennaViditelnaJenVTomtoSouboru = něco ... ;
}
Abys tuhle proměnnou mohl použít i jinde, musíš překladači říct, že ta proměnná někde existuje :
SouborMychFunkci.h :

Kód: Vybrať všetko

extern int PromennaSouboruMychFunkci;

void MojeFunkce( void );
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1146
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa Atlan » 04 Jún 2022, 23:03

A za chvilu je tu ze mu nejde priradit hodnota k tej premenej :D
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 05 Jún 2022, 18:36

alu,

dakujem pekne za vystiny vyklad. Ten zaciatok som vedel z ucebnic C, ale ten koniec mi pomohol.

Takze to zopakujem, ci som to pochopil:

v main c chcem vypocitat vykon R=U/I kde pre tento priklad bude U a I integer a R moze byt integer ale aj float. A chcem to zavolanim funkcie Vyp_Vykonu.

v main.c pred void main(void) definujem globalne premenne

Kód: Vybrať všetko

float R;
uint8_t U;
uint8_t I;

void main(void)
{
R = Vyp_Vykonu(U, I)	// zavolanie funkcie vypocet vykonu
}
vytvotim si v projekte vykon.h subor kde napisem toto:

Kód: Vybrať všetko

#ifndef VYKON_H
#define	VYKON_H
float Vyp_Vykonu (int a, int b);
#endif
a este vytvorim si v projekte vykon.c subor kde napisem toto:

Kód: Vybrať všetko

int a;	// lokalna premenna
int b;	// lokalna premenna
float Vyp_Vykonu (int a, int b);
return (float)(a / b);
Takto by to slo? Ak by bol vysledok integer, nebude to vadit ze ho vykon.c vracia ako float? ALebo treba to neako inak?
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa maskrtnik01 » 05 Jún 2022, 18:47

V main.c chýba include.

Ten posledný je syntaktický nezmysel. Je tam prototyp funkcie a o riadok neskôr neočakávaný return.

Kód: Vybrať všetko

float ComputePower(float u, float y)
{
 return u/i;
}
Lokálne premenné sa deklarujú vnútri tela funckie, inak je to stále globálna premenná akurát deklarovaná v inom súbore.

int / int je int, potom sa to pretypuje. Syntakticky je to dobre, akurát výsledok bude kus iný ako očakávate. Treba pretypovať argumenty ešte pred ich vydelením(hoc aj dátový typ argumentov ako vyššie).
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 05 Jún 2022, 20:07

Nechapem,

To sa neda v urobit ze Integer / integer = float? kvoli uspore pamate

Ak mam U a I definovany ako integer a vysledok je float tak to musim definovat U a I ako float?

Cislo U=20 a I=6 ako integer zoberie 1+1byte z pamate. Float is potrebuje 4 +4 byte teda az 8 byte. Ako sa da usetrit pamat.

EDIT:
nasiel som to tu: https://stackoverflow.com/questions/162 ... et-a-float
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
Andy99
Stály člen
Stály člen
Príspevky: 339
Dátum registrácie: 05 Mar 2008, 00:00
Bydlisko: BA
Vek: 35

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa Andy99 » 05 Jún 2022, 20:52

Bavíme sa o 8-bitovom MCU, hej? Tam je float pomerne drahý, ak to nemá FPU. Nie som si istý načo chceš použiť float (väčšinou sa tomu v takomto prípade snaž vyhnúť), ale bežne sa to robí tak, že sa drží desatinná časť oddelene. Pracuje sa s tým pomocou / a %. Pripadne variant dva, kde výsledok pred return-om prenásobíš 1.0 .
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa maskrtnik01 » 05 Jún 2022, 21:29

výsledok pred return-om prenásobíš 1.0
Ja som to myslel takto:

Kód: Vybrať všetko

float ComputePower(int u, int i)
{
	return (float)u / y;
int / int spraví jednoducho celočíselné delenie, to čo by bola desatinná časť sa stratí. Keď sa to pretypuje na float, vykoná sa úplné delenie.
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa balu » 05 Jún 2022, 21:51

K souboru "vykon.c" :

Kód: Vybrať všetko

int a;	// lokalna premenna
int b;	// lokalna premenna
float Vyp_Vykonu (int a, int b);
return (float)(a / b);
Proměnné "a" a "b" se nedefinují, protože "a" a "b" jsou parametry funkce Vyp_Vykonu a ty se deklarují v této funkci.

float Vyp_Vykonu (int a, int b); - tohle je prototyp funkce (se středníkem). Takhle napsaná patří do .h souboru (to máš správně).

Tady ji musíš zapsat :

Kód: Vybrať všetko

float Vyp_Vykonu (int a, int b)
{
    return (a/b);
}
Co se typů týká, tak INT *(/) INT je vždy INT.

Počítání s float u jednočipů je velice náročné, tak se používají různé triky a počítá se s INT 16 nebo INT 32 - podle toho jak velký, případně jak přesný výsledek potřebuješ.
Například 1,37 zapíšeš jako 137 (INT) a víš, že máš 2 desetinná místa.
Pokud pak násobíš 1,37*2,59 - pak násobíš 137*259 a víš, že dostaneš 4 desetinná místa, takže výsledek ještě musíš vydělit 100.
1,37*2,59 = 3,5483 a na 2 desetinná místa je to 3,55 (se zaokrouhlením)
Výpočet :
137*259 = 35483 - abysme se dostali na požadovaný tvar, musíš přišíst 50 a vydělit 100.
35483 + 50 = 35533 / 100 = 355 -> 3,55.

Když dělíš, musíš počítat s tím, že potřebuješ získat výsledek na 2 desetinná místa.
1,37/2,59 = 0,52895 => 0,53
137/259 -> 137 je třeba dostat na 4 desetinná místa a kvůli zaokrouhlení přidat 50
Tedy 13750/259 = 53 => 0,53.

Pozor - u záporných čísel musíš těch 50 odečítat.
U sčítání a odečítání posun řádu řešit nemusíš.

Doufám, že jsem to vysvětlil dostatečně jasně.
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 05 Jún 2022, 23:16

Super triky pre zjednodusenie pocitania. Len nechapem preco prave 50. To je konstanta pre hocijake cisla alebo ta 50-ka od niecoho zavisi? Medzitym skusim na to prist sam.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa balu » 05 Jún 2022, 23:52

Ta 50-ka je polovina 100-ky, kterou dělíš a pomáhá ke správnému zaokrouhlení čísla :
15678/100 = 156 (celé samozřejmě v INT) => 1,56
Jenže 1,5678 zaokrouhleno na 2 desetinná místa je 1,57 a ne 1,56
(15678+50)/100 = 15728/100 = 157 => 1,57

Když budeš počítat s jedním desetinným místem násobíš/dělíš 10 a zaokrouhluješ přičítáním/odečítáním 5.
Když budeš počítat se třemi desetinnými místy násobíš/dělíš 1000 a zaokrouhluješ přičítáním/odečítáním 500.

atd.

A ještě něco, co vyplinulo z diskuze :
je rozdíll mezi return (float)(a / b); a return (float)a / b;.

return (float)(a / b); - vydělí se a/b => INT/INT => výsledek je INT a ten se převede na FLOAT - ztráta desetinných míst.
return (float)a / b; - nejdříve se a převede na float a pak se dělí FLOAT/INT => výsledek je FLOAT - desetinná místa zůstávají.

Pokud začínáš s C, pak Tě ještě upozorním na jednu věc - pořadí operací :
Vyzkoušej si B = ++A; a pak B = A++;.

B = ++A; => provede se A=A+1, pak B = A.
B = A++; => provede se B = A, pak A=A+1.

Pár důležitých rad pro přehlednost a čitelnost programu
1) Proměnné nazývej smysluplně :
int i; vs. int Idx; - u Idx víš, že jde o nějaký index (třeba pro smyčku apod.)
int d; vs. int DelayCountdown; - pokud nazveš proměnnou d, tak za rok nebudeš vědět, co má ta proměnná na starosti, pokud jí nazveš DelayCountdown, tak víš, že je to odpočítávání pro nějaké zpoždění.

2) Nikdy nepiš konstanty přímo do programu, ale definuj je na začátku :
Podíváme se na (15678+50)/100 z textu výše. Můžeš to napsat tak, jak jsem to uvedl v příkladu nebo

Kód: Vybrať všetko

#define NasobitelDelitel (100)
#define Zaokrouhleni (NasobitelDelitel/2)
Stačí přepsat jedno jediné číslo a máš hotovo...

Výsledek by pak vypadal místo (15678+50)/100 takto (15678+Zaokrouhleni)/NasobitelDelitel.
A představ si, že budeš chtít změnit počet desetinných míst ve výpočtech. Nemusíš hledat v celém programu, kde je použité 100 a 50, nespleteš se a ne každá 100 nebo 50 bude ta, co chceš změnit. S nadefinovanýma konstantama se změní co chceš v celém programu a jen tam, kde je to správně.

Další tipy zase až někdy příště.
0

Používateľov profilový obrázok
mac26
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1298
Dátum registrácie: 01 Feb 2010, 00:00
Bydlisko: Martin

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa mac26 » 07 Jún 2022, 16:20

len tak mimo toho co uz bolo spomenute:
nikoho netankuje ze chceme pocitat vykon ako P=U/I? :D
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa maskrtnik01 » 07 Jún 2022, 16:37

void main(void)
{
R = Vyp_Vykonu(U, I) // zavolanie funkcie vypocet vykonu
}
Tu je vidno, že tá funkcia má v skutočnosti počítať odpor, v takom prípade vzorec sedí.
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Pogramuje tu niekto v MPLAB X IDE v cecku?

Príspevok od používateľa romiadam » 08 Jún 2022, 13:21

mac26 napísal:
07 Jún 2022, 16:20
len tak mimo toho co uz bolo spomenute:
nikoho netankuje ze chceme pocitat vykon ako P=U/I? :D
Ospravedlnujem sa.
V programe pocitam vykon, lenze otazka skor bola mierena na delenie dvoch integerov (ci z toho dostanem float) a tak som to doplietol.Programoval som vykon P = U * I a potom ma napadlo ze ako sa to robi pri deleni, tak som si otvoril forum a v otazke som zacal pisat vykon lenze som sa chcel pytat na delenie a prehodilo sa mito v hlave a neskontroloval som si to po sebe.

Takze slovo vykon nahradte odporom.

R = Vyp_Odporu(U, I)
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok