|
我有三个串口可以接收数据,接收到数据之后,发一个消息 msg 到消息队列,建立一个任务用于接收三个串口发过来的消息,但是我怎么确定接收到的消息是第几个串口发出来呢???欢迎各位探讨!
消息的定义如下:
struct rx_msg
{
rt_device_t dev; //设备
rt_uint16_t size; //接收到的数据大小
};
串口回调函数如下:
//==============================================================================
//名称:uart_indicate
//功能:串口接收回调函数
//入参:dev 设备 size 设备接收到的字节大小
//出参:rt_err_t 串口接收到的实际数据的长度
//说明:当判断串口接收完成时,调用此函数
//==============================================================================
rt_err_t uart_indicate(rt_device_t dev,rt_size_t size)
{
struct rx_msg msg;
msg.dev = dev; //设备
msg.size = size; //接收到的数据大小
rt_mq_send(Uart_Rx_mq,&msg,sizeof(struct rx_msg)); //发送消息到消息队列
return msg.size;
}
接收任务线程如下:
//================================================================
//名称: UpProtocol_thread_enter
//功能:
//入参:
//出参:
//说明:
//================================================================
void UpProtocol_thread_enter(void *parameter)
{
struct rx_msg msg;
rt_uint16_t size = 4096,fact_size = 0;
rt_uint8_t *mq_buff;
//mq_buff = rt_mp_alloc(&mem_blocksize_512,RT_WAITING_FOREVER); //分配静态内存池
while(1)
{
rt_mq_recv(Uart_Rx_mq,&msg,sizeof(msg),RT_WAITING_FOREVER); //接收消息队列
mq_buff = rt_mp_alloc(&mem_blocksize_2055,RT_WAITING_FOREVER); //获取静态内存池
rt_device_open(msg.dev,RT_DEVICE_OFLAG_RDONLY);
fact_size = rt_device_read(msg.dev,0,mq_buff,size); //读取串口接收到的数据
if(fact_size > 0) //接收到数据
{
//添加处理上行数据函数
//不知道消息是哪个串口接收到的????? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|