SylixOS嵌入式操作系统|论坛

 找回密码
 注册
搜索
查看: 11328|回复: 10
打印 上一主题 下一主题

RM的测试例子

[复制链接]

17

主题

81

帖子

1101

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1101
楼主
发表于 2015-5-19 17:24:19 | 显示全部楼层
你说的是 RMS 调度器?

如果是,测试程序可以这样写:

#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <sched_rms.h>

sched_rms_t        rms;

#define __TIMEVAL_NSEC_MAX 1000000000

static void   timespecSub (struct timespec  *ptv1, const struct timespec  *ptv2)
{
    ptv1->tv_sec  -= ptv2->tv_sec;
    ptv1->tv_nsec -= ptv2->tv_nsec;

    if (ptv1->tv_nsec >= __TIMEVAL_NSEC_MAX) {
        ptv1->tv_sec++;
        ptv1->tv_nsec -= __TIMEVAL_NSEC_MAX;

    } else if (ptv1->tv_nsec < 0) {
        ptv1->tv_sec--;
        ptv1->tv_nsec += __TIMEVAL_NSEC_MAX;
    }
}

int main (int argc, char **argv)
{
        struct timespec  period = {0, 5 * 1000 * 1000};
        struct timespec  last   = {0, 0};
        struct timespec  now, diff;
        volatile int a;
       
        if (argc >= 2) {
                period.tv_nsec = atoi(argv[1]) * 1000 * 1000;
        }
       
        sched_rms_init(&rms, pthread_self());
       
        clock_gettime(CLOCK_MONOTONIC, &last);
       
        while (1) {
                sched_rms_period(&rms, &period); // 设置单调执行周期
               
                clock_gettime(CLOCK_MONOTONIC, &now);
                diff = now;
                timespecSub(&diff, &last);
                last = now;
               
                for (a = 0; a < 1000; a++); // 这个地方可以放一个随机延迟函数来模拟程序代码执行所花的时间,可以是随机的, 但不能超过 rms 周期时间
               
                printf("diff is %8lld sec %09ld nsec\n", diff.tv_sec, diff.tv_nsec);
        }
       
        return        0;
}


回复 支持 反对

使用道具 举报

17

主题

81

帖子

1101

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1101
沙发
发表于 2015-6-17 17:58:36 | 显示全部楼层
RMS 控制块只存在于用户进程,相当于一个全局变量,所以不存在销毁问题。

一个 RMS 只能服务一个线程,但一个线程可以有多个 RMS, 这样可以实现多周期调度。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|Acoinfo Inc. All Rights Reserved. ( 京ICP备15059934号

GMT+8, 2024-5-7 18:22 , Processed in 0.031140 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表