1. 程式人生 > >如何建立實時程序 【轉】

如何建立實時程序 【轉】

一直沒有注意到的死角,linux有幾個系統呼叫跟排程策略有關

sched_get_priority_max 取得靜態優先順序的上限
sched_get_priority_min 取得靜態優先順序的下限
sched_getparam 取得程序的排程引數
sched_getscheduler 取得指定程序的排程策略
sched_rr_get_interval 取得按RR演算法排程的實時程序的時間片長度
sched_setparam 設定程序的排程引數
sched_setscheduler 設定指定程序的排程策略和引數
sched_yield 程序主動讓出處理器,並將自己等候排程佇列隊尾

//範例程式 注意當程序變成實時程序時非常霸道,要是此時進入死迴圈會讓你很難受的

#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main()
{
int rc,old_scheduler_policy;
struct sched_param my_params;

old_scheduler_policy=sched_getscheduler(0);

my_params.sched_priority=sched_get_priority_max(SCHED_RR);// 儘可能高的實時優先順序
printf("SCHED_OTHER = %d SCHED_FIFO =%d SCHED_RR=%d \n",SCHED_OTHER,SCHED_FIFO,SCHED_RR);
printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to change the current scheduler and priority to SCHED_RR\n");
getchar();
rc=sched_setscheduler(0,SCHED_RR,&my_params);
if(rc<0)
{
   perror("sched_setscheduler to SCHED_RR error");
   exit(0);
}
old_scheduler_policy=sched_getscheduler(0);
printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to change the current scheduler and priority to SCHED_FIFO\n");
getchar();

rc=sched_setscheduler(0,SCHED_FIFO,&my_params);
if(rc<0)
{
   perror("sched_setscheduler to SCHED_FIFO error");
   exit(0);
}
old_scheduler_policy=sched_getscheduler(0);

printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to exit\n");
getchar();

return 0;
}