微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux平台下电力载波路由器的软件设计

嵌入式Linux平台下电力载波路由器的软件设计

时间:01-19 来源:互联网 点击:

一层中选择的。由图7可知,一级中继路由建立完成之后,第一层与第二层有着确定的连接关系,所以在节点的属性中设置了respond_num数组来记录可以与自身进行通信的电表序号。这样,建立二级中继时可通过比较从路由器发送二级中继转发命令到目的节点作出的响应,即这个通信过程所花费的时间来确定中继路径。建立二级中继的过程示意图如图8所示。

2.3 嵌入式Linux平台下路由器的多线程程序设计

Linux是一种完全开源的32位操作系统,它几乎支持所有体系架构的处理器。由于它具有开源、可定制、安全、稳定等特征,所以可对其进行裁剪、修改使之能够稳定运行在嵌入式开发平台上。针对电力载波通信路由器的实际应用需求,本设计移植了Linux-2.6.29.4内核至ARM9平台上,并配置了EXT2/VFAT/NFS文件系统及串口和网络通信驱动。为了使路由器能够更快速和稳定地进行路由、路由表动态维护、抄表查询等工作,本文提出了一种多线程的解决方案,利用Linux对多线程的支持很好地解决了各项任务的快速切换、相互通信等问题。

Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a[4]。在程序中,本文给路由表的建立分配了id_route线程,为串口2和网络UDP通信分别分配了id_com和id_net线程。这三个线程是相互独立的,其中串口2和网络UDP线程以阻塞的方式来等待采集器发出的抄表查询指令。线程的初始化工作均由pthread_creat函数来开启,id_route线程开启后,串口1开始对外发送直抄、一级中继抄表、二级中继抄表的数据命令帧并根据接收到的节点响应数据帧来建立台区下相应节点的路由信息。id_route线程结束后会激活id_reroute线程,这个线程主要是为下次路由表更新进行定时,定时时间设为20 min,即每隔20 min,更新一次路由表。id_route线程的主要功能就是不停地查询20 min定时有没有到,如果定时到,则关闭20 min定时器,并开启id_route线程。程序多线程化后,就要考虑线程间的同步问题,如线程id_route正从文本文件中读取当中记录的各个节点的MAC地址、id_net线程正试图向文本文件中添加某一节点的MAC地址。如果两个线程不加以同步,必会导致节点MAC地址的混乱。本设计采用一种称为“互斥锁”的同步方式,它可以保证任一时刻只有一个线程能访问它,利用这一性质可以保护共享数据。建立路由表的线程流程图如图9所示。

本文提出了一种路由路径寻优算法并在嵌入式Linux平台下实现了这种路由算法,该算法可以保证节点搜索的不重复性、路由建立的快速性和数据抄收的正确性。利用Linux对多线程编程的支持及强大的网络通信功能,实现了路由维护与网络、串口通信的并发运行,很好地满足了自动化抄表系统中对网络通信和抄表实时性的要求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top