vxworks 신호량의 의문점
/* include files */
#include "vxWorks.h"
#include "wdLib.h"
#include "stdio.h"
#include "semLib.h"
#include "taskLib.h"
#include "usrLib.h"
#include "sysLib.h"
/* defines */
#define TASK_PRIORITY 101
#define TASK_STACK_SIZE 5000
#define TIME_BETWEEN_INTERRUPTS 1 /* 1 tick */
#define TASK_WORK_TIME 2 /* 2 ticks */
#define NUM_OF_GIVES 30
/* globals */
/* counting or binary semaphore ID */
LOCAL SEM_ID semId = NULL;
/* watchdog ID */
LOCAL WDOG_ID wdId = NULL;
/* tid of syncTask */
LOCAL int syncTaskTid = 0;
/* Number of times semGive is called */
LOCAL int numToGive = NUM_OF_GIVES;
/* forward declaratiuon */
void syncISR(int);/* ISR to unblock syncTask */
void cleanUp (); /* cleanup routine */
void syncTask (); /* task that needs to be synchronized
* with external events */
/******************************************
* countingSemDemo - demonstrates
task synchronization using counting
* semaphores. User can also select to
use binary semaphore instead of
* counting semaphore in this demonstration,
for comparision between the two
* semaphores.
*
* RETURNS: OK or ERROR
*
*/
STATUS countingSemDemo (
char semType /* counting semaphore type
'c' or binary semaphore
* type 'b'
*/)
{
switch (semType)
{
case 'c':
case 'C':
if ((semId = semCCreate(SEM_Q_PRIORITY,0)) == NULL)
{
perror ("semCCreate");
return (ERROR);
}
break;
case 'b':
case 'B':
if ((semId = semBCreate(SEM_Q_PRIORITY,SEM_EMPTY)) == NULL)
{
perror ("semBCreate");
return (ERROR);
}
break;
default:
printf ("Unknown semType-- must be 'c' or 'b'
");
return (ERROR);
}
if ((wdId = wdCreate()) == NULL)
{
perror ("wdCreate");
cleanUp ();
return (ERROR);
}
if ((syncTaskTid = taskSpawn ("tsyncTask", TASK_PRIORITY,0,TASK_STACK_SIZE,(FUNCPTR) syncTask,0,0,0,0,0,0,0,0,0,0)) == ERROR)
{
perror ("taskSpawn");
cleanUp();
return (ERROR);
}
/* watchdog simulates hardware interrupts */
if (wdStart (wdId, TIME_BETWEEN_INTERRUPTS,(FUNCPTR) syncISR, numToGive)== ERROR)
{
perror ("wdStart");
cleanUp ();
return (ERROR);
}
/* arbitrary delay to allow
program to complete before clean up */
taskDelay (sysClkRateGet() +((TASK_WORK_TIME + 2) * numToGive));
cleanUp();
return (OK);
}
/*************************************************
* syncTask - synchronizes with interrupts using
* counting or binarysemaphores.
*/
void syncTask (void)
{
int eventCount = 0;
FOREVER
{
if (semTake (semId, WAIT_FOREVER) == ERROR)
{
perror ("syncTask semTake");
return;
}
/* Do "work" */
taskDelay (TASK_WORK_TIME);
semShow (semId,1);
eventCount++;
printf ("semaphore taken %d times
", eventCount);
}
}
/************************************************
* syncISR - simulates a hardware device
which generates interrupts very
* quickly and synchronizes with
syncTask using semaphores.
*/
void syncISR(int times)
{
semGive (semId);
times--;
if (times > 0)
wdStart (wdId, TIME_BETWEEN_INTERRUPTS,(FUNCPTR) syncISR, times);
}
/********************************************
* cleanUP - deletes the syncTask, deletes the
* semaphore and the watchdog timer previously created
* by countingSemDemo.*/
void cleanUp ()
{
if (syncTaskTid)
taskDelete (syncTaskTid);
if (semId)
semDelete (semId);
if (wdId)
wdDelete (wdId);
}
실행 결과:
->sp countingSemDemo,'c'
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 2
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 1 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 3
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 2 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 4
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 3 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 5
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 4 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 6
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 5 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 7
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 6 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 8
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 7 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 9
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 8 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 10
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 9 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 11
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 10 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 12
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 11 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 13
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 12 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 14
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 13 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 15
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 14 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 15
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 15 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 14
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 16 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 13
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 17 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 12
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 18 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 11
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 19 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 10
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 20 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 9
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 21 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 8
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 22 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 7
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 23 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 6
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 24 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 5
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 25 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 4
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 26 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 3
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 27 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 2
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 28 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 1
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 29 times
Semaphore Id : 0x23ce9d0
Semaphore Type : COUNTING
Task Queuing : PRIORITY
Pended Tasks : 0
Count : 0
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 30 times
->sp countingCountDemo ‘b’ Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 1 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 2 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 3 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 4 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 5 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 6 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 7 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 8 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 9 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 10 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 11 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 12 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 13 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 14 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : FULL
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 15 times
Semaphore Id : 0x23ce9d0
Semaphore Type : BINARY
Task Queuing : PRIORITY
Pended Tasks : 0
State : EMPTY
Options : 0x1 SEM_Q_PRIORITY
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
semaphore taken 16 times
이 문제는 잠시 여기에 두었다가 나중에 천천히 연구해 보자. 만약 어떤 고수가 조언을 해 줄 수 있다면 대단히 고맙지 않을 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.