home

X Real Time Kernel

Exemplo de Programa

O código em C++ apresentado abaixo é um exemplo de implementação da função main de um programa usando o X Real-Time Kernel. O papel deste trecho de código é fazer a inicialização do software de aplicação de um sistema embarcado.

Neste código é feita a instanciação do objeto da classe X, a inicialização de device drivers, a criação de tarefas concorrentes (threads) e, finalmente, a inicialização do escalonador do X Real-Time Kernel.

Este programa seria complementado com outras classes e/ou funções que implementariam as atividades de cada tarefa.

Código da Função Main


//--------------------------------------------------------------------
// Included Files
//--------------------------------------------------------------------

#include "X/xl.h" //X real-time kernel
#include "FlashMng.h" // Flash memory device driver
#include "DisplayLCD.h" // LCD device driver
#include "DDLX\DDLX_atmel_devices.h" // HAL Peripherals
#include "DDLX\DDLX_atmel_rtc.h" // HAL RTC

#ifdef APP_DEBUG // For printf and getchar
#include <stdio.h>
#include <stdlib.h>
#endif

//--------------------------------------------------------------------
// Global and External Variables
//--------------------------------------------------------------------

// Create and initialize the X object
X os(20, 40, 0);

// Serial debug port
CX_CommPort dbg_comm(4096,8,32,300);

// Create the OS Trace Object
#ifdef X_TRACE
   CX_Trace x_trace(TRACE_BUFFER_EXP+1,TR_END);
#endif

// Function Prototypes (Exported Functions)
// They are the threads entry points
extern void TempThread (Word arg1, Word arg2);
extern void HMIThread (Word arg1, Word arg2);
extern void FlashManagerThread (Word arg1, Word arg2);

//--------------------------------------------------------------------
// Function: main ()
// Parameters: none
// Return: int
//--------------------------------------------------------------------

int main (void)
{

// Initialize OS and debug channel
os.Init( );
dbg_comm.Init( );

// LCD Driver initialization
displayLCD.Init();

// Show starting message
displayLCD.GotoXY(0,0);
displayLCD.WriteString("Initializing");

// Global objects (flash manager) initialization
g_FlashMng.Init();

// Create the application threads

// Create a thread to read and write bytes in the flash memory
os.CreateThread(FlashManagerThread, 0, 0, T_FLASH_MNG, 0x200, 0, 4);

// Create a thread to interact with the display and keyboard
os.CreateThread(HMIThread, 0, 0, T_APP, 0x3000, 0, 7);

// Create a thread to carry out a periodic job
os.CreateThread(TempThread, 0, 0, T_TEMP, 0xa00, 0, 7);

// Start OS scheduler
os.Start();

return 0;

}