|
楼主 |
发表于 2011-11-13 21:51:47
|
显示全部楼层
回复【19楼】tiancaigao7 天才杨威利
-----------------------------------------------------------------------
“任务C发送信号量(一次)”信号量能发送吗??
贴一下我的代码
线程入口
static void led1_thread_entery(void* parameter)
{
rt_device_t Wrdevice;
rt_hw_led_init();//初始化io口
Wrdevice=rt_device_find("uart1");
rt_device_open(Wrdevice,RT_DEVICE_FLAG_DMA_TX);
while(1)
{
// rt_device_write(Wrdevice,0,Str,sizeof(Str)-1);
// rt_mb_send(pMailbox,0xAABBCCDD);//发送一个邮箱数据
// rt_event_send(pEvent,1<<5);
rt_thread_delay( RT_TICK_PER_SECOND/2);
rt_sem_take(pSem,RT_WAITING_FOREVER);
rt_kprintf("led1\r\n");
rt_hw_led_on(1);
rt_thread_delay( RT_TICK_PER_SECOND);
rt_hw_led_off(1);
rt_thread_delay( RT_TICK_PER_SECOND );
rt_sem_release(pSem);
}
}
static void led2_thread_entery(void* parameter)
{
//rt_hw_led_init();//初始化io口
rt_uint32_t temp=0;
while(1)
{
//rt_mb_recv(pMailbox,&temp,RT_WAITING_FOREVER);
//if(temp==0XAABBCCDD)
//{
//rt_event_send(pEvent,1<<6);
rt_thread_delay( RT_TICK_PER_SECOND);
rt_sem_take(pSem,RT_WAITING_FOREVER);
rt_kprintf("led2\r\n");
rt_hw_led_on(2);
rt_thread_delay( RT_TICK_PER_SECOND);
rt_hw_led_off(2);
rt_thread_delay( RT_TICK_PER_SECOND );
rt_sem_release(pSem);
//}
}
}
static void led3_thread_entery(void* parameter)
{
rt_uint32_t Temp;
//rt_hw_led_init();//初始化io口
while(1)
{
//rt_event_recv(pEvent,1<<5|1<<6,RT_EVENT_FLAG_OR,RT_WAITING_FOREVER,&Temp);
//rt_mutex_take(pMutex,RT_WAITING_FOREVER);
rt_sem_take(pSem,RT_WAITING_FOREVER);
rt_kprintf("led3\r\n");
rt_hw_led_on(3);
rt_thread_delay( 5*RT_TICK_PER_SECOND);
rt_hw_led_off(3);
rt_thread_delay(5* RT_TICK_PER_SECOND );
//rt_mutex_release(pMutex);
rt_sem_release(pSem);
}
}
创建线程
void rt_led_init(void)
{
rt_thread_t led_tid;
pSem=rt_sem_create("sem",1,RT_IPC_FLAG_PRIO);
pMutex=rt_mutex_create("mutex",RT_IPC_FLAG_FIFO);
pEvent=rt_event_create("event",RT_IPC_FLAG_FIFO);
pMailbox=rt_mb_create("mailbox",5,RT_IPC_FLAG_FIFO);
led_tid=rt_thread_create("led1",
led1_thread_entery,RT_NULL,
2000,30,5
);
if(led_tid!=RT_NULL) rt_thread_startup(led_tid);
led_tid=rt_thread_create("led2",
led2_thread_entery,RT_NULL,
2000,29,5
);
if(led_tid!=RT_NULL) rt_thread_startup(led_tid);
led_tid=rt_thread_create("led3",
led3_thread_entery,RT_NULL,
2000,28,5
);
if(led_tid!=RT_NULL) rt_thread_startup(led_tid);
led_tid=rt_thread_create("led4",
led4_thread_entery,RT_NULL,
2000,27,5
);
if(led_tid!=RT_NULL) rt_thread_startup(led_tid);
}
当基于FIFo时led3->led2->led1
基于优先级时led3->led2->led3->led2 |
|