static void fSort(int a[], int begin, int end) { if (end <= begin) return; int t = a[begin]; int i = begin, j = end; while(i < j) { while(a[j] >= t && j > i) --j; a[i++] = a[j]; while(a[i] < t && i < j) ++i; a[j] = a[i]; } a[j] = t; fSort(a, begin, j - 1); fSort(a, j + 1, end); }
/* 프레임워크 계층의 스케쥴러 실행 함수입니다. FreeRTOS 계층의 vTaskStartScheduler()를 호출하는데, 그 전에 vTaskPrioritySet()를 이용해 각 태스크에 우선순위를 부여합니다. 큰 주기를 갖은 태스크는 낮은 우선 순위를 갖게 됩니다.*/ static void fInitTasks(void *arg) { UBaseType_t fIndex, fPriority; fIndex = ( UBaseType_t ) 0U; fPriority = fIndex + 1; fSort(); // debug_print_line_number(__func__,__LINE__); while(fNumberOfTasks > fIndex) { if(fIndex > 0) { if(fReadyTasks[fIndex-1].period != fReadyTasks[fIndex].period) { fPriority++; } } vTaskPrioritySet(fReadyTasks[fIndex].handler, tskIDLE_PRIORITY + fPriority); fIndex++; } vTaskDelete(NULL); }
void fastSort(int a[], int size) { fSort(a, 0, size - 1); }