近日在学习rt thread os实时操作系统时,遇到这样一个问题。在
rt thread os中,在工程的一个C文件创建了一个消息队列,然后发送这个消息队列,
那么是只能在这个C文件中进行消息队列的接收,还是可以在工程的任何C文件中进行消息队列的接收?
在当前的C文件中,进行定义和发送:
static struct rt_messagequeue P2208_mq;//定义一个消息队列
result = rt_mq_send(&P2208_mq, &P2208ReOrder[0], sizeof(P2208ReOrder));//发送消息队列
在另一个C文件中接收消息队列:
if (rt_mq_recv(&P2208_mq, &txbuf[0], sizeof(txbuf), RT_WAITING_FOREVER)== RT_EOK) //等待一个消息队列的到来
我现在遇到的一个问题是,按照例程在一个C文件中创建了一个消息队列,在本C文件中接收消息队列没有问题。说明代码没有问题。但是如果把接收消息队列的函数,移到工程的另一个C文件中,编译时就要报错,提示内容为: P2208_mq 没有定义。
当我把
static struct rt_messagequeue P2208_mq;
改成:
extern struct rt_messagequeue P2208_mq;
并通过.h文件包含的方式进行,就不会再报错。
这我就奇怪了,如果P2208_mq要定义成一个全局的变量,那么消息队列还有何用?
大概记得学习ucos时,ucos的消息队列就可以在工程中任何位置接收。
难道RT thread 和UCOS不一样,不支持在一个C文件中定义了,就可以全局使用?
不知道在论坛中,有谁也在学习RT thread OS,欢迎您来此交流和赐教。 |