#include "vxWorks.h"
#include "intLib.h"
#include "iv.h"
#include "taskLib.h"
#include "logLib.h"
#include "stdio.h"
#include "semLib.h"
void myISR(int);
void myTask();
SEM_ID myBinary;
#define MY_INUM 0xC011 /* Windows message, in fact */
/* usr entry */
void vxmain()
{
printf("inum = 0x%x, ivec = 0x%x/n", MY_INUM, INUM_TO_IVEC(MY_INUM));
myBinary = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
taskSpawn("tMyTask", 80, 0, 20000, (FUNCPTR)myTask, 0,0,0,0,0,0,0,0,0,0);
if (intConnect((VOIDFUNCPTR *)INUM_TO_IVEC(MY_INUM), (VOIDFUNCPTR)myISR, 0) != OK)
perror("intConnect()");
}
/* isr */
void myISR(int param)
{
logMsg("task is %s/n", (int)taskName((int)taskIdCurrent), 0, 0, 0, 0, 0);
semGive(myBinary);
}
/* task */
void myTask()
{
int count = 0;
while (1)
{
printf("myTask: wait/n");
semTake(myBinary, WAIT_FOREVER);
printf("myTask: semaphore taken, count = %d/n/n", count++);
}
}
编写一个windows程序,如下代码能实现向 模拟器VxSim0发送一个中断消息,从而触发中断服务程序。
HWND hwnd1;
hwnd1= ::FindWindow(NULL,"VxSim0");
if(hwnd1!=NULL)
{
printf("send message/n");
::SendMessage (hwnd1,0xC011,0,0);
}