SDS-C popis jazyka

Z onlinetechnology.cz

Přejít na: navigace, hledání
Tato stránka popisuje programovací jazyk SDS-C, který je dostupný na vybraných zařízeních SDS. Některá zařízení používají FULL-C, pro který máme návody jinde na této WiKi.

Jazyk SDS-C má vyhrazené proměnné a příkazy. Přes tyto proměnné a příkazy ovládá váš SDS-C program zařízení SDS.

Obsah

Funkce

Seznam systémových funkcí (které poskytuje zařízení SDS-C) naleznete zde.

Samozřejmě že si můžete definovat své vlastní uživatelské funkce (pokud jejich název nebude kolidovat s vyhrazenými slovy).

#define

Můžete si zpřehlednit program a především centralizovat řadu funkcí, a to pomocí deklarace #define.

Zejména pokud máte často se opakující odkaz v celém programu (např. často ovládáte např. třetí relé z mnoha míst v programu), pak je výborné si program zpřehlednit, a zejména, pokud se pak rozhodnete ve zmíněném příkladu přejít z třetího na první relé, mít možnost tuto změnu provést jediným zásahem na jediném místě.

#define RELE sys[231]

Takto teď kdekoliv v programu, kam napíšete RELE (pozn. kromě ohraničených textů a komentářů), bude automaticky vloženo sys[231] (nebo cokoli jiného co si pak sami definujete).

Příklad:

 RELE = 1; //zapne rele

Všechny názvy musí být kompletně velkými písmeny.

Pozor - lze použít jen jednu úroveň (tzn. nelze vnořit define do define).

Vyhrazené proměnné SDS-C

Vyhrazené proměnné v SDS-C jsou tzv. systémové proměnné. Jejich obsah odpovídá aktuálnímu fyzickému stavu systému, tj. HW zařízení. Stejně tak lze pomocí specifických systémových proměnných zasahovat i do konfigurace, měnit textové údaje ve webovém rozhraní atd.

Kompletní seznam naleznete zde.

Uživatelské proměnné

Programátor si může v SDS-C definovat své vlastní proměnné.

Použije se pro tento účel klíčové slovo var. Toto je jediný možný definiční typ pro proměnnou, akceptovaný v SDS-C.

Příklad:

 var pocet;

Definuje proměnnou pocet, typ 32-bitů signed (to znamená: 1 bit pro znaménko a 31 bitů pro číslo).

V této verzi je možné používat pouze 32-bit/signed. Proto se do programu nepíše typ proměnné, ale jen var a zvolený název.

Co a jak když chcete pracovat s desetinnými čísly? Snadná pomoc:

 
 var a,b,x, celaCast, desetinnaCast, preciznost;
 
 a = 5;
 b = 2;
 
 //ted chci x = a/b, tj x=5/2, tj. x=2.5
 //ale mam jen celociselne deleni...
 
 preciznost = 10; //nebo 100, 1000, ... jak moc je potreba
 
 x = (a * preciznost) / b;  //posuneme tedy desetinnou carku nasobenim 
 
 // x je ted 25, takze
 
 celaCast = x / preciznost;
 desetinnaCast = x % preciznost;
 
 //vysledek -> celaCast = 2, desetinnaCast = 5  
 
 echo('vysledek = ',celaCast,'.',desetinnaCast);   //-> vypise: vysledek = 2.5

Texty

Jazyk SDS-C umožňuje pracovat pouze s pevně definovanými, konstantními (tj. dále neměnnými) texty.

Jazyk SDS-C má tedy z hlediska práce s texty řadu omezení, vůči jazyku FULL-C.


Všechny texty (jako konstanty) si definuje programátor. Definice lze provést kdekoliv.

Např.

 smtp_send('joe@foo.bar', 'subject', 'Další definovaný text, hodnota i=', i, ' a další text...');


Texty lze předat pouze jako parametry funkcí a do některých systémových proměnných, a dále už nikam jinam.

Vyhrazené klíčové slova

V jazyku SDS-C je řada vyhrazených slov, které mají pevně přiřazenou funkci. Jejich znalost je pro programovaní v SDS-C naprosto nezbytná.

  • return

Umožňuje předčasný návrat ze zavolané funkce. Příklad:

 if (i % j == 0) return;

Pokud zavoláte return přímo v main, pak je main předčasně ukončen a vzápětí znovu spuštěn od svého začátku.

  • label

Definuje bod v programu (návěstí), kam je možné odkudkoliv odjinud skočit. V současné verzi SDS-C není vyžadován (byl to původně vyžadováno v prvních starých verzích).

Využívá se např. pro vytváření smyček.

Definice cílového bodu (tj. kam lze skočit):

lze použít dvě varianty:

 -název-:
 label -název-:

Všimněte si, že si můžete zvýšit přehlednost programu tím, že před samotný název návěstí dáte slovo label. Pak lze v editoru snadněji najít pohledem místa, kam se bude skákat (pozn. jiný význam to prakticky nemá).


Skok se provede takto:

 goto -název-;

Pozor! Definice bodu návěstí lze provést pouze nad všemi skoky (goto) na konkrétní návěst. Pokud bude tedy skok (goto) nad místem definice cíle (label), bude to bráno jako chyba.

  • if

Pomocí if se provádí větvení programu dle aktuálního stavu. Provede se test zadané podmínky, a na základě výsledku (pravda/nepravda) se provede příslušná zadaná akce. Lze provést pouze jediné volání funkce nebo jediný skok (label), přičemž pro pravdivý výsledek lze definovat takovouto akci a stejně tak i pro nepravdivý výsledek.

POZOR Vždy jsou vykonány kompletně všechny testované vstupy v podmínce if - ať pak nejste překvapeni !

Příklad:

 if (sys[24] < 23) posliSMS();
 if (i % 10 == 0) goto neni10 else jinaFunkce();    //pokud i je nasobek 10, pak se skoci na label neni10, jinak se vola jinaFunkce
 if (q & 2 && z != u) neco() else necoJineho();
 if (teplota < 10 && chci_alarm != 0) hlas_alarm() else return;  //priklad vyuziti return

Takže viz poslední příklad - i když bude platit, že teplota < 10, vždy bude otestován i chci_alarm != 0, a až pak na základě všech výsledků se rozhodne, který příkaz se provede.

Jak pomocí if pracovat s bloky kódu, když nechcete volat funkce:

 if (i != 0) 
 {
 
   echo(' i neni nula ');
   //atd...
 
 } else
 
 {
 
  echo(' i je nula ');
 
 }
 
  //dalsi kod...


  • var

Pomocí var se definují uživatelské proměnné.

Funkce v SDS-C

Funkce jsou ohraničené části programu, které mají svůj specifický název, zadaný programátorem.

Všechny tyto funkce nevracejí hodnotu, lze je pouze zavolat. Po svém provedení pokračuje běh programu v místě, odkud byla funkce zavolána.

Využití funkcí - nejčastěji pro opakované kusy programu, aby se nemuselo plýtvat s volným místem pro zápis programu.

Příklad definice funkce test a jejího zavolání z jiné funkce funkceX:

 test
 {
   i += 10;  //nejaky obsah funkce...
 }
 
 funkceX
 {
 
    //zavolame test()
    test();
 
    //...
 }

Všimněte si rozdílu definice funkce v SDS-C, ve srovnání s FULL-C. Pro SDS-C funkce nevrací hodnoty a nepřebírá parametry.

Takže pro SDS-C je definice: test { . . . }; kdežto pro FULL-C je odpovídající definice: void test(void) { . . . };


Funkce lze volat odkudkoliv, včetně klíčového slova if (pouze jako reakci na vyhodnocení podmínky, nikoliv v podmínce samotné).

Některé funkce jsou definovány jako vyhrazené, a některé jsou definovány jako interní pro daný výrobek SDS - viz seznam. Nesmíte použít názvy těchto funkcí pro své vlastní (uživatelské). Celkový počet funkcí je omezen.

Vyhrazené funkce v SDS-C

Jsou definovány tři základní vyhrazené funkce, které lze použít jedině k definovánému účelu.

Funkce main obsahuje hlavní program. Pokud si nevytvoříte vlastní smyčku, je po provedení všech instrukcí v main tato opět spuštěna od začátku (toto se dějě stále dokola po celou dobu kdy je zařízení zapnuto). Z této funkce lze volat jakékoliv podfunkce. Je povinnost mít funkci main v programu definovanou.

Funkce init je zavolána jen při resetu zařízení. Není povinnost mít funkci init v programu definovanou. Pozn. funkci init je možné znovu zavolat odkudkoliv.

Příkaz return je speciální funkce/příkaz - jedná se pouze o návrat (viz zásobník, tj. předčasné ukončení funkce ve které je return zavolán). return se nikde v programu nedefinuje, je to totiž vyhrazené slovo, které se jen používá.


Další poznámky

Návod pro SDS-C je rozdělen do více stránek na této WiKi.

Osobní nástroje
Translate