/* * Inicializálja a mikrovezérlõ I/O portjait, a perifériáit és az alkalmazást * a hozzá kapcsolódó összes modullal együtt. */ void Application_initialize() { /* Minden I/O port standard jelváltozási sebességû digitális kimenetre konfigurálása, és a hozzájuk tartozó tárolók törlése. */ TRISA = TRISB = TRISC = TRISD = TRISE = 0xFF; ANSELA = ANSELB = ANSELC = ANSELD = ANSELE = 0x00; SLRCON = LATA = LATB = LATC = LATD = LATE = 0x00; /* Az A/D átalakítók és a komparátorok kikapcsolása. */ ADCON0 = ADCON1 = ADCON2 = 0x00; C1ON_bit = C2ON_bit = false; /* Az alkalmazás moduljainak inicializálása. */ Display_initialize(); Alarm_initialize(); Timer_initialize(); Sensor_initialize(3.3f); Storage_initialize(); Serial_initialize(BAUD_9600); }
//****************************************************************** void main (void) { //XAInit(); //* XA Configuration OSInit(); //* Initialize uC/OS-II, The Real-Time Kernel BnPrintfWait = OSSemCreate(0); OSTaskCreate( AnPrintf, (void *)0, (void *)&AnPrintfStk[TASK_STK_SIZE-1], 0x01); OSTaskCreate( BnPrintf, (void *)0, (void *)&BnPrintfStk[TASK_STK_SIZE-1], 0x02); TimeTickConfig(); Serial_initialize(); OSStart(); }
int main(int argc, char **argv) { int ret; baseRateInfo_t info; pthread_attr_t attr; pthread_t baseRateThread; size_t stackSize; unsigned long cpuMask = 0x1; unsigned int len = sizeof(cpuMask); printf("**starting the model**\n"); fflush(stdout); rtmSetErrorStatus(Serial_M, 0); rtExtModeParseArgs(argc, (const char_T **)argv, NULL); /* All threads created by this process must run on a single CPU */ ret = sched_setaffinity(0, len, (cpu_set_t *) &cpuMask); CHECK_STATUS(ret, "sched_setaffinity"); /* Initialize semaphore used for thread synchronization */ ret = sem_init(&stopSem, 0, 0); CHECK_STATUS(ret, "sem_init:stopSem"); /* Create threads executing the Simulink model */ pthread_attr_init(&attr); ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); CHECK_STATUS(ret, "pthread_attr_setinheritsched"); ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); CHECK_STATUS(ret, "pthread_attr_setdetachstate"); /* PTHREAD_STACK_MIN is the minimum stack size required to start a thread */ stackSize = 64000 + PTHREAD_STACK_MIN; ret = pthread_attr_setstacksize(&attr, stackSize); CHECK_STATUS(ret, "pthread_attr_setstacksize"); /* Block signal used for timer notification */ info.period = 0.05; info.signo = SIGRTMIN; sigemptyset(&info.sigMask); MW_blockSignal(info.signo, &info.sigMask); signal(SIGTERM, MW_exitHandler); /* kill */ signal(SIGHUP, MW_exitHandler); /* kill -HUP */ signal(SIGINT, MW_exitHandler); /* Interrupt from keyboard */ signal(SIGQUIT, MW_exitHandler); /* Quit from keyboard */ Serial_initialize(); /* External mode */ rtSetTFinalForExtMode(&rtmGetTFinal(Serial_M)); rtExtModeCheckInit(2); { boolean_T rtmStopReq = false; rtExtModeWaitForStartPkt(Serial_M->extModeInfo, 2, &rtmStopReq); if (rtmStopReq) { rtmSetStopRequested(Serial_M, true); } } rtERTExtModeStartMsg(); /* Create base rate task */ ret = pthread_create(&baseRateThread, &attr, (void *) baseRateTask, (void *) &info); CHECK_STATUS(ret, "pthread_create"); pthread_attr_destroy(&attr); /* Wait for a stopping condition. */ MW_sem_wait(&stopSem); /* Received stop signal */ printf("**stopping the model**\n"); if (rtmGetErrorStatus(Serial_M) != NULL) { printf("\n**%s**\n", rtmGetErrorStatus(Serial_M)); } /* External mode shutdown */ rtExtModeShutdown(2); /* Disable rt_OneStep() here */ /* Terminate model */ Serial_terminate(); return 0; }