📄 os_simulator.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 + -