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

📄 ppsmext.c

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 C
字号:
#include <string.h>
#include <asixsys.h>
#include <sys\ppsmtype.h>
#include <sys\ppsmmsg.h>

/* they are defined in rtc.c */
extern void TK_Scan_Start(void);
extern void TK_Scan_Stop(void);


STATUS AdvSendMessage(U32 taskId, P_MESSAGE msg, U8 flag)
{
	int id, i;
	
	if( msg == NULL )
		return PPSM_ERROR;
		
	i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
	id = i+1;
	if( (id < 1) || (id > TASKNUM) )
		return PPSM_ERR_TASK_ID;
	
	if( SysSendMessage((ID)id, (PMSG)msg) == SYS_OK )
		return PPSM_OK;
	else
		return PPSM_ERROR;
		
	return PPSM_OK;
}

STATUS AdvTaskCreate(P_U32 taskId, 
					 P_VOID procAddr, 
					 S16 xSrc, S16 ySrc, S16 xDest, S16 yDest, 
					 S32 stackSize, 
					 U16 newScreen,
					 U16 screenWidth, U16 screenHeight, 
					 P_U8 bitmap )
{
	int i;
	TASKDESCRIPTIONLIST *ptskdsp = TaskDescription;

	i = 0;
	while((ptskdsp!=NULL)&&(ptskdsp->desp->entry != procAddr) ) 
	{
		ptskdsp = ptskdsp->next;
		i++;
	}

	if(i == TASKNUM)
		return PPSM_ERROR;
	
	*taskId = (U32)&gSysTcbTbl[APP_ID_BEGIN+i-1];
	
	return PPSM_OK;	
}

STATUS TaskHook(U32 taskId, P_VOID entryCallback, P_VOID exitCallback)
{
	SYSTCB *pTcb;
	int id, i;
	
	/* check parameters */
	if(entryCallback == NULL || exitCallback == NULL)
		return PPSM_ERROR;
	
	i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
	id = i+1;
	if( (id < 1) || (id > TASKNUM) )
		return PPSM_ERROR;
	
	pTcb = (SYSTCB *)taskId;
	pTcb->entryCallback = entryCallback;
	pTcb->exitCallback = exitCallback;
	
	return PPSM_OK;
}

STATUS AdvMessageDelete(U32 taskId, U16 type, U32 shortData)
{
	T_MSG	**ppk_msg, *pmsg;
	ID		mbxid, id;
	int		status, i;
	
	i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
	id = i+1;
	if( (id < 1) || (id > TASKNUM) )
		return PPSM_ERROR;
	
	ppk_msg = &pmsg;
	mbxid = id;
	
	while(1)
	{
		pmsg = NULL;
		status = trcv_msg( ppk_msg, mbxid, 0 );
		
		if(status == E_TMOUT)
			break;
			
		if(pmsg)
			SysLfree(*ppk_msg);
	}
	
	return PPSM_OK;
}

STATUS TaskTerminate(U32 taskId)
{
	ID id, i;
	MSG msg;
	
	i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
	id = i+1;
	if( (id < 1) || (id > TASKNUM) )
		return PPSM_ERROR;
	
	msg.message = SM_END;
	msg.lparam = id;
	if(SysSendMessage(SYSTASK_ID, &msg) == SYS_OK)
		return PPSM_OK;
	
	return PPSM_ERROR;
}

STATUS MoveBlock(P_U32 srcAddr, P_U32 destAddr, U32 size)
{
	char *sa, *da, *oa;
	char *srcaddr, *destaddr;
	U32	oversize=0;
	
	if((srcAddr == NULL) || (destAddr == NULL))
		return PPSM_ERROR;
	if((size > 20000) || (size == 0))
		return PPSM_ERROR;
	
	if(srcAddr == destAddr)
		return PPSM_OK;
	
	srcaddr = (char *)srcAddr;
	destaddr = (char *)destAddr;

	if(srcaddr > destaddr)
	{
		sa = destaddr, da = srcaddr;
	}else{
		sa = srcaddr, da = destaddr;
	}
	
	if(sa + size <= da)
	{
		memcpy(destaddr, srcaddr, size);
		return PPSM_OK;
	}
	
	oversize = sa + size - da;
	oa = (char *)SysLmalloc(oversize);
	if(oa == NULL)
		return PPSM_ERROR;

	if(srcaddr > destaddr)
	{
		memcpy(oa, srcaddr, oversize);
		memcpy(destaddr, oa, oversize);
		memcpy(destaddr+oversize, srcaddr+oversize, size - oversize);
	}else{
		memcpy(oa, destaddr, oversize);
		memcpy(destaddr+size-oversize, oa, oversize);
		memcpy(destaddr, srcaddr, size - oversize);
	}
	
	SysLfree(oa);
	
	return PPSM_OK;
}


STATUS TaskStart(U32 taskId)
{
	MSG msg;
	ID i,id;
	
	i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
	id = i+1;
	if( (id < 1) || (id > TASKNUM) )
		return PPSM_ERROR;

	memset( &msg, 0, sizeof(MSG) );
	msg.message = SM_START;
	msg.lparam = id;
	if(SysSendMessage(SYSTASK_ID, &msg) == SYS_OK)
		return PPSM_OK;
	
	return PPSM_ERROR;
}
// following functions defined in pendev.c
/*
void PenIrptEnable(void)
{
//	TK_Scan_Start();
}

void PenIrptDisable(void)
{
//	TK_Scan_Stop();
}
*/

⌨️ 快捷键说明

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