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

📄 ucos2.c

📁 该代码采用c5400dsp的汇编语言和c语言实现ucos操作系统
💻 C
字号:
#include "includes.h" 

#define  TASK_STK_SIZE                 256       /* Size of each task's stacks (# of WORDs)            */
#define  N_TASKS                        2       /* Number of identical tasks                          */

extern void StartTimer(void); 

OS_STK           TaskStk[N_TASKS][TASK_STK_SIZE];     /* Tasks stacks                                  */
OS_STK           TaskStartStk[TASK_STK_SIZE];
                         
void   TaskStart(void *data);

short counter1;

int btimer500ms, btimer1ms;
int hpirecflag;

typedef struct
{
	unsigned int head ;				/*framehead  */
	unsigned int length;			/*framelength*/
	unsigned int func;				/*func type  */
	unsigned int data[253];			/*the data   */
} HPIFRAME ;

typedef struct
{
	unsigned int len;
	unsigned int buf[15];
} msg_t;

HPIFRAME hpiinbuf;
HPIFRAME hpioutbuf;

#pragma DATA_SECTION(hpiinbuf,".hpibuffer")
#pragma DATA_SECTION(hpioutbuf,".hpibuffer")

main()
{  
	
	INIT_C54(); 
	
	counter1= 0; 
	
	OSInit();
	                    
	OSTaskCreate(TaskStart, (void *)&counter1, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 1);

	OSStart();
}

void TaskStart(void *data)
{   
	OS_EVENT *msg_queue;
	void *MessageStorage[20];
	msg_t *msg;
	OS_Q_DATA info;
	unsigned int i, err;
	
	OS_ENTER_CRITICAL();
	StartTimer();							/* install the C549 Timer */
	OS_EXIT_CRITICAL();
	
	msg_queue = OSQCreate(MessageStorage, 20);
	
	for(;;)
	{
   		if (hpirecflag==1)
   		{
			hpirecflag=0;
   			
   			switch(hpiinbuf.func)
   			{
   			case 0:// save to mqueue
   				msg = (msg_t *) malloc(sizeof(msg_t));
   				msg->len = hpiinbuf.length-3;
   				for (i=0; i<msg->len; ++i)
   					msg->buf[i] = hpiinbuf.data[i];
   				err = OSQPost(msg_queue, msg);
   				if (err != OS_NO_ERR)
   					free(msg);
   				break;
   			case 1:// fetch from mqueue
   				msg = OSQAccept(msg_queue);
   				if (msg)
   				{
   					unsigned int *p=(unsigned int *)&hpioutbuf;
   					*p = 0xaa03 + msg->len;
   					*(p+1) = 0x0100 + msg->buf[0];
   					for (i=0; i<msg->len-1; i+=2)
   					{
   						*(p+i/2+2) = msg->buf[i+1] << 8;
   						*(p+i/2+2) += msg->buf[i+2];
   					}
					hpidsp_host();
   					free(msg);
   				}
   				break;
   			case 2:// inquire mq state
   				err = OSQQuery(msg_queue, &info);
   				if (err == OS_NO_ERR)
   				{
   					unsigned int *p=(unsigned int *)&hpioutbuf;
   					*p = 0xaa03 + 2;
   					*(p+1) = 0x0200 + info.OSQSize;
   					*(p+2) = info.OSNMsgs << 8;
					hpidsp_host();
   				}
   				break;
   			}
		}
	OSTimeDly(50); 	
	}
}

⌨️ 快捷键说明

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