Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2601:26c:5017:81...–

peter
Assembler › Programování PIC18F97J94
26. 7. 2016   #212108

"Ohmetrem sem to neměřil"
Mikroskop je krasna vec, ale merak je lepsi :)
Ale mozna je jiny problem v zapojeni, treba zbytkovy proud nebo indukovani z pritomnosti cizi soucastky.

Kdyz jsme si my hrali s diodami ve skole, slo o diodove pole, kde v jedne promenne byl ulozen binarni kod, ktere diody maji sviti s v druhe bylo cislo radku. Bylo k tomu treba dodelat casovac, ktery cetl misto z pameti a rychle prepinal cele pole a zobrazoval data. Kdyz jsme chteli pak udelat putujici text, tak se prepisovala jen data na tom miste pameti.
1. se udelal reset nastaveni a celeho systemu
2. pak se vynulovala promena pro zobrazovani
3. Nastavil se cas pro casovac, ktery mel stridat rady a druhy, ktery resil rychlost opakovani celeho kodu
4. Pak se spustili oba casovace, kde ten druhy navic spoustel funkci, ktera mu prekreslovapa ono misto v pameti.
Chci jen rici, ze mi prijde ten tvuj kod cely slozity.

A
o o o o o o B
o o o o o o 
o o o o o o 
o o o o o o 
o o o o o oo o o o o o
o o o o o o 

Nastavilo se do B treba binarne 00100110. Pak se aktivovalo, ze sviti rada A=0. Ze bude svitit 10ms. Pak se zmeni B a prepne A=1 a zas 10ms sviti tato rada. Atd... A pak se to cele opakuje od A=0 treba 5x.
Vyuziva se toho, ze ledka nejakou dobu zhasina (reakcni doba, setrvacnost), takze, kdyz se to zopakuje 5x, tak se bude jevit, ze trvale sviti na dioda treba pismenko A. Kdezto, kdyby ledka reagovala hned, tak uzivatel uvidi jen preblikavat diody a zadne A. Muselo by se to resit pak jinak, vic slozite.

peter
Pascal › Podprogramy: Průběh výpočtu…
26. 7. 2016   #212106

Jj, dneska to s tim opakovanim kodu neplati. Pokud chces mit prehledny program, pise se vse do class. To ale pascal jeste nepodporuje, nejspis.

Globalni promenna plati pro cely program, lokalni jen uvnitr procedury/funkce (po ukonceni funkce obsah zanika).
Dam ti priklad z php, protoze tam se pise primo slovo global. 

function aaa()
{
global $X; 
$Y = 4;
var_dump($X); // vypise 5
var_dump($Y); // vypise 4
}

function bbb()
{
$Y = 4;
var_dump($X); // $X undefined
var_dump($Y); // vypise 4
}

$X = 5;
aaa();
bbb();
var_dump($X); // vypise 5
var_dump($Y); // $Y undefined

Volani hodnotou a adresou.
Kdyz vytvoris promenou, tak pc si nekde v pameti zablokuje cast a propoji adresu pameti na promenou. Vzdy, kdyz pouzijes a := cokoliv, tak na adresu pameti ulozenou pro 'a' zapise data.
A ted, kdyz pouzijes proceduru nebo funkci a predavas ji parametry, tak ji muzes predat hodnotu ulozenou v a nebo adresu pameti, kde je ulozena hodnota pro 'a'.
Pri zadavani do procedury, procedura obvykle klonuje hodnotu promene. Coz za normalnich okolnosti nevadi. Ale kdyz treba pracujes s 1 G, tak zklonovani obsahu chvili trva a taky zabira duplicitne misto. Takze lze predat procedure jen adresu pameti.
a := 5; // a je nazev promenne, alias pro misto v pameti, 5 je hodnota

Vem si treba 1G pameti. Neco mas uz zaplnene. Pri vytvareni 'a' pres var ti prideli pozici v pameti 954331. 'a' bude typ integer, integer je 32 bitove cislo (4 byte), takze zabira pamet
954331, 954332, 954333,  954334
Kdyz to procedura zklonuje, tak mas
a: 954331 .. 954334
procedura promenna x: 974331 .. 974334 (nejake jine misto v pameti, 4 byte)
Klonovani je ale vyhodne, protoze prepsanim 'x' v procedure neprepise 'a' v jine casti programu. Viz globalni a lokalni promene. Prima adresa je jako globalni, klonovani je lokalni promena.

Jak se to resi v pascalu nevim, ale pro php to vypada takto

function xxx($x) {$x=7;} hodnota, lokalni
function yyy(&$y) {$y=8;} adresa, globalni
$a = 6;
var_dump($a); // vypise 6
xxx($a);
var_dump($a); // vypise 6
yyy($a);
var_dump($a); // vypise 8

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý