⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 ks8695的ide硬盘程序
💻 C
字号:
#if 0
#include <stdio.h>
#include <pthread.h>

#include "Vxworks2Linux.h"

#define EVENT_OK1 0x8000
#define EVENT_OK2 0x4000

#define MAXSTACK 100
int stack[MAXSTACK][2];
int size=0;

SEM_ID sem;
MSG_Q_ID msgQid;
WDOG_ID WatchDogId;
unsigned int WDCount=0;

int g_task_id1;
int g_task_id2;


typedef struct MyMsgStru
{
  unsigned int Function;
  unsigned char Buf[40];
}MYMSGSTRU;

typedef struct MyWdStru
{
  unsigned int Count;
  unsigned int Flag;
}MYWDSTRU;

MYWDSTRU MyWdData;
int TestData;

void ReadData1(void){
  while(1)
  {
    semTake(sem,WAIT_FOREVER);
    TestData = 0x55;
    printf("TestData = %x\n",TestData);
    sleep(1);
    semGive(sem);
  }
}

void ReadData2(void){
  while(1)
  {
    semTake(sem,WAIT_FOREVER);
    TestData = 0xaa;
    printf("TestData = %x\n",TestData);
    sleep(1);
    semGive(sem);
  }
}

void QueSend(void)
{
  MYMSGSTRU msg;
  int function=0;
  while(1)
  {
    function++;
    memset(&msg.Buf[0],0,40);
    msg.Function = function;
    memcpy(&msg.Buf[0],"ABCD1234",8);
    msgQSend(msgQid,(char *)&msg,
					sizeof(MYMSGSTRU),NO_WAIT,MSG_PRI_NORMAL);
	  sleep(2);
  }
}

void MyTimerProc(int Para)
{
  MYWDSTRU *pWdData;
  pWdData = (MYWDSTRU *)Para;
  if(pWdData->Flag)
  {
    pWdData->Count++;
    printf("MyWdData.Count= %d\n",pWdData->Count);
  }
  wdStart (WatchDogId,200,(FUNCPTR)MyTimerProc,(int)pWdData);
}

void QueRecv(void)
{
  MYMSGSTRU msg;
  WatchDogId = wdCreate();
  MyWdData.Count = 1;
  MyWdData.Flag = 1;
  wdStart (WatchDogId,200,(FUNCPTR)MyTimerProc,(int)&MyWdData);
  while(1)
  {
    if(msgQReceive(msgQid,(char *)&msg,sizeof(MYMSGSTRU),WAIT_FOREVER) != ERROR)
    {
      printf("function = %d  %s\n",msg.Function,&msg.Buf[0]);
    }
    else
      printf("msgQReceive ERROR\n");
  }
}

void EventSend(void)
{
  sleep(1);
  while(1)
  {
    sleep(1);
    eventSend(g_task_id2,EVENT_OK1);
    sleep(1);    
    eventSend(g_task_id2,EVENT_OK2); 
    sleep(1); 
    eventSend(g_task_id2,EVENT_OK2|EVENT_OK1); 
  }
}

void EventRev(void)
{
  int nEvent;
  while(1)
  {
    if(eventReceive(EVENT_OK2|EVENT_OK1, EVENTS_WAIT_ANY, WAIT_FOREVER, &nEvent)==OK)
    {
      if(nEvent & EVENT_OK1)
        printf("This is Event 1\n");
      if(nEvent & EVENT_OK2)
        printf("This is Event 2\n");
    }
    else
      printf("Receive Event Error.\n");
    
  }
  
}
int main(void)
{
  int task_id1;
  int task_id2;
  int task_id3;
  int task_id4;
 
  
  printf("initLinuxTask\n");
  initLinuxTask();
  printf("VxSemLibInit\n");
  VxSemLibInit();
  printf("VxEventLinInit\n");
  VxEventLibInit();
  printf("VxWdLibInit\n");
  VxWdLibInit();
  printf("Create B sem\n");
  sem = semBCreate(SEM_Q_FIFO,1);
  printf("Create task1\n");
  msgQid = msgQCreate(20,sizeof(MYMSGSTRU),MSG_Q_FIFO);   
  task_id1 = taskSpawn("sem1",50,0,0x2000,\
					(FUNCPTR)ReadData1,0,0,0,0,0,0,0,0,0,0);
	printf("Create task2\n");
	task_id2 = taskSpawn("sem2",51,0,0x2000,\
					(FUNCPTR)ReadData2,0,0,0,0,0,0,0,0,0,0);
	task_id3 = taskSpawn("que1",53,0,0x2000,\
					(FUNCPTR)QueSend,0,0,0,0,0,0,0,0,0,0);
  task_id4 = taskSpawn("que2",54,0,0x2000,\
					(FUNCPTR)QueRecv,0,0,0,0,0,0,0,0,0,0);
	g_task_id2 = taskSpawn("EventRev",48,0,0x2000,\
					(FUNCPTR)EventRev,0,0,0,0,0,0,0,0,0,0);
								
	g_task_id1 = taskSpawn("EventSend",47,0,0x2000,\
					(FUNCPTR)EventSend,0,0,0,0,0,0,0,0,0,0);
	pthread_join(g_task_id1,NULL);
	pthread_join(g_task_id2,NULL);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -