Moja prvá aplikácia

Postavené na hardvéri UM-G r5

Projekt je písaný v MPLAB X IDE v2.25 a kompilátor HI-TECH PICC18-STD v9.52.

Jadro operačného systému tvoria knižnice NOW-OS API.libNOW-OS Core.lib.

NOW-OS API.lib  zahŕňa funkcie aplikačného rozhrania  API.obj API.h .

NOW-OS Core.lib  zahŕňa funkcie jadra operačného sytému kde parí :

  • funkcie jadra a spracovanie príkazov, udalostí a chýb. Tiež zálohovanie užívateľských nastavení, spracovanie logiky systémy a autonómie Core.obj, Core.h
  • funkcie systému – nastavenie časovačov, reálneho času a kalendáru, alarmov, inicializácia operačného systému System.obj, System.h
  • smerovanie paketov po roznych fyzických komunikačných vrstvách Routing.obj, Routing.h
  • práca s virtuálnou pamäťou VirtualMemory.obj, VirtualMemory.h
  • práca s registrami Registers.obj, Registers.h
  • cyklický buffer pre spracovanie toku dát CyclicBuffer.obj, CyclicBuffer.h
  • pomocné funkcie Helpers.obj, Helpers.h
  • správa verzií Version.obj, Version.h
  • Interný proces jadra InternalProcess.c – spracováva časovače jadra a iné úlohy jadra, ktoré musia bežať na pozadí aplikácie.

Pre vytvorenie kompletnej aplikácie sú potrebné okrem knižníc aj tieto súbory:

  • Súbor s hlavným programom, kde je umiestnená inicializácia projektu a procesy - Main.c.
  • Súbor obsluhy prerušenia ISR.c.
  • Služby (aplikácie). Minimálne základná služba Basic_1.c. Basic_1.h.
  • Drivery. Minimálne driver pre ovládanie hardvéru na ktorom beží tento operačný systém DEVICE_UM-G.c, DEVICE_UM-G_Interface.h a driver pre ovládanie internej EEPROM v prípade použitia mikrokontroléra s internou EEPROM INTERNAL_EEPROM.c, INTERNAL_EEPROM_Interface.h .
  • Konfiguračné súbory:
    • Pre vnútornú logiku funkčnosti systému a autonómnu činnosť Autonomy.c. Kde je tabuľka reakcie na udalostí a odpovede a tabuľka pre filtrovanie udalostí a odpovedí.
    • Pre nastavenie funkčnosti celého programu Configure.c. Kde je minimálne informácia o podporovaných HW zariadeniach a virtuálnych elentoch, konfigurácia a inicializácia registrov, súpis všetkých funkcíí systému ktoré sú volané protokolom Operchip a automaticky spracovávané jadrom OS, zoznam udalostí ktoré spolupracujú priamo s funkciami, tabuľku adries DCID a tabuľka pre smerovanie adries DCID.
    • Pre nastavenie jadra operačného systému CORE_ConfigureHW.h. Obsahuje informácie o verzii, nastavenie veľkosti buffrov, nastavenie užívateľských časovačov, zoznam registrov, rozdelenie virtuálnej pamäti.
    • Cesty pre užívateľské knižnice Path.h.
    • Konfigurácia pinov hardvéru DEVICE_UM-G_ConfigureHW.h.

Základná aplikácia pre hardvér UM-G r5 pre použitie NOW-OS

 Ak máme vytvorenú minimálnu aplikáciu pre NOW-OS, môžeme prídávať ďalšie stavebné bloky aplikácie. V základnej aplikácii sú použité funkčnosti pre binárny vstup a výstup a komunikácia po RS232 protokolom Operchip.

Do projektu treba pridať ešte tieto súbory:

  • Službu BasicApp.c, BasicApp.h. V tejto službe je zdrojový kód našej aplikácie. To znamená funkčnosť, ktorá nie je nikde inde a je priamo volaná jadrom operačného systému.
  • Driver BINARY_INPUT.c, BINARY_INPUT.h, BINARY_INPUT_Interface.h a BINARY_INPUT_ConfigureHW.h. Interface je rozhranie drivera a ConfigureHW je konfigurácia pinov mikrokontroléra.
  • Driver BINARY_OUTPUT.c, BINARY_OUTPUT_Interface.h a BINARY_OUTPUT_ConfigureHW.h. Interface je rozhranie drivera a ConfigureHW je konfigurácia pinov mikrokontroléra.
  • Driver UART.c, UART.h, UART_Interface.h a UART_ConfigureHW.h. Interface je rozhranie drivera a ConfigureHW je konfigurácia pinov mikrokontroléra.
  • SW Modul RS232.c, RS232_Interface.h a RS232_ConfigureHW.h. Interface je rozhranie drivera a ConfigureHW je konfigurácia pinov mikrokontroléra.

Funkcia Main()

Hlavná funkcia programu. Inicializuje hardvér, jadro, drivery a moduly. Spúšťa procesy.

void main(void)
{              
//System init                
     UM_G_Init();                
     OS_Init(0);     
//Drivers init  
     UART_Init(COM2, GetSystemClock(), 19200, NON, HANDSHAKE_OFF);                
     strcpy(bTemp, "UM-G r4; ");                
     strcat(bTemp, _VERSION_);                
     strcat(bTemp, "; www.operchip.com rn");                
     UART_PutData(COM2, bTemp, strlen(bTemp));
     BINARY_INPUT_Init(0x07);                
     BINARY_OUTPUT_Init(0xfc);      
//Module init  
     SERIAL_COM_Init(COM2);      
//loop          
     while(1){                               
          CORE_Process();                               
          INTERNAL_Process();                               
          UART_Process();                               
          SERIAL_COM_Process(COM2);                               
          BINARY_INPUT_Process();               
      }
}

UM_G_Init() – Inicializácia oscilátora, časovačov,pinov mikrokontroléra, RTC, EEPROM a hardvérových komponentov zariadenia.OS_Init(0) – Inicializácia operačného systému. Verzie, registre, alarmy, užívateľské nastavenia a test konfigurácie EEPROM, zapnutie watchdogu.UART_Init(COM2, GetSystemClock(), 19200, NON, HANDSHAKE_OFF) – Inicializácia UART. 19200Baud, 8bit.BINARY_INPUT_Init(0x0f) – Inicializácia vstupov. Aktivované sú 4 vstupy.BINARY_OUTPUT_Init(0xfc) – Inicializácia výstupov. Aktivované sú dva výstupy.
SERIAL_COM_Init(COM2) – Inicializácia rozhrania RS232.

Konfigurácia aplikácie – Configure.c

Tabuľka zariadení:

const struct CodeProjects TableCode[NUM_DEVICE] 

Aplikácia používa dva zariadenia s ktorými komunikuje protokolom Operchip.

PHYSICAL_LAYER_THIS – Komunikácia v ranci mikrokontroléra.
PHYSICAL_LAYER_RS232 – Komunikácia cez sériové rozhranie RS232.


V rámci vlastného zariadenia s PN UM s komerčným názvom UM-G je na zariadení 6 virtuálnych elementov - NUM_ELEMENT_6 a je preprogramovateľné cez WEB bootloader _8BIT_WEB_BOOTLOADER.
  • BasicModule:1
  • BinaryDetector:1
  • BinaryDetector:1
  • BinaryDetector:1
  • BinaryDetector:1
  • ElectricalAppliance:1
  • ElectricalAppliance:1
T ieto virtuálne elementy predstavunú štandardizované typy zariadení . 4x binárny vstup a 2x binárny výstup.
Na vzdialenom zariadení RS232 s PN TERMINAL je iba jeden virtuálny element. Predstavuje terminál pre RS232 komunikáciu.

Tabuľka pre registre

const struct TABLE_REGISTER TableRegisters[ NUM_REGISTER ]
 

Tabuľka pre príkazy

const struct TABLE_COMMANDS TableCommands[ NUM_COMMAND ]

Služba Basic:1

Basic_Ping()                                              Zistenie či zariadenie odpovedá.
Basic_Reset()                                            Vzdialený reset.
Basic_GetDescription()                             Zistenie výrobných dát zariadenia.
Basic_SetDateTime()                                Nastavenie dátumu a času.
Basic_GetDateTime()                                Zistenie dátumu a času.
Basic_SetTimer()                                      Nastavenie časovača.
Basic_SetAlarm()                                      Nastavenie alarmov na RTC.
Basic_GetAlarm()                                      Zistenie nastavených alarmov na RTC.
Basic_DisableAlarm()                               Vypnutie alarmov.
Basic_AlarmsOn()                                     Zapnutie spracovania alarmov v jadre.
Basic_AlarmsOff()                                    Vypnutie spracovania alarmov v jadre.
Basic_GetStateAlarms()                           Zistenie stavu zapnutia alarmov.
Basic_VirtualMemoryRead()                     Prečítanie dát z virtuálnej pamäti.
Basic_VirtualMemoryWrite()                    Zápis dát do virtuálnej pamäti.
Basic_SetAutonomyState()                      Nastavenie autonómie pre jadro.
Basic_GetAutonomyState()                      Zistenie ako je nastavená autonómia v jadre.
Basic_EventsOn()                                     Zapnutie spracovania udalostí v jadre.
Basic_EventsOff()                                     Vypnutie spracovania alarmov v jadre.
Basic_GetStateEvents()                           Zistenie stavu zapnutia udalostí.
Basic_SaveConfigure()                             Zálohovanie užívateľských nastavení v externej pamäti.
Basic_LoadConfigure()                             Načítanie užívateľských nastavení z externej pamäti.
 
Služba ElectricContact:2

ElectricContact_GetState()                      Zistenie stavu binárneho vstupu.
ElectricContact_On()                                Funkcia spustená pri vzniku udalosti zopnutia binárneho vstupu.
ElectricContact_Off()                               Funkcia spustená pri vzniku udalosti rozpojenia binárneho vstupu.
 
Služba SwitchPower:1

SwitchPower_On()                                   Zopnutie relé. Cievka relé pod prúdom.
SwitchPower_Off()                                  Rozpojenie relé. Cievka relé nie je pod prúdom.
SwitchPower_GetState()                         Zistenie stavu zopnutia relé.