int main(void) { unsigned int switchPressed; debug_init(SOFTWARE_NAME); PIO_InitializeInterrupts(AT91C_AIC_PRIOR_LOWEST); switches_init(); char_display_init(); LED_Configure(0); LED_Configure(1); if (! BCAN_Init(1000, 0, NULL)) { printf("INIT FAIL"); LED_Set(1); return 1; } printf("INIT OK\n\r"); LED_Set(0); BCAN_InitMailboxRegisters( 0, 1, 0x0, (0x5AC << 18), AT91C_CAN_MOT_TX, 0x0); while(1) { DisplayMenu(); switchPressed = -1; while (switchPressed == -1) { if (switches_pressed(0)) { TRACE_INFO("Switch 0 is pressed\n\r"); switchPressed = 0; } else if (switches_pressed(1)) { TRACE_INFO("Switch 1 is pressed\n\r"); switchPressed = 1; } else if (switches_pressed(2)) { TRACE_INFO("Switch 2 is pressed\n\r"); switchPressed = 2; } else if (switches_pressed(3)) { TRACE_INFO("Switch 3 is pressed\n\r"); switchPressed = 3; } else { //TRACE_INFO("No Switch is pressed\n\r"); } char_display_tick(); for (volatile unsigned int i = 0xFF; i > 0; i--) ; } unsigned int result = -1; while (result != CAN_STATUS_SUCCESS) { result = BCAN_Write(0, 1, 0, switchPressed, 0x1); } char_display_number(switchPressed); } return 0; }
void DYNAMIC_UTI(void* pdata) { INT8U err_tmr, err_tmr_start, i, err; int j, switch_status; Sem_DYNAMIC_UTI = OSSemCreate(0); printf("DYNAMIC_UTI Task created!\n"); SWTimer_DYNAMIC_UTI = OSTmrCreate(0, DYNAMIC_UTI_PERIOD, OS_TMR_OPT_PERIODIC , Tmr_Callback_DYNAMIC_UTI_Task, (void *)0,"DYNAMIC_UTI",&err_tmr); if(err_tmr == OS_ERR_NONE){ OSTmrStart(SWTimer_DYNAMIC_UTI, &err_tmr_start); if(DEBUG) printf("Timer for DYNAMIC_UTI is created and Started \n"); } else { printf("Error while creating DYNAMIC_UTI task timer \n"); } while(1) { switch_status = switches_pressed(); switch_status = switch_status & 1008; // Mask for SW4 - SW9 switch_status = switch_status >> 4; printf("Before loop : Time : %d, SwitchStatus : %d \n", alt_timestamp() / (alt_timestamp_freq()/1000), switch_status); //printf("switch_status : %d\n",switch_status); if(switch_status > 50) switch_status = 50; // Loop running for 6 unit of time // for Optimization Level Os : j = 4600000 ; // for No Optimization : j = 3444 for(i=0; i<switch_status; i++){ for(j=0; j<4600000; j++){ } } printf("After loop : Time : %d \n", alt_timestamp() / (alt_timestamp_freq()/1000)); OSSemPend(Sem_DYNAMIC_UTI, 0, &err); if(err == OS_ERR_NONE) { } else { printf("Sem_DYNAMIC_UTI Pend Error ------ \n"); } } }
void SwitchIO(void* pdata) { INT8U err_tmr, err_tmr_start, err_sem, switch_status; Sem_SwitchIO = OSSemCreate(0); Sem_SwitchIO_IP = OSSemCreate(0); // For getting user input printf("SwitchIO Task created!\n"); SWTimer_SwitchIO = OSTmrCreate(0, SwitchIO_PERIOD, OS_TMR_OPT_PERIODIC , Tmr_Callback_SwitchIO_Task, (void *)0,"SwitchIO",&err_tmr); if(err_tmr == OS_ERR_NONE){ OSTmrStart(SWTimer_SwitchIO, &err_tmr_start); if(DEBUG) printf("Timer for SwitchIO is created and Started \n"); } else { printf("Error while creating SwitchIO task timer \n"); if(err_tmr == OS_ERR_TMR_NAME_TOO_LONG) printf(" OS_ERR_TMR_NAME_TOO_LONG : SwitchIO TASK \n"); } while(1) { if(DEBUG) printf("SwitchIO task \n"); switch_status = switches_pressed(); if(DEBUG) printf("Switch Status : %d \n", switch_status); if(switch_status & 1) // Engine pressed { engine = on; } else if(CUR_VELOCITY == 0){ engine = off; } if(switch_status & 2) // Top Gear pressed { top_gear = on; } else { top_gear = off; cruise_control = off; } OSSemPost(Sem_SwitchIO_IP); if(DEBUG) printf("SEM ACCESS SwitchIO TASK\n\n"); OSSemPend(Sem_SwitchIO, 0, &err_sem); if(DEBUG) printf("SwitchIO Task in Loop\n"); } }