| 352 | } |
| 353 | |
| 354 | void __DSP_insert_task(DSPTaskInfo* task) |
| 355 | { |
| 356 | DSPTaskInfo* temp; |
| 357 | |
| 358 | if (__DSP_first_task == NULL) |
| 359 | { |
| 360 | __DSP_first_task = __DSP_last_task = __DSP_curr_task = task; |
| 361 | task->next = task->prev = NULL; |
| 362 | } |
| 363 | else |
| 364 | { |
| 365 | temp = __DSP_first_task; |
| 366 | |
| 367 | while (temp) |
| 368 | { |
| 369 | if (task->priority < temp->priority) |
| 370 | { |
| 371 | task->prev = temp->prev; |
| 372 | temp->prev = task; |
| 373 | task->next = temp; |
| 374 | if (task->prev == NULL) |
| 375 | { |
| 376 | __DSP_first_task = task; |
| 377 | } |
| 378 | else |
| 379 | { |
| 380 | (task->prev)->next = task; |
| 381 | } |
| 382 | break; |
| 383 | } |
| 384 | temp = temp->next; |
| 385 | } |
| 386 | |
| 387 | if (temp == NULL) |
| 388 | { |
| 389 | __DSP_last_task->next = task; |
| 390 | task->next = NULL; |
| 391 | task->prev = __DSP_last_task; |
| 392 | __DSP_last_task = task; |
| 393 | } |
| 394 | } |
| 395 | } |
| 396 | |
| 397 | void __DSP_remove_task(DSPTaskInfo* task) |
| 398 | { |