基于IPv6的环境监测系统的开发和应用

简化IPv6协议
简化IPv6协议主要是解决监控节点接入IPv6骨干网的问题。由于监控节点的硬件存储空间和处理速度都非常有限,必须对原有协议进行简化,以实现在IP层的接入。同时,在承载能力和维护难度上也要做出妥协。

系统中IPv6协议栈的简化主要涉及层与层之间的连接和内部数据的相互交换。IPv6协议栈本身设计为四层的分层结构。在实施过程中,分层模块的独立性越强,性能通常越高,但需要的资源开销也越大。在正常情况下,嵌入式系统的应用场景比较单一,所以可能不需要严格的分层。在实现不同层之间的连接时,可以直接使用函数调用等设计方法来节省系统资源。

协议栈通过数据缓冲器pBuff处理消息数据。数据缓冲区的功能包括。(1)为网络数据包提供一个管理结构,可以提高数据包的处理效率,同时可以提高数据处理性能,通过减少数据内存拷贝的数量来节省内存资源;(2)通过缓冲区的设计大小来控制数据的吞吐量。在实际应用中,根据设备的数据通信要求设计适当大小的缓冲区,为系统中的其他应用节省可用内存。因此,协议栈提供的内存管理模块可以更好地管理协议所需的内存资源,回收和重新分配使用过的内存,保证系统不会因为内存资源被网络应用耗尽而导致任务中断和失败。LwIP协议栈使用共享内存、消息队列和信号器来连接各层,以节省资源。虽然这样的设计会导致层的严格性和独立性降低,但它可以有效地减少嵌入式设备的资源消耗。由于嵌入式设备的功能比较特殊,通常有非常明确的应用场景和具体的应用要求,因此该设计可以充分满足嵌入式设备的通信要求。LwIP协议栈的代码是开源的。在移植过程中应充分考虑功能需求,针对不同的处理器和内存资源,调整缓冲区大小和应用模块。协议栈采用模块化分层,通过全局宏配置启用或禁用不同模块,以达到更好的资源分配。

将IPv6协议移植到ARM上
系统移植协议栈时,通过STM32F10XX控制器内部的定时器外设实现定时器,为协议栈提供时间管理功能。这个过程的同步是由实时操作系统的信号器实现的。因此,ARM上的IPv6在系统中的职责主要包括提供协议栈所需的功能模块,包括信号器、定时器、消息邮箱和线程功能;维护网络接口层的数据接收和发送接口;初始化协议栈;驱动物理层的网卡;设置IPv6的基本参数。

semaphore用于任务同步和资源管理。通过semaphore,两个独立任务之间的事件可以被同步处理。消息信箱是操作系统为协议栈提供的一种抽象的消息传输方法,其实现过程与信号灯类似。但是,消息的内存地址指针被包含在消息邮箱的传递过程中,因此可以实现协议栈内的数据传输。信箱可以操作消息的邮寄和消息的读取。无论是信号还是消息邮箱都不会阻塞进程。任务在等待信号或消息时处于暂停状态,线程在此状态下处于休眠状态。当信号灯或消息信箱被释放时,它在休眠线程队列中寻找相应的线程,然后将其唤醒。在线程被唤醒后,它开始处理信号或消息成功接收后的任务。本系统中信号和消息信箱的实现方式如下。

(a)
仓位。err_t sys_sem_new(sys_sem_t *sem, u8_t count)函数创建一个semaphore。semaphore的sem是由指针传送的,semaphore函数在完全创建后可以提供给系统。在应用线程中调用semaphore有两种方法。一种是限制等待时间,也就是说,如果在设定的时间内没有收到信号灯,则删除任务或进行其他操作。第二种是无限等待,即任务处于暂停状态,直到信号被接收。u32_t sys_arch_sem_wait (sys_sem_t *sem, u32_t timeout) 函数用于在线程中等待信号。参数 “timeout “是semaphore的等待时间。当该值被设置为0时,意味着系统在无限期地等待信号灯。

(b)
消息信箱。err_t sys_mbox_new(sys_mbox_t *mbox, int size)函数创建一个消息邮箱。消息邮箱和信号灯的区别在于,消息邮箱的创建需要开辟一个新的内存指针,以提供数据传输通道,而信号灯不占用内存空间,通过计数变量为系统任务提供同步处理信号。

协议栈还需要创建线程,主要包括TCP数据包处理线程和UDP消息处理线程。因此,操作系统必须为协议栈提供线程管理功能。

线程创建。sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio) 函数为lwIP协议栈创建一个线程。由lwIP创建的线程总是存在于应用程序中。例如,数据接收和数据发送过程被分为两个应用线程。当数据未被接收或未被发送时,这两个线程就处于暂停状态。在收到消息邮箱的数据后,线程激活任务,开始发送或接收IP数据包进行处理。

网络接口层的初始化主要是将netif添加到lwIP栈中。移植的配置过程如图7所示。

基于IPv6的环境监测系统的开发和应用

检查硬件网卡是否已被成功初始化。如果没有初始化,那么继续进行网卡初始化过程。

配置网络接口,接收和发送数据,处理功能,并将两个功能指针写入网络结构中,为上层协议提供接口。

配置MLD(多播听众发现),使IPv6能够发现局域网段上的网络设备。

配置DHCP(动态主机配置协议),为设备自动配置IPv6地址。

设置各种协议标志,调用netifapi netif_add,将配置的netif添加到协议栈中,完成网络接口层的配置。

协议栈的初始化主要创建两个线程任务:数据发送和接收。通过为每个线程创建相应的消息邮箱,同时为数据提供缓冲空间,在创建过程完成后,线程和消息邮箱就会被执行。到目前为止,lwIP已经被移植到嵌入式系统上了。在实际应用中,上层用户程序可以直接调用相关模块进行直接使用,如套接字连接、HTTP、TFTP等应用模块。本系统使用HTTP模块来实现嵌入式Web服务器。

原创文章,作者:中国IPv6网,如若转载,请注明出处:https://www.ipv6s.com/basis/application/202209222268.html

(4)
中国IPv6网的头像中国IPv6网
上一篇 2022年9月22日 下午3:49
下一篇 2022年9月22日 下午4:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注