Re: Ukazka C++ pro děti
ajtservis
info na ajtservis.cz
Středa Březen 31 14:19:08 CEST 2021
asi to mam nejak jinak. zadna tahle slova nepouzivam.
znam jen typy promenych, pak funkce a procedury a ostatni si naklikam na
plochu v graficky podobe :-)
vrchol je mit zvlast data soubor pro ty nektere funkce a procedury a u
exace soubor ini pro zapis a cteni ruznych parametru a vygenerovat html
soubor jako protokol testu.
tohle dohromady klidne 20k radek programu a facha to(delphi 7).
asi tam ty tridy, objety atd. nekde budou, ale zatim jsem je zkoumat
nepotreboval. srovnani vysledku sw, jeho funkce, pouzitelnosti a
velikosti proti novym mladym objektovym programatorum, treba v c#, u nas
ve firme, bylo vzdy plus pro me, tak fakt nevim :-)
jedinej "destruktor" jsem pak asi ja.
t.
Dne 31.03.2021 v 13:53 Pavel Brychta napsal(a):
> :D tak schválně zkusím tu větu zkrátit a věc popsat jinak:
>
> I v Delphi/Pascalu si jistě pamatujete na Constructor Init a Destructor
> Done - při práci s objektem je ho potřeba nejdřív "vytvořit" a pak taky
> občas "zrušit" - k tomuto účelu právě slouží konstruktory a destruktory.
> Konstruktor je volaný ve chvíli, kdy se objekt vytváří - v tomto
> případě, vzhledem k tomu, že objekt je vytvořený staticky a globálně se
> konstruktor volá ve chvíli, kdy probíhá inicializace všech
> statických/globálních objektů, tedy někde ve startup kódu daného
> mikrokontroléru. Pořadí volání konstruktorů určuje kompilátor, co se
> dělo předtím a co se bude dít potom určuje struktura startup kódu.
> Nedokážu tedy říct v jakém stavu se zařízení nachází - lidštěji co už
> nastavené je, co není a teprve se nastavovat bude. V této situaci začnu
> nastavovat přerušovací systém a namířím ho do jiné části kódu, která
> pracuje s proměnnými mimo aktuálně inicializovaný objekt (v jakém jsou
> stavu bůh suď).
>
> No, nějak mi to nevyšlo na kratší popis, ale velmi rád se podívám, jak
> to popsat snadněji ;-)
>
> Pavel Brychta
>
> Dne 31. 03. 21 v 13:37 ajtservis napsal(a):
>> hezky den.
>> sleduji tohle vlakno jako uplny "nececkar". zkusennost jen asm51 a
>> delphi, ale neobjekovym zpusobem, bych rekl :-)
>> prvni vec co me prepadla je jak uz bylo uvedeno "Bohajeho, tohle že je
>> pro děti?".
>> pak prispevek jak postupovat pomaleji, ten ok.
>> a nakonec to zabije veta, v dalsim prispevku "Například aktivace
>> přerušovacího systému ve staticky volaném konstruktoru, kde je cíl
>> volání mimo třídu je snad jasná hovadina pro jakýkoliv názor..." :-)
>> mam asi zasadni problem si pod slovy trida, metoda, objekt,
>> konstruktor atd. predstavit o co v tom programovani vlastne jde ?
>> mam prakticky fumkcni projekty v asm nebo i deplhi/pascalu, ale vubec
>> si je nedokazu v predstavach spojit s timto nazvoslovim, co cemu asi
>> odpovida.
>> nekolik zacatku s lepsima ceckama a objektama, nekolik knizek, navodu
>> a nic. proste se mi pri tech nazvech zablokuje mysleni a konec :-)
>> neni nejaka tabulka ekvivalent tech hruzonazvu, aby clovek treba nejak
>> konvertoval ?
>> je ale videt , ze nekteri si v skladani dlouuuuhych vet z techto
>> nazvu/zaklinadel libuji.
>> asi mam nejakou poruchu mysleni a ne ji porad prekonat :-)
>> te vyhuky pro deti, bych se asi i rad ucastnil, je to nekde dostupne
>> jako stranky ?
>> tomik.
>> ps. treba bych byl dobry experimetalni objekt, jak udelat z hornika
>> programatora :-)
>>
>>
>> Dne 31.03.2021 v 11:51 Jiří Nesvacil napsal(a):
>>> Dobrý den,
>>>
>>> jdete správnou cestou, ale ještě bych to zjednodušil. Před čase jsem
>>> se ptal, zda nechte někdo nějaký on-line kroužek, ale ozval se jen
>>> jeden, zda to děkuji, ale to je málo. Zatím jsme tedy sami
>>> postoupili, ale dělám to jinak a mám následující fáce.
>>>
>>> a/ otevřít notepad a naučit aspoň napsat pár písmenek.
>>> b/ naučit se s myší a okopírovat kousek textu.
>>> c/ připravit kus kód, kde není nic v cizím jazyku, nejsou zde věci,
>>> které se naučili nedávno. Začnu jen s tím, aby se přahazoval řádek v
>>> kódu. Něco jako jazyk "Karel" graficky. Jen přehodit pořadí, aby se
>>> pochopila posloupnost.
>>> d/ další příklad volání metody s hodnotou třeba psun(5);
>>> e/... proměnné, cykly,... zase tímto jednoduchým stylem.
>>>
>>> ... objekty taky jednoduše. Neboli osobně bych vyházel všechny
>>> define, založil to na malé třídě. Začít třeba se základem proměnné v
>>> objektu tzv. instanční. Až následně do složitějších konstrukcí, ale
>>> opět i složité konstrukce na jednoduchém příkladu tj. bez ostatních
>>> věcí co se mohlo zapomenout.... . Je to o tom to dělat pomalu. Možná
>>> máte větší děti nebo toho znají více... .
>>>
>>> Jirka
>>>
>>>
>>> Dne 30.03.2021 v 20:08 Pavel Hudecek napsal(a):
>>>>
>>>> Dobrý den všem,
>>>>
>>>> Udělal jsem malou ukázku programu v C++ pro děti na kroužek, prosím
>>>> o zhodnocení, zda v tom nejsou nějaký nevhodný věci:-)
>>>>
>>>> (celé je to pro Xnano416 mající 1 LED a 1 tlačítko)
>>>>
>>>> Otázka je, jak se to zmrší posláním v mailu…
>>>>
>>>> #include <avr/io.h>
>>>>
>>>> #include <avr/interrupt.h>
>>>>
>>>> #define F_CPU (20000000UL/6UL)
>>>>
>>>> #define LED_bit 5 // LEDka
>>>>
>>>> #define TL_bit 4 // tlačítko
>>>>
>>>> #define TEST_bit 3 // test přerušení osciloskopem
>>>>
>>>> #define TEST_bit2 2 // test čekání osciloskopem
>>>>
>>>> #define TL_jeStisk ((PORTB.IN & (1<<TL_bit)) == 0)
>>>>
>>>> volatile unsigned int ms=0;
>>>>
>>>> volatile unsigned char msSync=0;
>>>>
>>>> void cekej(unsigned int n); // prototyp funkce - jen aby za ním bylo
>>>> vidět jak funkce vypadá
>>>>
>>>> class clTlac { //
>>>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>
>>>> public:
>>>>
>>>> clTlac() { // konstruktor - spusti se pri vytvoreni
>>>> objektu ----------------------------
>>>>
>>>> PORTB.PIN4CTRL = PORT_PULLUPEN_bm;
>>>>
>>>> // zapnout pull-up pro tlačítko
>>>>
>>>> }
>>>>
>>>> void cek() { // cekani na stisk
>>>> --------------------------------------------------------
>>>>
>>>> while(TL_jeStisk) cekej(0);
>>>>
>>>> while(!TL_jeStisk) cekej(0);
>>>>
>>>> }
>>>>
>>>> void stisk(); // udalost stisku tlacitka - jen
>>>> deklarace
>>>>
>>>> bool stav=false;
>>>>
>>>> };
>>>>
>>>> class clLED { //
>>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>
>>>> friend void cekej(unsigned int n);
>>>>
>>>> // friend smí i do private
>>>>
>>>> public:
>>>>
>>>> const unsigned int PMAX = F_CPU / 1000UL;
>>>>
>>>> const unsigned int P1 = PMAX / 100;
>>>>
>>>> clLED() { // konstruktor - spusti se pri vytvoreni
>>>> objektu -----------------------------
>>>>
>>>> PORTB.OUTSET = 1<<LED_bit; //
>>>> nastavit na 1, aby LEDka nesvítila od začátku
>>>>
>>>> PORTB.DIR = (1<<LED_bit) |
>>>> (1<<TEST_bit) | (1<<TEST_bit2) ; // zapnout výstupy pro LED
>>>>
>>>> PORTB.PIN5CTRL = PORT_INVEN_bm; // Invertovat, aby LED svitila pri 1
>>>> (1 v datech)
>>>>
>>>> PORTMUX_CTRLC = PORTMUX_TCA02_ALTERNATE_gc;
>>>>
>>>> TCA0_SINGLE_CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc;
>>>>
>>>> TCA0_SINGLE_CTRLB = TCA_SINGLE_CMP2EN_bm |
>>>> TCA_SINGLE_WGMODE_SINGLESLOPE_gc;
>>>>
>>>> TCA0_SINGLE_CTRLC = 0;
>>>>
>>>> TCA0_SINGLE_CTRLD = 0;
>>>>
>>>> TCA0_SINGLE_PER = F_CPU / 1000UL;
>>>>
>>>> TCA0_SINGLE_INTCTRL = TCA_SINGLE_OVF_bm;
>>>>
>>>> TCA0_SINGLE_INTFLAGS = TCA_SINGLE_OVF_bm;
>>>>
>>>> TCA0_SINGLE_CMP2 = P1;
>>>>
>>>> TCA0_SINGLE_CTRLA |= TCA_SINGLE_ENABLE_bm;
>>>>
>>>> __asm__("sei");
>>>>
>>>> }
>>>>
>>>> void svitit(uint8_t proc) { // rozsvitit na zadane %
>>>> -----------------------------------
>>>>
>>>> TCA0_SINGLE_CMP2 = P1 * proc;
>>>>
>>>> tim = 0;
>>>>
>>>> }
>>>>
>>>> void blikat(unsigned int t, unsigned char h,
>>>> unsigned char l) { // ---------------------
>>>>
>>>> tim = t;
>>>>
>>>> cnt = 0;
>>>>
>>>> pwmH = P1 * h;
>>>>
>>>> pwmL = P1 * l;
>>>>
>>>> TCA0_SINGLE_CMP2 = pwmH;
>>>>
>>>> }
>>>>
>>>> unsigned int procToPWM(unsigned char n) { // prevod
>>>> procent na PWM ---------------------
>>>>
>>>> return P1 * n;
>>>>
>>>> }
>>>>
>>>> private:
>>>>
>>>> unsigned int pwmL = 0, pwmH = PMAX, tim = 0, cnt = 0;
>>>>
>>>> void togglePwm() { // prehodit PWM z low na hi /
>>>> naopak --------------------------------
>>>>
>>>> if (TCA0_SINGLE_CMP2 == pwmH)
>>>>
>>>> TCA0_SINGLE_CMP2 = pwmL;
>>>>
>>>> else
>>>>
>>>> TCA0_SINGLE_CMP2 = pwmH;
>>>>
>>>> }
>>>>
>>>> };
>>>>
>>>> // Tady se podle tříd clTlac a clLED vytvoří objekty Tlacitko a Led.
>>>> To spustí jejich konstruktory.
>>>>
>>>> clTlac Tlacitko;
>>>>
>>>> clLED Led;
>>>>
>>>> void cekej(unsigned int n) { //
>>>> ==============================================
>>>>
>>>> static bool tlacStickPred=false;
>>>>
>>>> __asm__("cli");
>>>>
>>>> ms=0;
>>>>
>>>> __asm__("sei");
>>>>
>>>> while(1) {
>>>>
>>>> PORTB.OUTTGL = (1<<TEST_bit2);
>>>>
>>>> if (msSync==1) { //
>>>> ----------------------------------------
>>>>
>>>> msSync=0;
>>>>
>>>> Tlacitko.stav = TL_jeStisk;
>>>>
>>>> if (Led.tim>0) { // je zapnute blikani
>>>>
>>>> if (++Led.cnt>Led.tim) {
>>>>
>>>> Led.cnt=0;
>>>>
>>>> Led.togglePwm();
>>>>
>>>> }
>>>>
>>>> }
>>>>
>>>> } // if (msSync==1)
>>>>
>>>> if (!tlacStickPred && Tlacitko.stav)
>>>> { // právě bylo stisknuto, vyvolat událost
>>>>
>>>> Tlacitko.stisk();
>>>>
>>>> }
>>>>
>>>> tlacStickPred=Tlacitko.stav;
>>>>
>>>> __asm__("cli");
>>>>
>>>> if (ms>=n) break;
>>>>
>>>> __asm__("sei");
>>>>
>>>> } // while(1)
>>>>
>>>> __asm__("sei");
>>>>
>>>> }
>>>>
>>>> // implementace obsluhy události stisk tlačítka
>>>>
>>>> void clTlac::stisk() { //
>>>> ===================================================
>>>>
>>>> static bool b=false;
>>>>
>>>> // zatímco v mainu se čekat musí, tady se naopak nesmí
>>>>
>>>> if (b) {
>>>>
>>>> Led.blikat(200, 100, 0);
>>>>
>>>> } else {
>>>>
>>>> Led.blikat(200, 60, 30);
>>>>
>>>> }
>>>>
>>>> b = !b;
>>>>
>>>> }
>>>>
>>>> int main(void) { //
>>>> ###########################################################
>>>>
>>>> // tady nic neni: inicializace je v konstruktorech
>>>>
>>>> Led.blikat(100, 70, 20);
>>>>
>>>> while (1) { //
>>>> ---------------------------------------------------
>>>>
>>>> // je jedno co tu je, hlavně že to
>>>> obsahuje čekání
>>>>
>>>> cekej(100);
>>>>
>>>> Tlacitko.cek();
>>>>
>>>> }
>>>>
>>>> }
>>>>
>>>> ISR (TCA0_OVF_vect) { //
>>>> =====================================================
>>>>
>>>> PORTB.OUTTGL = (1<<TEST_bit);
>>>>
>>>> ms++;
>>>>
>>>> msSync=1;
>>>>
>>>> TCA0_SINGLE_INTFLAGS = TCA_SINGLE_OVF_bm;
>>>>
>>>> }
>>>>
>>>> Díky,
>>>>
>>>> PH
>>>>
>>>>
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored bywww.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>>
>>> ------------------------------------------------------------------------
>>> Logo AVG <http://www.avg.com/internet-security>
>>>
>>> Tento e-mail byl zkontrolován na viry antivirovým softwarem AVG.
>>> www.avg.cz <http://www.avg.com/internet-security>
>>>
>>>
>>> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
--
AJT SERVIS s.r.o.
Oparno 65
Velemín
ICO:04203879
DIC:CZ04203879
email:
info na ajtservis.cz
tel.
777 584 558
Další informace o konferenci Hw-list