|
看了RT-Thread3.0的编程指南,信号量那一节里有一个环形buffer的读写并显示的历程。
就两个线程 一个读出来显示,一个写进去
BUFFER_ITEM是32
UART1循环输出来的是不是应该是一个32个数据?
我的理解:
线程worker等待可用信号量 把32字节的BUFFER写到working_buffer里
线程thread等待可用信号量 从working_buffer里出去32字节的BUFFER显示出来。
可是结果是:UART上只是循环输出0X0D和0X0A两个数据。
求高手帮忙解释下,顺便能给我提点下对信号量的理解那就最好了。谢谢!
线程如下:(具体程序基本和RT-Thread3.0的编程指南7.3节信号量里循环BUFFER那个例程程序一样)
static void thread_entry(void* parameter)
{
rt_bool_t result;
rt_uint8_t index,data_buffer[BUFFER_ITEM];
while(1)
{
rt_sem_take(&sem,RT_WAITING_FOREVER);
result = rb_get(&working_rb,&data_buffer[0],BUFFER_ITEM);
rt_sem_release(&sem);
if(result==RT_TRUE)
{
rt_kprintf("%s\n",data_buffer);
}
rt_thread_delay(RT_TICK_PER_SECOND);
}
}
static void worker_entry(void* parameter)
{
rt_bool_t result;
rt_uint32_t index,setchar;
rt_uint8_t data_buffer[BUFFER_ITEM];
setchar=0x21;
while(1)
{
for(index=0;index<BUFFER_ITEM;index++)
{
data_buffer[index]=setchar;
if(++setchar==0x7f)
setchar=0x21;
// rt_kprintf("%d\n",index);
}
rt_sem_take(&sem,RT_WAITING_FOREVER);
result=rb_put(&working_rb,&data_buffer[0],BUFFER_ITEM);
rt_sem_release(&sem);
rt_thread_delay(10);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|