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

📄 os_simulator.c

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 C
字号:
#ifndef __DECLARE_H
#define __DECLARE_H
#include "declare.h"
#endif


#ifdef WIN32
#include <string.h>

static int count = 0;
OS_EVENT Qpro[MAXQUEUENUM];
msg_t msgqueue[MAXQUEUELENGTH];

msg_t *GlobeMsgAllocate()
{
    static int msgnextptr = 0;
    if(msgnextptr >= MAXQUEUELENGTH)
        msgnextptr =0;
    return &msgqueue[msgnextptr++];
}
unsigned short OSQFlush(OS_EVENT *pevent){return 0;}


OS_EVENT  *OSQCreate( void** start, unsigned short size)
{
	int i;
	for(i = 0; i < MAXQUEUENUM; i++)
	{
		if(Qpro[i].ID ==0)
		{
			Qpro[i].ID = i+1;
			Qpro[i].queuein = Qpro[i].queueout = 0;
			return &Qpro[i];
		}
	}
    return (OS_EVENT *)0;
}

unsigned short OSQPost(OS_EVENT *pevent,msg_t *msg)
{
    if(((pevent->queuein + 1)%MAXQUEUELENGTH) == pevent->queueout)
        return 30;//OS_Q_FULL
    //SIM_Lock();
    pevent->Qmsg[pevent->queuein++]=msg;
    pevent->queuein = pevent->queuein % MAXQUEUELENGTH;
    //SIM_Unlock();
    return 0;//OS_NO_ERR
}

void *OSQPend(OS_EVENT *pevent,unsigned int timeout,unsigned short *err)
{
    unsigned int i=0;
    msg_t *temp;
    for(;;)
    {
        //SIM_Lock();
        if(pevent->queueout == pevent->queuein)
        {
            //SIM_Unlock();
            if((timeout !=0)&&(i++ < timeout))
            {
                if(i == timeout)
                {
                    *err = 10;//OS_TIMEOUT
                    return (void*)0;
                }
                OSTimeDly(1);
                continue;
            }
            else if(timeout ==0)
            {
                OSTimeDly(1);
                continue;
            }
        }
        //SIM_Unlock();
        temp = pevent->Qmsg[pevent->queueout++];
        pevent->queueout= pevent->queueout % MAXQUEUELENGTH;
        *err = 0;//OS_NO_ERR
        return temp;
    }
}
void *OSQAccept(OS_EVENT *pevent)
{
    msg_t *temp;

    //GUI_LOCK();
    if(pevent->queueout == pevent->queuein)
    {
        //GUI_Unlock();
        return (void*)0;
    }
    //GUI_Unlock();
    temp = pevent->Qmsg[pevent->queueout++];
    pevent->queueout= pevent->queueout % MAXQUEUELENGTH;
    return temp;

}
OS_EVENT *OSQDel(OS_EVENT *pevent, INT8U opt, INT8U *err)
{
	pevent->ID = 0;
	return pevent;
}

OS_EVENT  *MYOSQCreate( msg_t *start, unsigned short size)
{
	return OSQCreate((void*)start,size);

}
unsigned short MYOSQPost(OS_EVENT *pevent,msg_t *msg)
{
	msg_t *temp = GlobeMsgAllocate();
	*temp = *msg;
	return OSQPost(pevent,temp);

}
unsigned short MYOSQPend(OS_EVENT *pevent,msg_t *msg,int timeout)
{
	unsigned short err;
	msg_t *temp = (msg_t *)OSQPend(pevent,timeout,&err);
	*msg = *temp;
	return err;
}
OS_EVENT *MYOSQDel(OS_EVENT *pevent, INT8U opt, INT8U *err)
{
	return OSQDel(pevent, opt, err);
}

OS_EVENT *OSSemCreate(INT16U cnt){return (OS_EVENT *)0;}
OS_EVENT *OSSemDel(OS_EVENT *pevent, INT8U opt, INT8U *err){return (OS_EVENT *)0;}
void      OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err){return;}
INT8U     OSSemPost(OS_EVENT *pevent) {return 0;}

int SD_FRead (SD_FILE *fp, void *buffer, unsigned int Length)
{
	return fread( buffer, sizeof( char ), Length, fp );
}
bool SD_FSeek (SD_FILE *fp, unsigned char nFrom, long offset)
{
	if(!fseek( fp, offset, nFrom))
	{
		return TRUE;
	}
	return FALSE;
}
SD_FILE *SD_FOpen (char *filename, unsigned char mode)
{
	char name[64];
	char file[12];
	int i,j=0;
	bool flag = TRUE;
	for(i=0;i<12;i++)
	{
		if(filename[i] != ' ')
			file[j++] = filename[i];
		else if(flag == TRUE)
		{
			flag = FALSE;
			file[j++] = '.';
		}
	}
	strcpy(name,"D:\\sdk_i_80h\\tools\\");
	strcat(name,file);
	return fopen(name, "r" );
}
int SD_FClose (SD_FILE *fp)
{
	return fclose(fp);
}
long SD_FGetLength( SD_FILE *fp )
{
	return _filelength( fp->_file );
}

typedef struct
{
	unsigned int * VarsPoint;
	int TaskID;
}task_user_var;

static task_user_var user_vars[10];
short  OSSetTaskOwnPtr(unsigned int * TaskVarsPoint, int TaskID)
{
	int point;

	for(point = 0 ; user_vars[point].TaskID != TaskID && point < 10; point++);
	if(point < 10)
	{
		user_vars[point].VarsPoint = TaskVarsPoint;
		return TRUE;
	}
	for(point = 0; user_vars[point].TaskID != 0 && point <10 ; point++);
	if(point == 10)
		return FALSE;
	user_vars[point].TaskID = TaskID;
	user_vars[point].VarsPoint = TaskVarsPoint;
	return TRUE;
}

unsigned int *OSGetTaskOwnPtr(int TaskID)
{
	int point;
	for(point=0; user_vars[point].TaskID != TaskID && point < 10; point++);
	if(point == 10)
		return NULL;
	return user_vars[point].VarsPoint;
}
#endif

⌨️ 快捷键说明

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