- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vxworks任务调度学习代码.
时间片轮转调度
我们来看一个具体的例子,在这个程序中,用户启动了三个优先级相同的任务,并通过对kernelTimeSlice(TIMESLICE)的调用启动了时间片轮转调度。
例1:时间片轮转调度
/* includes */
#include vxWorks.h
#include taskLib.h
#include kernelLib.h
#include sysLib.h
#include stdio.h
/* function prototypes */
void taskOne(void);
void taskTwo(void);
void taskThree(void);
/* globals */
?
#define ITER1 100
?
#define ITER2 10
?
#define PRIORITY 101
?
#define TIMESLICE sysClkRateGet()
?
#define LONG_TIME 0xFFFFFFL
void sched(void) /* function to create the three tasks */
?
{
?
? int taskIdOne, taskIdTwo, taskIdThree;
?
? if (kernelTimeSlice(TIMESLICE) == OK)
?
? /* turn round-robin on */
?
??? printf(\n\n\n\n\t\t\tTIMESLICE = %d seconds\n\n\n, TIMESLICE / 60);
? /* spawn the three tasks */
?
? if ((taskIdOne = taskSpawn(task1, PRIORITY, 0x100, 20000, (FUNCPTR)taskOne,
?
??? 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)
?
??? printf(taskSpawn taskOne failed\n);
?
? if ((taskIdTwo = taskSpawn(task2, PRIORITY, 0x100, 20000, (FUNCPTR)taskTwo,
?
??? 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)
?
??? printf(taskSpawn taskTwo failed\n);
?
? if ((taskIdThree = taskSpawn(task3, PRIORITY, 0x100, 20000, (FUNCPTR)
?
??? taskThree, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)
?
??? printf(taskSpawn taskThree failed\n);
?
}??
void taskOne(void)
?
{
?
? unsigned int i, j;
?
? for (i = 0; i ITER1; i++)
?
? {
?
??? for (j = 0; j ITER2; j++)
?
????? printf(task1\n);
?
??? /* log messages */
?
??? for (j = 0; j LONG_TIME; j++)
?
????? ;
?
??? /* allow time for context switch */
?
? }
?
}
void taskTwo(void)
?
{
?
? unsigned int i, j;
?
? for (i = 0; i ITER1; i++)
?
? {
?
??? for (j = 0; j ITER2; j++)
?
????? printf(task2\n);
?
??? /* log messages */
?
??? for (j = 0; j LONG_TIME; j++)
?
????? ;
?
??? /* allow time for context switch */
?
? }
?
}
?
void taskThree(void)
?
{
?
? unsigned int i, j;
?
? for (i = 0; i ITER1; i++)
?
? {
?
??? for (j = 0; j ITER2; j++)
?
????? printf(task3\n);
?
??? /* l
文档评论(0)