📄 s7_inversion.c
字号:
#include "vxWorks.h"
#include "taskLib.h"
#include "semLib.h"
#include "stdio.h"
#define ITER 3
#define HIGH 102
#define MID 103
#define LOW 104
#define LONG_TIME (1<<25)
SEM_ID semMutex;
static void prioLow(void)
{
int i,j;
for (i=0;i<ITER;i++)
{
semTake(semMutex,WAIT_FOREVER);
printf("Low priority task locks semaphore.\n");
for (j=0;j<LONG_TIME;j++)
{}
printf("Low priority task unlocks semaphore.\n");
semGive(semMutex);
}
printf("....................Low priority task exited.\n");
}
static void prioMid(void)
{
int i;
taskDelay(7);
for (i=0;i<LONG_TIME*10;i++)
{
if ((i%LONG_TIME)==0)
{
printf("Mid priority task running.\n");
}
}
printf("----------------------Mid priority task exited.\n");
}
static void prioHigh(void)
{
int i,j;
taskDelay(20);
for (i=0;i<ITER;i++)
{
printf("High priority task trys to lock semaphore.\n");
semTake(semMutex,WAIT_FOREVER);
printf("High priority task locks semaphore.\n");
for (j=0;j<LONG_TIME;j++)
{}
printf("High priority task unlocks semaphore.\n");
semGive(semMutex);
}
printf("....................High priority task exited.\n");
}
void s7_inversion(void)
{
int i,low,mid,high;
logMsg("\n\n.......##RUNNING##.......\n\n\n\n\n",0,0,0,0,0,0);
semMutex = semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE);
if ((low = taskSpawn("low",LOW,0x100,20000,
(FUNCPTR)prioLow,0,0,0,0,0,0,0,0,0,0))==ERROR)
{
logMsg("taskSpawn prioLow failed.\n",0,0,0,0,0,0);
}
if ((mid= taskSpawn("mid",MID,0x100,20000,
(FUNCPTR)prioMid,0,0,0,0,0,0,0,0,0,0))==ERROR)
{
logMsg("taskSpawn prioMid failed.\n",0,0,0,0,0,0);
}
if ((high = taskSpawn("high",HIGH,0x100,20000,
(FUNCPTR)prioHigh,0,0,0,0,0,0,0,0,0,0))==ERROR)
{
logMsg("taskSpawn prioHigh failed.\n",0,0,0,0,0,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -