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