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

📄 interrupt.c

📁 vxworks
💻 C
字号:
#include "intLib.h"
#include "vxWorks.h"
#include "stdio.h"
#include "stdlib.h"
#include "semLib.h"
#include "taskLib.h"
#include "sysLib.h"
#include "tickLib.h"
#include "eventLib.h"
#include "msgQLib.h"

#define  MAX_MSGS    (10)  /* 消息队列长度 */
#define  MAX_MSG_LEN (100) /* 消息队列中消息的最大长度 */

#define SYSCLK_TICK 10   /* 系统时钟每秒的tick数 */
#define NO_ARG      0     /* 传递给函数的参数 */
#define STACK_SIZE  20000 /* 分配给每个任务的堆栈大小 */

static VOIDFUNCPTR *vector;
static FUNCPTR old_handler;
void softtimer(void);
void timer1(void);
void timer2(void);
void cosmos(void);

int tidSoftTimer,tidTimer1,tidTimer2;
int sysClkOringnalRate = 60;   /* 系统时钟的原始ISR */  
int T=0,T1=0,T2=0,pt1=0,pt2=0,T3=0; /*timer*/
int timer[10]={0};


SEM_ID  semIdEventSender1,semIdEventSender2;  /* 信号量资源ID,用来发送事件*/

MSG_Q_ID msgQueueId1,msgQueueId2;
char message1[]="T1\n";
char message2[]="T2\n";

void  PWM_Timer(void)
{
	
    semIdEventSender1 = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
    semIdEventSender2 = semBCreate(SEM_Q_FIFO, SEM_EMPTY);

msgQueueId1 = msgQCreate(MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY);
msgQueueId2 = msgQCreate(MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY);

    sysClkOringnalRate  = sysClkRateGet();
    printf("\n system clock original rate = %d", sysClkOringnalRate);	
    if (sysClkRateSet(SYSCLK_TICK) == ERROR)
    {
        printf("\n System clock rate setting failure!");

    }	
    if (sysClkConnect((FUNCPTR)cosmos, NO_ARG) == ERROR)
    {
        printf("\n System clock ISR connecting failure!");
        
    }
    sysClkEnable();

    
    tidTimer1 = taskSpawn("Timer1", 205, 0, STACK_SIZE,
                          (FUNCPTR) timer1,0,0,0,0,0,0,0,0,0,0);
    tidTimer2 = taskSpawn("Timer2", 200, 0, STACK_SIZE,
                          (FUNCPTR) timer2,0,0,0,0,0,0,0,0,0,0);

}


/******************************************************************
* cosmos - 系统时钟服务程序
*
* RETURNS: N/A
*/
void cosmos(void)
{
 
    T++;
    if(T-timer[1]>9){ 

		timer[1]=T;
		if(msgQSend(msgQueueId1,message1,sizeof(message1),NO_WAIT,MSG_PRI_NORMAL)==ERROR)
		logMsg("failed\n");
 		semGive(semIdEventSender1);
	}
    if(T-timer[2]>49){ 

		timer[2]=T;
		if(msgQSend(msgQueueId2,message2,sizeof(message2),NO_WAIT,MSG_PRI_NORMAL)==ERROR)
		logMsg("failed\n");
 		semGive(semIdEventSender2);
	}
}

void timer1(void)
{		
	int result;

        char messageBuf[100];

result = semEvStart(semIdEventSender1, VXEV01, 
                        EVENTS_OPTIONS_NONE);
    if (result == OK)
    {
         logMsg("\ntEventReceiver: semEvStart1() succ!\n");
    }
    else
    {
        logMsg("\ntEventReceiver: semEvStart1() failed!\n");
    
    }
	FOREVER{
	
	memset(messageBuf, 0, 100);
	if(msgQReceive(msgQueueId1,messageBuf,100,WAIT_FOREVER)==ERROR)
           logMsg("msgQReceive in T1 failed.\n");
	else logMsg("%s\n",messageBuf);
		
 
            
		semTake(semIdEventSender1, WAIT_FOREVER);
		T1=timer[1];
		logMsg("Get it!!! T1 is %d \n",T1);

        
	}



}

void timer2(void)
{
	
	int result;

	char messageBuf[100];

result = semEvStart(semIdEventSender2, VXEV01, 
                        EVENTS_OPTIONS_NONE);
    if (result == OK)
    {
         logMsg("\ntEventReceiver: semEvStart2() succ!\n");
    }
    else
    {
        logMsg("\ntEventReceiver: semEvStart2() failed!\n");
    
    }
	FOREVER{
        memset(messageBuf, 0, 100);
	if(msgQReceive(msgQueueId2,messageBuf,100,WAIT_FOREVER)==ERROR)
           logMsg("msgQReceive in T2 failed.\n");
	else logMsg("%s\n",messageBuf);

 
               
		semTake(semIdEventSender2, WAIT_FOREVER);
		T2=timer[2];
		logMsg("Get it!!! T2 is %d \n",T2);
		

 
	}


}

⌨️ 快捷键说明

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