📄 5timeslice.c
字号:
/*如果没有特殊说明,windsh中直接运行的任务优先级默认是100,
例子中任务优先级是101,保证比 sched 低*/
/*printf不是理想选择,因为它可能被阻塞,所以选择了 logMsg(),
不会引起阻塞,除非logMsg队列已满*/
/* ->logFdSet 1 将定位logMsg()输出到虚拟控制输出台*/
#include "vxWorks.h"
#include "taskLib.h"
#include "kernelLib.h"
#include "sysLib.h"
#include "logLib.h"
void taskOne(void);
void taskTwo(void);
void taskThree(void);
#define ITER1 10
#define ITER2 10
#define PRIORITY 101
#define TIMESLICE sysClkRateGet()
#define LONG_TIME 1000000
void sched()
{
if(kernelTimeSlice(TIMESLICE)==OK)
printf("\n\n\n\n\n\nTIMESLICE=%d second \n\n\n",TIMESLICE/60);
if(taskSpawn("task1",PRIORITY,0x100,20000,taskOne,0,0,0,0,0,0,0,0,0,0)==ERROR)
printf("taskSpawn task1 failed\n ");
if(taskSpawn("task2",PRIORITY,0x100,20000,taskTwo,0,0,0,0,0,0,0,0,0,0)==ERROR)
printf("taskSpawn task2 failed\n ");
if(taskSpawn("task3",PRIORITY,0x100,20000,taskThree,0,0,0,0,0,0,0,0,0,0)==ERROR)
printf("taskSpawn task3 failed\n ");
}
void taskOne()
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("this is task 1\n",0,0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
void taskTwo()
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("this is task 2\n",0,0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
void taskThree()
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("this is task 3\n",0,0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -