LCM组播设置

这篇博客讲述了在Linux环境中,使用LCM进行组播数据传输时遇到的问题,即程序自动绑定到非期望的网卡。解决方案包括临时和永久修改默认网关,以及重写LCM底层接口以绑定特定网卡。同时提到了如果需要多个网卡发送数据,每个网卡都需要单独绑定,并且注意组播成员数限制。
摘要由CSDN通过智能技术生成

一、问题

LCM可以通过组播方式发送数据,但是在Linux操作系统上,多网卡的电脑上,应用LCM的程序总是自动绑定其他的网卡上,不是我们想要通信的那个网卡。

二、解决过程

1、查看LCM的源码,看它是如何绑定的,

lcm_udpm.c 文件中 lcm_provider_t * lcm_udpm_create (lcm_t * parent, const char *network, const GHashTable *args)

SOCKET testfd = socket (AF_INET, SOCK_DGRAM, 0); 创建socket,连接socket
lcm->sendfd = socket (AF_INET, SOCK_DGRAM, 0);

setsockopt (lcm->sendfd, IPPROTO_IP, IP_MULTICAST_TTL,  (char *) &params.mc_ttl, sizeof (params.mc_ttl)) ;

setsockopt (lcm->sendfd, IPPROTO_IP, IP_MULTICAST_LOOP,  (char *) &send_lo_opt, sizeof (send_lo_opt)) ;

  struct ip_mreq mreq;

    mreq.imr_multiaddr = lcm->params.mc_addr;
    mreq.imr_interface.s_addr = INADDR_ANY;
   setsockopt (lcm->sendfd, IPPROT

要设计一个具备语音报时功能的数字钟系统,首先需要理解各个件的功能及其在系统中的作用。AT89C51单片机是控制中心,负责协调各模块的工作;ISD1110语音芯片用于存储和回放语音信息;DS1302时钟芯片保证时间的准确性;LCM128645ZK液晶显示器则用于显示时间和其他信息。以下是实现过程的详细步骤: 参考资源链接:[ISD1110语音报时数字钟设计与实现](https://wenku.csdn.net/doc/24ba2nzmp5?spm=1055.2569.3001.10343) 1. 硬件设计:首先,需要设计电路图,将AT89C51单片机的I/O端口与ISD1110、DS1302和LCM128645ZK连接。确保各个芯片供电稳定,并且通信线路正确无误。例如,DS1302时钟芯片通过三个引脚(时钟、数据、复位)与单片机连接,而ISD1110则通过模拟或SPI接口连接。 2. 软件设计:编写程序来控制单片机的各个端口,实现与各芯片的通信。利用AT89C51单片机的定时器/计数器功能,与DS1302同步时间,并处理时间的设置与调整。对于ISD1110的控制,需要编写代码来录制语音并设置放的时间点。另外,编写程序以驱动LCM128645ZK显示当前时间、日期以及任何用户输入的信息。 3. 功能实现:实现语音报时功能时,需要预先录制好报时音频,并将其存储在ISD1110芯片中。使用AT89C51单片机的定时器设置报时的时间点,时间到达时,通过编程控制ISD1110放相应音频。系统应能够处理用户通过按键输入的命令,如设置时间、日期、定时提醒等。 4. 调试与优化:在硬件装完成后,进行软件调试。通过反复测试,确保时间显示准确无误,语音报时功能能够准时启动,并且用户界面友好、易于操作。 为了深入了解如何实现上述功能,可以参考《ISD1110语音报时数字钟设计与实现》这一资料。它详细地介绍了系统设计的每一个环节,包括硬件选择、电路设计、程序编写以及系统调试,适合希望从基础到深入完整学习数字钟设计的读者。 参考资源链接:[ISD1110语音报时数字钟设计与实现](https://wenku.csdn.net/doc/24ba2nzmp5?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值