📄 test.c
字号:
#include "includes.h"
#include "ringbuffer.h"
char *filename = "D:\\workspace\\mpeg2dec-0.4.1\\vc++\\zdf.ts";
char *outfile = "D:\\workspace\\audio.ts";
#define RINGBUFFER_SIZE (1024*1024)
RingBuffer_s sys_rb;
FILE *fp;
typedef void (*task)(void *p_arg);
#define TASK_STK_SIZE 5120
#define TASK_START_PRIO 10
#define Recv_PRIO 11
#define Send_PRIO 12
#define Demux_PRIO 13
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK RecvStk[TASK_STK_SIZE];
OS_STK SendStk[TASK_STK_SIZE];
OS_STK DemuxStk[TASK_STK_SIZE];
RTOS_Mailbox mail;
struct message
{
int c;
};
struct message sys;
static int send_flag = 0;
void TaskStart (void *pdata)
{
int i;
char s[100];
INT16S key;
pdata = pdata;
// OSStatInit();
while (1)
{
if (PC_GetKey(&key) == TRUE) {
if (key == 0x1B)
{
exit(0);
}
if(key == 's') send_flag = 1;
else send_flag = 0;
printf("get key : %c\n", key);
sys.c = key;
RTOS_MailboxSend(mail, &sys);
}
OSTimeDly(1);
}
}
void send_task (void *pdata)
{
int i;
INT16S key;
pdata = pdata;
printf("send task ...\n");
while (1)
{
sys.c = 'a';
if(send_flag) RTOS_MailboxSend(mail, &sys);
OSTimeDly(1);
}
}
void recv_task (void *pdata)
{
int i;
char s[100];
struct message *pmsg = NULL;
INT16S key;
pdata = pdata;
// OSStatInit();
while (1)
{
//printf("recv...\n");
pmsg = (struct message*)RTOS_MailboxWait(mail, true);
if(pmsg)
{
printf("recive a key = %c \n", pmsg->c);
}
else printf("no recive message\n");
OSTimeDly(1);
}
}
void ringbuffer_init(RingBuffer_s *rb, int size)
{
u8 *buf;
buf = (u8*)malloc(size);
if(!buf) return ;
printf("ts buffer addr 0x%x\n", buf);
fp = fopen(filename, "rb");
if(!fp) return;
printf("open file ok..\n");
//填充缓冲
if(fread(buf, size, 1, fp))
{
rb_fill_init(rb, buf, size);
rb->fp = fp;
}
else
rb_init(rb, buf, size);
}
void demux_task (void *pdata)
{
int res;
u8 buff[204];
int tick;
ringbuffer_init(&sys_rb, RINGBUFFER_SIZE);
while(1)
{
res = rb_filter(&sys_rb, buff, 204);
if(res < 0) sys.c = '0';
else
//printf("res = %d \n", res);
sys.c = '1';
RTOS_MailboxSend(mail, &sys);
//OSTimeDly(1);
}
}
RTOS_Thread create_thread(u8 *thread_name, task func, void *arg, u8 prio, void *stack, u32 size)
{
u8 err;
if(OSTaskCreateExt(func, arg, (OS_STK *)((int)stack + size - 1),
// if(OSTaskCreateExt(func, arg, (OS_STK *)&(((int*)stack)[size-1]),
prio, prio,
(OS_STK *)stack, size,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR) == OS_NO_ERR)
{
if(thread_name)
OSTaskNameSet(prio, thread_name, &err);
else OSTaskNameSet(prio, "thread ?", &err);
return (RTOS_Thread) (OSTCBPrioTbl[prio]);
}
return 0;
}
int init_mail()
{
mail = RTOS_MailboxCreate(NULL);
}
int main(int argc, char *argv[])
{
OSInit();
printf("ucos 2.85 env\n");
init_mail();
create_thread("main thread", TaskStart, (void *)0, TASK_START_PRIO, TaskStartStk, TASK_STK_SIZE);
create_thread("recv thread", recv_task, (void *)0, Recv_PRIO, RecvStk, TASK_STK_SIZE);
create_thread("send thread", send_task, (void *)0, Send_PRIO, SendStk, TASK_STK_SIZE);
create_thread("demux thread", demux_task, (void *)0, Demux_PRIO, DemuxStk, TASK_STK_SIZE);
OSStart();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -