Exemplo n.º 1
0
void  Main (void){
	INT16U freq;
	S3C_SysInit();

	OSInit();	
	
	LCDInit();
	LCDString(0x00,"     Bitman\n  Spartan 117");
	delay(10);
	
	for(freq = 10;freq < 300;freq += 10){
		S3C_SetPWMBuzzer(freq,freq/2);
		delay(1);
	}
	
	
	LCDClear();
	delay(8);
	LCDString(0,"   Bitman Lab\n   Log System.");
	S3C_SetPWMBuzzer(650,10);
	S3C_StartPWMBuzzer();
	delay(3);
	S3C_StopPWMBuzzer();
	delay(1);
	S3C_StartPWMBuzzer();
	delay(3);
	S3C_StopPWMBuzzer();
	delay(10);
	
	
	
	
	
	Sem_UART0Tx = OSSemCreate(1);
	Sem_UART1Tx = OSSemCreate(1);

	Mbox_UART0Rx = OSMboxCreate((void *)0);
	Mbox_UART0Tx = OSMboxCreate((void *)0);
	Mbox_LEDMAN  = OSMboxCreate((void *)0);
	Mbox_BEEPMAN = OSMboxCreate((void *)0);
	Mbox_LCDMAN  = OSMboxCreate((void *)0);
	
	
	iOPcode = TYPE_DEFAULT;


	OSTaskCreate(TaskStart,(void *)0,&Stk_TaskStart[99],10);
	OSStart();
}
Exemplo n.º 2
0
/*
*******************************************************************************
**
** This function creates a new message mailbox handle and initializes it with 
** the given data address.
**
*******************************************************************************
*/
RTOS_Mailbox RTOS_MailboxCreate( RTOS_Message message )
{
    //if( ! RTOS_MessageIsValid( message ) )
    //    return( (RTOS_Mailbox)0 );
        
    return( (RTOS_Mailbox) OSMboxCreate( (void*) message ) );
}
Exemplo n.º 3
0
//开始任务
void AppStartTask(void *pdata)
{
  OS_CPU_SR cpu_sr=0;
	pdata = pdata; 		  
	msg_test=OSMboxCreate((void*)0);	//创建消息邮箱
	sem_test=OSSemCreate(0);		//创建信号量	
	OSStatInit();					//初始化统计任务.这里会延时1秒钟左右	
 	OS_ENTER_CRITICAL();			//进入临界区(无法被中断打断)    
    OSTaskCreate(AppLEDTask,(void *)0,
                &APP_LED_STK[TASK_STK_SIZE-1],
                APP_LED_TASK_PRIO); //建立LED1任务
    OSTaskCreate(AppMBOXTask,(void *)0,
                &APP_MBOX_STK[TASK_STK_SIZE-1],
                APP_MBOX_TASK_PRIO); //建立邮箱接收显示任务
    OSTaskCreate(AppSEMTask,(void *)0,
                &APP_SEM_STK[TASK_STK_SIZE-1],
                APP_SEM_TASK_PRIO); //建立信号量接收显示任务
    OSTaskCreate(AppWDOGTask,(void *)0,
                &APP_WDOG_STK[TASK_STK_SIZE-1],
                APP_WDOG_TASK_PRIO); //建立看门狗任务
    OSTaskCreate(AppPostTask,(void *)0,
                &APP_POST_STK[TASK_STK_SIZE-1],
                APP_POST_TASK_PRIO); //建立邮箱,信号量投递任务
  UART_printf("uCOSII MBox&Sem DemoTest\r\n");
 	OSTaskSuspend(APP_START_TASK_PRIO);	//挂起起始任务.
	OS_EXIT_CRITICAL();				//退出临界区(可以被中断打断)
}
Exemplo n.º 4
0
void  BSP_Init (void)
{
		// Interrupt initialization
    BSP_IntInit();
		
		// Initailize system services, clocks, etc.
    BSP_SysInit();             

		// RGB LED initialization
    BSP_LED_Init();
	
		// Push Button initialization
		BSP_SWITCH_Init();
	
		// PIR sensor initialization
		BSP_PIR_Init();
	
		// UART initialization
		BSP_UART_Init();
	
		// Semaphore Create
		sharedDataSem = OSSemCreate(1);
		
		// semaphore Create
		sharedDataSemUart = OSSemCreate(1);
		
		// Mailbox Create
		MailBox1 = OSMboxCreate(&global_pir_val);
	
}
Exemplo n.º 5
0
void Task_START(void *p_arg)
{
	(void)p_arg;	//'p_arg'没有用到,防止编译器警告
	adc_MBOX = OSMboxCreate((void *)0);
	key_SEM = OSSemCreate(0);
	keyDis_SEM = OSSemCreate(0);
	A8_SEM = OSSemCreate(0);

	OSTaskCreate(Task_LED,(void *)0,
		&led_task_stk[LED_TASK_STK_SIZE-1],LED_TASK_PRIO);

	OSTaskCreate(Task_USART1,(void *)0,
		&usart1_task_stk[USART1_TASK_STK_SIZE-1],USART1_TASK_PRIO);

	OSTaskCreate(Task_LEDDIS,(void *)0,
		&ledDis_task_stk[LEDDIS_TASK_STK_SIZE-1],LEDDIS_TASK_PRIO);

	OSTaskCreate(Task_ADC1,(void *)0,
		&adc1_task_stk[ADC1_TASK_STK_SIZE-1],ADC1_TASK_PRIO);

	OSTaskCreate(Task_EXTI,(void *)0,
		&exti_task_stk[EXTI_TASK_STK_SIZE-1],EXTI_TASK_PRIO);

	OSTaskCreate(Task_CALCULATE,(void *)0,
		&calculate_task_stk[CALCULATE_TASK_STK_SIZE-1],CALCULATE_TASK_PRIO);

	OSTaskCreate(Task_A8CONNECT,(void *)0,
		&A8connect_task_stk[A8CONNECT_TASK_STK_SIZE-1],A8CONNECT_TASK_PRIO);

	while(1)
	{
		OSTimeDlyHMSM(0,0,0,10);
	}
}
/*
 * Application
 */
void  main (void) {

    PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);      	/* Clear the screen                         */

    OSInit();                                              	/* Initialize uC/OS-II                      */

    PC_DOSSaveReturn();                                    	/* Save environment to return to DOS        */
    PC_VectSet(uCOS, OSCtxSw);                             	/* Install uC/OS-II's context switch vector */
	PC_ElapsedInit();
	
	CarMbox = OSMboxCreate((void *)0);					   	/* Create an empty mailbox for communication between car lane sensors and the controller*/
	PedMbox = OSMboxCreate((void *)0);					   	/* Create an empty mailbox for communication between pedestrian lane sensors and the controller*/
	Car1ToCar2Mbox = OSMboxCreate((void *)0);				/* Create an empty mailbox for communication from car1 to car2*/
	Car2ToCar3Mbox = OSMboxCreate((void *)0);				/* Create an empty mailbox for communication from car2 to car3*/

    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSStart();                                             	/* Start multitasking                       */
}
Exemplo n.º 7
0
static  void App_TaskCreate(void)
{
   //CPU_INT08U os_err;
 
   //Com1_SEM=OSSemCreate(1);		     //建立串口1中断的信号量
   	Com1_MBOX=OSMboxCreate((void *) 0);		     //建立串口1中断的消息邮箱
   	SeMbox = OSMboxCreate((void *)0);//创建一个邮箱 
	Key_BOX= OSMboxCreate((void *)0);//创建一个邮箱
	//Key_MBOX=OSMboxCreate((void *)0);
   
   
   //串口1接收及发送任务---------------------------------------------------------    
   OSTaskCreateExt(Task_Com1,									  //指向任务代码的指针
   					(void *)0,									  //任务开始执行时,传递给任务的参数的指针
					(OS_STK *)&Task_Com1Stk[Task_Com1_STK_SIZE-1],//分配给任务的堆栈的栈顶指针   从顶向下递减
					Task_Com1_PRIO,								  //分配给任务的优先级
					Task_Com1_PRIO,								  //预备给以后版本的特殊标识符,在现行版本同任务优先级
					(OS_STK *)&Task_Com1Stk[0],					  //指向任务堆栈栈底的指针,用于堆栈的检验
                    Task_Com1_STK_SIZE,							  //指定堆栈的容量,用于堆栈的检验
                    (void *)0,									  //指向用户附加的数据域的指针,用来扩展任务的任务控制块
                    OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);	  //选项,指定是否允许堆栈检验,是否将堆栈清0,任务是否要进行浮点运算等等。
   //LED1 闪烁任务------------------------------------------------------
   OSTaskCreateExt(Task_Led1,(void *)0,(OS_STK *)&Task_Led1Stk[Task_Led1_STK_SIZE-1],Task_Led1_PRIO,Task_Led1_PRIO,(OS_STK *)&Task_Led1Stk[0],
                    Task_Led1_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
   
   //LED2 闪烁任务------------------------------------------------------
   OSTaskCreateExt(Task_Led2,(void *)0,(OS_STK *)&Task_Led2Stk[Task_Led2_STK_SIZE-1],Task_Led2_PRIO,Task_Led2_PRIO,(OS_STK *)&Task_Led2Stk[0],
                    Task_Led2_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR); 
   
   //LED3 闪烁任务------------------------------------------------------
   OSTaskCreateExt(Task_Led3,
   					(void *)0,
					(OS_STK *)&Task_Led3Stk[Task_Led3_STK_SIZE-1],
					Task_Led3_PRIO,
					Task_Led3_PRIO,
					(OS_STK *)&Task_Led3Stk[0],
                    Task_Led3_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);  
}
Exemplo n.º 8
0
Arquivo: main.c Projeto: brtos/demos
int main(void)
{
    // Initialize BRTOS
    BRTOS_Init();
    ////////////////////////////////////////////////////////

    // Cria um gerenciador de eventos p/ dados acelerômetro
    if (OSMboxCreate(&Data, NULL) != ALLOC_EVENT_OK)
    {
        // Oh Oh
        // Não deveria entrar aqui !!!
        while(1) {};
    };

    if(InstallTask(&System_Time,"System Time",384,31,NULL,NULL) != OK)
    {
        // Oh Oh
        // N�o deveria entrar aqui !!!
        while(1) {};
    };

    if(InstallTask(&Test_Task_1,"Tarefa de Teste 1",384,13,NULL,NULL) != OK)
    {
        // Oh Oh
        // N�o deveria entrar aqui !!!
        while(1) {};
    };

    if(InstallTask(&Test_Task_2,"Tarefa de Teste 2",384,14,NULL,NULL) != OK)
    {
        // Oh Oh
        // N�o deveria entrar aqui !!!
        while(1) {};
    };

    if(InstallTask(&SerialTask,"Tarefa Serial",512,10,NULL,NULL) != OK)
    {
        // Oh Oh
        // N�o deveria entrar aqui !!!
        while(1) {};
    };

    // Start Task Scheduler
    if(BRTOSStart() != OK)
    {
        // Oh Oh
        // N�o deveria entrar aqui !!!
        for(;;) {};
    };

    // Infinite loop
    while (1)
    {
    }
    // Infinite loop, never return.
}
Exemplo n.º 9
0
int main(void)
{
	board_init();
	uart_init();
	
	OSInit();
	 
	task_create();

	T2sem = OSSemCreate(0);
	Tmbox = OSMboxCreate((void *)0); 

	OSStart();
	
	return 0;
}
Exemplo n.º 10
0
static void AppStartTask(void *pdata)
{
	pdata = pdata; 		  
	msg_test=OSMboxCreate((void*)0);	//创建消息邮箱
	sem_test=OSSemCreate(0);		//创建信号量	
    
    OSTaskCreate(AppMBOXTask,(void *)0,
                &APP_MBOX_STK[TASK_STK_SIZE-1],
                APP_MBOX_TASK_PRIO); //建立邮箱接收显示任务
    OSTaskCreate(AppSEMTask,(void *)0,
                &APP_SEM_STK[TASK_STK_SIZE-1],
                APP_SEM_TASK_PRIO); //建立信号量接收显示任务
    OSTaskCreate(AppPostTask,(void *)0,
                &APP_POST_STK[TASK_STK_SIZE-1],
                APP_POST_TASK_PRIO); //建立邮箱,信号量投递任务
    printf("uCOSII MBox&Sem DemoTest\r\n");
 	OSTaskSuspend(APP_START_TASK_PRIO);	//挂起起始任务.
}
Exemplo n.º 11
0
void board_control_task(void *pdata)
{
  INT8U error_code = OS_NO_ERR;
  board_control_mbox = OSMboxCreate((void *)NULL);

  struct http_form_data* board_control_mbox_contents;
  
  while(1)
  {
      board_control_mbox_contents = (void*)OSMboxPend(board_control_mbox, 0, &error_code);
      
      if (board_control_mbox_contents->LED_ON)
      {
        OSTaskResume(LED_PRIO);
      }
      else
      {
        /* Suspend the task and clear the LED. */
        OSTaskSuspend(LED_PRIO);
        IOWR_ALTERA_AVALON_PIO_DATA( LEDG_BASE, 0 );
      }
      
      if (board_control_mbox_contents->SSD_ON)
      {
        OSTaskResume(SSD_PRIO);
      }
      else
      {
        /* Suspend the task and set SSD to all zeros. */
        OSTaskSuspend(SSD_PRIO);
		#ifdef SEG7_NAME
        //sevenseg_set_hex(0); 
		#endif
      }  

      /* Always dump text to the LCD... */
	  #ifdef LCD_NAME
      lcd_output_text( board_control_mbox_contents->LCD_TEXT );
      usleep(500*1000);
	  #endif
  }
}
Exemplo n.º 12
0
/*********************************************************************************************************
** 函数名称: taskstart creates other task
** 功能描述: μCOS-II建立其它任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 黄力国
** 日 期: 2004年12月28日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  Create_Mux_Box(void)
{
	ToggleWD();

	/* I2c_bus uses*/
	I2c_Sem=OSSemCreate(1);
	FLASH_Sem = OSSemCreate(1);			/* 信号量用于互斥操作总线 */
	Lcd_Sem = OSSemCreate(1);

    RecPackedFlag=		OSSemCreate(0);
	RecBufOverFlowFlag=	OSSemCreate(0);
	RecTcpPackedFlag=	OSSemCreate(0);
	RecPingPackedFlag=	OSSemCreate(0);
	SendFlag=		    OSSemCreate(1);

	//RecIcmpQFlag=		OSQCreate(&RecIcmpQ[0],Q_Max_Size);
	RecTcpQFlag=		OSQCreate(&RecTcpQ[0],Q_Max_Size);
	RecUdpQFlag=		OSQCreate(&RecUdpQ[0],Q_Max_Size);
	Back_Light_Ctrl_Mbox = OSMboxCreate((void *)0);		//建立通讯时对时间显示和刷卡使能进行控制任务所需要的邮箱

}
Exemplo n.º 13
0
/*********************************************************************//**
 * @brief 		Client Field Initialize
 * @param[in] 	None
 * @return 		None
 ***********************************************************************/
void ClientParserStructInit(void)
{
	// Reset from client ring buffer
	RingBufferInit(&(client_parser.buffer));

	// Initialize events
    client_parser.event = OSMboxCreate(NULL);

	// CMD Parse
    client_parser.mode = CLIENT_CFG_MODE;
    
    client_parser.data.current = CLIENT_RECV_HEADER_1;
	client_parser.parser[CLIENT_CFG_MODE] = CfgParser;
	client_parser.parser[CLIENT_OBD_MODE] = ObdParser;
    
    client_parser.cfg[CLIENT_RECV_HEADER_1] = CfgParserHeader1;
    client_parser.cfg[CLIENT_RECV_HEADER_2] = CfgParserHeader2;
    client_parser.cfg[CLIENT_RECV_LENGTH_1] = CfgParserLength1;
    client_parser.cfg[CLIENT_RECV_LENGTH_2] = CfgParserLength2;
    client_parser.cfg[CLIENT_RECV_DATA] = CfgParserData;
    client_parser.cfg[CLIENT_RECV_CHECKSUM] = CfgParserChecksum;
    
    client_parser.exe[CLIENT_CFG_GET_VERSION] = CfgExeGetVersion;
    client_parser.exe[CLIENT_CFG_OBD_MODE] = CfgExeOBDMode;
    client_parser.exe[CLIENT_CFG_SET_HEART_BEAT] = CfgExeSetHeartBeat;
    client_parser.exe[CLIENT_CFG_EXIT_OBD] = CfgExeExitOBD;
    
    client_parser.version[0] = 'D';
    client_parser.version[1] = 'A';
    client_parser.version[2] = '-';
    client_parser.version[3] = 'V';
    client_parser.version[4] = '0';
    client_parser.version[5] = '.';
    client_parser.version[6] = '0';
    client_parser.version[7] = '.';
    client_parser.version[8] = '1';
    client_parser.version[9] = '\0';
}
Exemplo n.º 14
0
void GUI_X_InitOS (void)
{ 
  DispSem = OSSemCreate(1);             /* 建立一个互斥型信号量 */
  EventMbox = OSMboxCreate((void *)0);	/* 建立一个邮箱	*/
}
Exemplo n.º 15
0
/*
*********************************************************************************************************
*                                      App_MailboxCreate()
*
* Description : Create the application Mailboxes
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Note(s)     : none.
*********************************************************************************************************
*/
static void App_MailboxCreate (void)
{
  /* Create mailbox object for messaging received serial data between tasks */
  pSerialMsgObj = OSMboxCreate((void *)0);

}
Exemplo n.º 16
0
void GPSNET_FOTA_Task(void)
{
   // task setup
   LATITUDE     latitude;
   LONGITUDE    longitude;   
   INT32U       i = 0;
   INT32U       j = 0;      
   INT32U       endereco_bw;
   INT8U        type = 0;
   INT8U        confirma=0;  
   INT8U        error=0;
   INT8U        nerror=0;   
   INT8U        confirma_rede_error = 0;
   INT8U        *boot_end_status;
   static       INT16U linhas; 
   static       INT16U linhas2;

   
   if (OSSemCreate(0,&Confirma) != ALLOC_EVENT_OK)
   {
     while(1){};
   }; 

   if (OSSemCreate(0,&Bootloader_Event) != ALLOC_EVENT_OK)
   {
     while(1){};
   };      
   
   if (OSMboxCreate(&Bootloader_end,NULL) != ALLOC_EVENT_OK)
   {
      while(1){};      
   }   
   
   
   // task main loop
   for (;;)
   {
      // Wait event from APP layer, no timeout
      OSSemPend(Bootloader_Event,0);
      
      // Set target node address

      UserEnterCritical();
        latitude.x  = GPS_X_tmp.int32u;
        longitude.y = GPS_Y_tmp.int32u;
      UserExitCritical(); 
      
      
      linhas = 0;
      linhas2 = 0;
      endereco_bw = CODE_START;
    
      for(;;) 
      {
           /* loop to read a line of code  */
           for(i=0;i<VECTOR32_SIZE;i++)  
           {
              // return 32-bit words
              data_checksum[i]=Flash_Read(endereco_bw); 
              bootloader_datal[i] = data_checksum[i]; 
              endereco_bw+=4;
           }
            
           linhas++;          
           j=0;                   
          
           type = (INT8U)(bootloader_data[2]);  // get line type
           
           if(type==7) 
           {
              bootloader_data[15] = (INT8U)((CRC_CODIGO_16>>8) & 0xFF);
              bootloader_data[16] = (INT8U)((CRC_CODIGO_16) & 0xFF);
              bootloader_data[17] = (INT8U)((CRC_CODIGO_162>>8) & 0xFF);
              bootloader_data[18] = (INT8U)((CRC_CODIGO_162) & 0xFF);                
              endereco_bw = CODE_START;
           }
           
           error = 0;
           nerror = 0;
           confirma_rede_error = 0;
                    
       envia_de_novo:      
           UserEnterCritical();
             confirma_rede = 0;
             //mensagem = 0;
           UserExitCritical();
             
           // send a line of code         
           i = NetSimpledataXY(UP_ROUTE, &latitude, &longitude, &bootloader_data[0]); 
             
           if(i==OK) 
           {
                 error = 0;
                 // wait for send to complete - SIGNAL_TIMEOUT ms                
                 i = OSSemPend (Confirma, SIGNAL_TIMEOUT); 
                                    
                 if(confirma_rede == DATA_OK) 
                 {
                     confirma_rede_error = 0;
                     linhas2++;
                     if(type==7) 
                       {
                         type=0;                       
                         endereco_bw = CODE_START;
                         //UserEnterCritical();
                          //mensagem = confirma_rede;
                         //UserExitCritical();
                         boot_end_status = (INT8U*)'o';
                         (void)OSMboxPost(Bootloader_end,(void *)boot_end_status);
                         break;
                       }
                 }
                 else
                 {
                     if (confirma_rede == 0)
                     {
                        /* timeout of semaphore pend */
                        confirma_rede_error++;                        
                        // DelayTask(100);
                          
                        if(confirma_rede_error>6) 
                        {
                            confirma_rede_error = 0;
                            
                            //UserEnterCritical();
                            //  mensagem = confirma_rede;
                            //UserExitCritical();                            
                            
                            if(Bootloader_ForceStop == 1){ // desiste 
                              Bootloader_ForceStop = 0;
                              endereco_bw = CODE_START; 
                              boot_end_status = (INT8U*)'f';
                              (void)OSMboxPost(Bootloader_end,(void *)boot_end_status);
                              break;
                            }
                        } 
                        
                        goto envia_de_novo;
                     }
                     endereco_bw = CODE_START;                      
                     //UserEnterCritical();
                     // mensagem = confirma_rede;
                     //UserExitCritical();
                     boot_end_status = (INT8U*)'g';
                     (void)OSMboxPost(Bootloader_end,(void *)boot_end_status);                     
                     break; 
                 } 
           }
           else 
           {
              error++;
              DelayTask(SIGNAL_TIMEOUT);  
              if(error==3) 
              {
                  DelayTask(RadioWatchdogTimeout + SIGNAL_TIMEOUT);   /* wait for a radio reset */
              }
              if(error>6) 
              {
                  error = 0;
                  //UserEnterCritical();
                  //  mensagem = confirma_rede;
                  //UserExitCritical();
                  endereco_bw = CODE_START;
                  boot_end_status = (INT8U*)'f';
                  (void)OSMboxPost(Bootloader_end,(void *)boot_end_status);                  
                  break; 
              } 
              else
              {
                   goto envia_de_novo;  
              }
           }
      }
   }
Exemplo n.º 17
0
void  GUI_X_InitOS (void)
{ 
    DispSem   = OSSemCreate(1);
    EventMbox = OSMboxCreate((void *)0);
}
Exemplo n.º 18
0
/* ------------------------------------------------------------------------------------------------------
 *									App_TaskStart()
 *
 * Description : Task start function.
 *
 * Argument(s) : none.
 *
 */
static  void  App_EventCreate (void)
{
    App_LcdMbox = OSMboxCreate((void *)0);							/* Create LCD dispaly event Mbox. */
    CC2520_RxMbox = OSMboxCreate((void *)0);
    NET_RfMbox = OSMboxCreate((void *)0);
}
/*
*********************************************************************************************************
*                                    MULTITASKING INTERFACE FUNCTIONS
*
* Note(1): 1) The following routines are required only if uC/GUI is used in a true multi task environment, 
*             which means you have more than one thread using the uC/GUI API.  In this case the #define 
*             GUI_OS 1   needs to be in GUIConf.h
*********************************************************************************************************
*/
void GUI_X_InitOS(void)
{
    
    DispSem = OSSemCreate(1);  //创建初始值为1的信号量
    EventMbox = OSMboxCreate((void*)0); //创建消息邮箱
}
Exemplo n.º 20
0
void StartTask(void* pdata)
{
  INT8U err;
  void* context;
   

  static alt_alarm alarm;     /* Is needed for timer ISR function */
  
  /* Base resolution for SW timer : HW_TIMER_PERIOD ms */
  //delay = alt_ticks_per_second() * HW_TIMER_PERIOD / 1000; 
 // printf("delay in ticks %d\n", delay);

  /* 
   * Create Hardware Timer with a period of 'delay' 
   */
  if (alt_alarm_start (&alarm,
      delay,
      alarm_handler,
      context) < 0)
      {
          printf("No system clock available!n");
      }

  /* 
   * Create and start Software Timer 
   */

  /*
   * Creation of Kernel Objects
   */
  
  // Mailboxes
  Mbox_Throttle = OSMboxCreate((void*) 0); /* Empty Mailbox - Throttle */
  Mbox_Velocity = OSMboxCreate((void*) 0); /* Empty Mailbox - Velocity */
   
  /*
   * Create statistics task
   */

  OSStatInit();

  /* 
   * Creating Tasks in the system 
   */


  err = OSTaskCreateExt(
       ControlTask, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &ControlTask_Stack[ControlTask_STACKSIZE-1], // Pointer to top
                             // of task stack
       CONTROLTASK_PRIO,
       CONTROLTASK_PRIO,
       (void *)&ControlTask_Stack[0],
       ControlTask_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);

  err = OSTaskCreateExt(
       VehicleTask, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &VehicleTask_Stack[VehicleTask_STACKSIZE-1], // Pointer to top
                             // of task stack
       VEHICLETASK_PRIO,
       VEHICLETASK_PRIO,
       (void *)&VehicleTask_Stack[0],
       VehicleTask_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);
       
    err = OSTaskCreateExt(
       ButtonIO, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &ButtonIO_Stack[ButtonIO_STACKSIZE-1], // Pointer to top
                             // of task stack
       ButtonIO_PRIO,
       ButtonIO_PRIO,
       (void *)&ButtonIO_Stack[0],
       ButtonIO_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);
  
   err = OSTaskCreateExt(
        SwitchIO, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &SwitchIO_Stack[SwitchIO_STACKSIZE-1], // Pointer to top
                             // of task stack
       SwitchIO_PRIO,
       SwitchIO_PRIO,
       (void *)&SwitchIO_Stack[0],
       SwitchIO_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);
       
   err = OSTaskCreateExt(
        WatchDog, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &WatchDog_Stack[WatchDog_STACKSIZE-1], // Pointer to top
                             // of task stack
       WatchDog_PRIO,
       WatchDog_PRIO,
       (void *)&WatchDog_Stack[0],
       WatchDog_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);
       
    err = OSTaskCreateExt(
        OLD, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &OLD_Stack[OLD_STACKSIZE-1], // Pointer to top
                             // of task stack
       OLD_PRIO,
       OLD_PRIO,
       (void *)&OLD_Stack[0],
       OLD_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);
      
     err = OSTaskCreateExt(
        DYNAMIC_UTI, // Pointer to task code
       NULL,        // Pointer to argument that is
                    // passed to task
       &DYNAMIC_UTI_Stack[DYNAMIC_UTI_STACKSIZE-1], // Pointer to top
                             // of task stack
       DYNAMIC_UTI_PRIO,
       DYNAMIC_UTI_PRIO,
       (void *)&DYNAMIC_UTI_Stack[0],
       DYNAMIC_UTI_STACKSIZE,
       (void *) 0,
       OS_TASK_OPT_STK_CHK);
       
  printf("All Tasks and Kernel Objects generated!\n");
  

  /* Task deletes itself */

  OSTaskDel(OS_PRIO_SELF);
}