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

📄 satch.c

📁 xenomai 很好的linux实时补丁
💻 C
字号:
#include <stdio.h>#include <unistd.h>#include <string.h>#include <native/task.h>#include <native/queue.h>#define CONSUMER_TASK_PRI    1#define CONSUMER_STACK_SIZE  8192#define PRODUCER_TASK_PRI    2#define PRODUCER_STACK_SIZE  8192#define CONSUMER_WAIT 150#define PRODUCER_TRIG 40#define MAX_STRING_LEN 40static const char *satch_s_tunes[] = {    "Surfing With The Alien",    "Lords of Karma",    "Banana Mango",    "Psycho Monkey",    "Luminous Flesh Giants",    "Moroccan Sunset",    "Satch Boogie",    "Flying In A Blue Dream",    "Ride",    "Summer Song",    "Speed Of Light",    "Crystal Planet",    "Raspberry Jam Delta-V",    "Champagne?",    "Clouds Race Across The Sky",    "Engines Of Creation"};static RT_TASK producer_task,               consumer_task;void consumer (void *cookie){    char buf[MAX_STRING_LEN];    RT_TASK_MCB mcb;    int flowid;    for (;;)	{	rt_task_sleep(CONSUMER_WAIT);	for (;;)	    {	    mcb.opcode = 0;	/* Dummy. */	    mcb.data = (caddr_t)buf;	    mcb.size = sizeof(buf);	    flowid = rt_task_receive(&mcb,TM_NONBLOCK);	    if (flowid < 0)		break;	    printf("Now playing %s...\n",buf);	    rt_task_reply(flowid,NULL);	    }	}}void producer (void *cookie){    int next_msg = 0;    RT_TASK_MCB mcb;    const char *msg;    for (;;)	{	rt_task_sleep(PRODUCER_TRIG);	msg = satch_s_tunes[next_msg++];	next_msg %= (sizeof(satch_s_tunes) / sizeof(satch_s_tunes[0]));	mcb.opcode = 0;	/* Dummy. */	mcb.data = (caddr_t)msg;	mcb.size = strlen(msg) + 1; /* \0 must be copied. */	rt_task_send(&consumer_task,&mcb,NULL,TM_INFINITE);	}}int root_thread_init (void){    rt_timer_start(1000000);	/* 1ms periodic tick. */    rt_task_spawn(&consumer_task,		  "ConsumerTask",		  CONSUMER_STACK_SIZE,		  CONSUMER_TASK_PRI,		  0,		  &consumer,		  NULL);    rt_task_spawn(&producer_task,		  "ProducerTask",		  PRODUCER_STACK_SIZE,		  PRODUCER_TASK_PRI,		  0,		  &producer,		  NULL);    return 0;}void root_thread_exit (void){    rt_task_delete(&producer_task);    rt_task_delete(&consumer_task);}#ifndef __XENO_SIM__int main (int ac, char *av[]){    root_thread_init();    pause();    root_thread_exit();    return 0;}#endif /* __XENO_SIM__ */

⌨️ 快捷键说明

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