Struktura programu

Zařízení Byznce se programují v jazyce C++ a využívají MBED API a Byzance API. Pro správnou funkčnost programu je nutné na první řádek nejprve importovat knihovnu "byzance.h" příkazem

#include "byzance.h"

Tato knihovna má za úkol automaticky inicializovat periferie, připojit zařízení k internetu a inicializovat vlákna, která se starají o aktualizaci firmware a připojení k serverům. Importem knihovny se také zpřístupní funkce Byzance API a uživatelská makra.

Definice fyzických vstupů a výstupů

Po importu všech potřebných knihoven je možno začít používat objekty definované v knihovnách. Může se jednat o vytvoření konstuktorů, periferie, nebo fyzické vstupy a výstupy, které se budou v programu používat.

// Definice fyzických vstupů a výstupů
DigitalOut DI1(X02);
DigitalIn DO1(X05);
AnalogOut AO1(Y23);
AnalogIn AI1(Y22)

Další informace je možno naleznout v sekci MBED API.

Definice virtuálních vstupů a výstupů

Při programování funkčního bloku nástroji BLOCKO v portálu Byzance je často potřeba definovat virtuální vstupy a výstupy, které symbolizují právě vstupy a výstupy funkčního bloku ven ze zařízení. Tyto definice je nutné zanést společně s fyzickými vstupy a výstupy.

// digitalni vstup s nazvem din_name
DIGITAL_INPUT(din_name, {
    my_din_variable = value;
})

// analogovy vstup s nazvem ain_name
ANALOG_INPUT(ain_name, {
    my_ain_variable = value;
})

Bližší informace o významu a funkci virtuálních vstupů/výstupů a jejich programování je možno naleznout v příslušné kapitole.

Definice komunikačních rozhraní

Pokud je v programu potřeba využít nějaké komunikační rozhraní jako Sériová linka, SPI, CAN apd. je vhodné provést jejich definici v této části za definicí vstupů a výstupů. Definice sériové linky je znázorněna v následujícím kódu.

Serial pc(SERIAL_TX_pin, SERIAL_RX_pin); // tx, rx

Bližší informace ke komunikačním rozhraním lze získat v sekci MBED API-Komunikační rozhraní

Hlavní funkce programu

Program může mít definované tři základní funkce

  • pre_init()

  • init()

  • loop()

Funkce pre_init()

Tato funkce je zavolána na začátku programu jako první, ještě předtím, než je inicializováno vlákno Byzance a předtím než se zařízení připojí k serverům. Tuto funkci není povinné implementovat, nicméně její implementace může být užitečná například při debugu komunikace se servery nebo ovládání některých funkcí inicializovaných operačním systémem MBED.

void pre_init(){

}

Funkce init()

Funkce init je provedená hned po funkci pre_init a stejně tak pouze jednou. Tato funkce slouží k inicializaci prvků potřebných v hlavní části programu. Její implementace není povinná.

void init(){
    pc.printf("Hello world\n");
}

Funkce loop()

Poslední hlavní funkcí je funkce loop, Tato funkce je vykonávaná ve smyčce a nahrazuje tak funkci while(true). Jediným rozdílem je to, že mezi jednotlivými smyčkami se dává prostor Byzance vláknu, které zajišťuje komunikaci a resetuje se watchdog.

void loop(){
    pc.printf("Hello world\n");
    Thread::wait(500);
}

Hello world

Následující kód zobrazuje strukturu programu Hello_world s definicí vstupů, výstupů a komunikačních rozhraní a implementací všech třech hlavních funkcí

#include "byzance.h"

// Definice fyzických vstupů a výstupů
DigitalOut DO1(X02);
DigitalIn DI1(X05);
AnalogOut AO1(Y23);
AnalogOut AI1(Y22);

Serial pc(SERIAL_TX, SERIAL_RX); // tx, rx

void init(){
    // Hello world se vypise jednou pri startu
    pc.printf("Hello world from init function\n");
}

void loop(){
    // Hello world se bude vypisovat stale dokola kazdych 500 ms
    pc.printf("Hello World\n");
    Thread::wait(500);
}

Last updated