Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Vxworks code:
#include<stdio.h>
#include<VxWorks.h>
#include<taskLib.h>
#include<semLib.h>
void task1();
void task2();
void task3();
void task4();
void task5();
int taskId1,taskId2,taskId3,taskId4,taskId5;
SEM_ID semId;
void main()
semId=semMCreate(SEM_Q_FIFO);
taskId1=taskSpawn("TASK1",200,0x100,2400,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
taskDelay(10);
taskId2=taskSpawn("TASK2",180,0x100,2400,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
taskId3=taskSpawn("TASK3",170,0x100,2400,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);
taskId4=taskSpawn("TASK4",160,0x100,2400,(FUNCPTR)task4,0,0,0,0,0,0,0,0,0,0);
taskId5=taskSpawn("TASK5",150,0x100,2400,(FUNCPTR)task5,0,0,0,0,0,0,0,0,0,0);
void task1()
semTake(semId,WAIT_FOREVER);
printf("\nTASK 1\n");
taskDelay(10);
semGive(semId);
void task5()
semTake(semId,WAIT_FOREVER);
printf("\nTASK 5\n");
void task2()
printf("\nTASK 2\n");
void task3()
printf("\nTASK 3\n");
void task4()
printf("\nTASK 4\n");
}
Output:
Deadlock
Vxworks code:
#include"vxWorks.h"
#include"stdio.h"
#include"semaphore.h"
#include"taskLib.h"
int task1();
int task2();
SEM_ID semid1,semid2;
int main()
printf("\n*********************************\n");
semid1=semMCreate(SEM_Q_FIFO);
semid2=semMCreate(SEM_Q_FIFO);
tid1=taskSpawn("TASK1",150,0,2000,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
tid2=taskSpawn("TASK2",150,0,2000,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
return 0;
int task1()
semTake(semid1,WAIT_FOREVER);
taskDelay(10);
semTake(semid2,WAIT_FOREVER);
semGive(semid1);
semGive(semid2);
return 0;
int task2()
semTake(semid2,WAIT_FOREVER);
semTake(semid1,WAIT_FOREVER);
semGive(semid2);
semGive(semid2);
return 0;
Output:
Vxworks code:
#include<stdio.h>
#include<VxWorks.h>
#include<taskLib.h>
#include<semLib.h>
void task1();
void task2();
void task3();
void task4();
void task5();
int taskId1,taskId2,taskId3,taskId4,taskId5;
SEM_ID semId;
void main()
semId=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE);
taskId1=taskSpawn("TASK1",200,0x100,2400,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
taskDelay(10);
taskId2=taskSpawn("TASK2",180,0x100,2400,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
taskId3=taskSpawn("TASK3",170,0x100,2400,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);
taskId4=taskSpawn("TASK4",160,0x100,2400,(FUNCPTR)task4,0,0,0,0,0,0,0,0,0,0);
taskId5=taskSpawn("TASK5",150,0x100,2400,(FUNCPTR)task5,0,0,0,0,0,0,0,0,0,0);
}
void task1()
semTake(semId,WAIT_FOREVER);
printf("\nTASK 1\n");
taskDelay(10);
semGive(semId);
void task5()
semTake(semId,WAIT_FOREVER);
printf("\nTASK 5\n");
void task2()
printf("\nTASK 2\n");
}
void task3()
printf("\nTASK 3\n");
void task4()
printf("\nTASK 4\n");
Output:
Vxworks code:
#include<stdio.h>
#include<VxWorks.h>
#include<taskLib.h>
#include<semLib.h>
void task1();
void task2();
void task3();
void task4();
void task5();
int taskId1,taskId2,taskId3,taskId4,taskId5;
SEM_ID semId;
void main()
{
semId=semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);
taskId1=taskSpawn("TASK1",200,0x100,2400,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
taskId2=taskSpawn("TASK2",200,0x100,2400,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
taskId3=taskSpawn("TASK3",200,0x100,2400,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);
taskId4=taskSpawn("TASK4",200,0x100,2400,(FUNCPTR)task4,0,0,0,0,0,0,0,0,0,0);
taskId5=taskSpawn("TASK5",200,0x100,2400,(FUNCPTR)task5,0,0,0,0,0,0,0,0,0,0);
void task1()
semTake(semId,WAIT_FOREVER);
printf("\n*****TASK 1*****\n");
semGive(semId);
void task2()
semTake(semId,WAIT_FOREVER);
printf("\n*****TASK 2*****\n");
semGive(semId);
}
void task3()
semTake(semId,WAIT_FOREVER);
printf("\n*****TASK 3*****\n");
semGive(semId);
void task4()
semTake(semId,WAIT_FOREVER);
printf("\n*****TASK 4\*****n");
semGive(semId);
void task5()
semFlush(semId);
Output: