首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有操作系统调度程序的时间片功能

没有操作系统调度程序的时间片功能
EN

Stack Overflow用户
提问于 2017-02-14 20:34:39
回答 2查看 473关注 0票数 1

我有一个处理数据的库的一部分,需要相当长的时间。在某些情况下,不可能等待函数的结果,但还有其他任务需要完成。在具有操作系统的系统上,这不是问题,因为调度程序可以帮助解决这一问题。但也有一些系统没有可用的操作系统。在这些系统上,我想实现一些类似的东西,即调用函数进行一些计算,并在给定的时间段(例如10毫秒)后返回。然后完成其他工作,数据处理函数再次被调用,并从它离开的位置开始。

代码语言:javascript
复制
while(1) {
    process_data(); // resumes from where it returned before, runs for 10ms and returns
    do_other_stuff();
    and_some_more_stuff();
}

如何才能做到这一点?

我已经找到了协议线程的概念,但这意味着我必须在每个x语句后面添加像PT_WAIT这样的东西,这可能需要10ms的计算时间。还有别的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-14 21:53:02

process_data函数实现为状态机。将过长的处理算法划分为多个较短的步骤/状态。在process_data中声明一个静态状态变量,以便它在每次调用时都记住它以前的状态。每次调用process_data时,它只执行一种状态。然后,当它再次被调用时,它会从它停止的地方重新开始,并执行下一步。使用此方法,每次调用所需的时间将由您在设计时如何划分步骤来确定。您将无法在运行时限制执行时间。

如果处理是在重复循环中执行的,那么也许您可以读取循环中的硬件计时器,并在达到时间限制时中断循环。但是在下一次调用时使用静态变量来记住处理停止的地方。

票数 3
EN

Stack Overflow用户

发布于 2017-02-14 20:42:46

只要other_stuff足够短,你就可以在一个定时器中完成它。

如果您不想使用(RT)操作系统的任务上下文节省功能,则必须自己实现它们-将长期运行的处理函数分解为多个部分,保存处理上下文并返回到主派发点。在下一步完成后,返回到保存的上下文,并从您停止的地方重新开始处理。(这或多或少是协议线程所做的事情)

最终的结果是,一旦你完成了,你可能已经实现了一个多任务时间分片操作系统的大多数部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42226347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档