博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于ARM的智能灯光控制系统(5)设备链表
阅读量:5820 次
发布时间:2019-06-18

本文共 4905 字,大约阅读时间需要 16 分钟。

基于ARM的智能灯光控制系统(5)设备链表

设备自动动态更新

使用链表实现,方便数据实时动态增加与删除。

这里写图片描述

链表处理头文件 (link_pro.h)

函数 功能 使用
Create 创建链表头结点 stu_to_link( )
Delete 删除指定结点 dev_update( )
Insert 增加设备结点 stu_to_link( ) , dev_update( )
dev_print 打印链表 init_sys( )
stu_to_link 结构体更新到链表 init_sys( ),ipcs_pro( )
link_to_stu 链表更新到结构体 dev_pro( )
find_id 通过id在链表中查询存在 dev_update( ) ,sw_pro( )
get_dev_id 通过id获取设备节点数据 sw_pro( ),area_sw_update( )
#ifndef __SL2000_LINK_H_#define __SL2000_LINK_H_struct sys_dev *Create(struct sys_dev main_dev);struct sys_dev *Delete(struct sys_dev * head,int type);struct sys_dev *Insert(struct sys_dev * head,struct sys_dev new_dev);void dev_print(struct sys_dev *head);struct sys_dev * stu_to_link(struct sys_dev *head);void link_to_stu(struct sys_dev *head);int find_id(char id,struct sys_dev *head,struct sys_dev *dev);struct sys_dev *  get_dev_id(char id,struct sys_dev *head);#endif

##链表处理实现文件(link_pro.c)

#include "config.h"#include "link_pro.h"extern struct sys_all g_dev[1]; //系统配置结构体全局变量struct sys_dev *Create(struct sys_dev main_dev){    struct sys_dev *pNew=NULL;    pNew=(struct sys_dev *)malloc(sizeof(struct sys_dev));    if(NULL == pNew)         printf("create malloc err...\n");    pNew->connect_sta = main_dev.connect_sta;//主控设备设置连接    strcpy(pNew->name,main_dev.name);    pNew->join_sta = main_dev.join_sta;    pNew->node.id = main_dev.node.id;    pNew->node.type = main_dev.node.type;    pNew->sw_sta = main_dev.sw_sta;    pNew->bind_dev = main_dev.bind_dev;    pNew->next = NULL;    printf("plink create ok...\n");    return pNew;}struct sys_dev *Insert(struct sys_dev * head,struct sys_dev new_dev){    struct sys_dev *pNew = NULL;    struct sys_dev *pFind = NULL;    pNew=(struct sys_dev *)malloc(sizeof(struct sys_dev));    if(NULL == pNew)         printf("create malloc err...\n");    pNew->connect_sta = new_dev.connect_sta;//主控设备设置连接    strcpy(pNew->name,new_dev.name);    pNew->join_sta = new_dev.join_sta;    pNew->node.id = new_dev.node.id;    pNew->node.type = new_dev.node.type;    pNew->sw_sta = new_dev.sw_sta;    pNew->bind_dev = new_dev.bind_dev;    pNew->next = NULL;    //新的节点,放在链表最后    if(NULL==head)        return pNew;    else{        pFind=head;        while(pFind->next!=NULL)        {            pFind=pFind->next;        }        pFind->next = pNew;    }    printf("plink insert ok...\n");    return head;}struct sys_dev *Delete(struct sys_dev * head,int type){    struct sys_dev *pFind=NULL;    struct sys_dev *pPrev=NULL;    pFind=head;    if(NULL==head){        printf("设备列表为空!\n");        return head;    }    while(pFind->node.type!=type && pFind->next!=NULL)    {        pPrev=pFind;        pFind=pFind->next;    }    if(pFind->node.type==type)    {        if(head==pFind){            head=pFind->next;        }else{            pPrev->next=pFind->next;        }        free(pFind);        printf("%d 设备节点已删除.\n",type);    }else{        printf("设备列表中没有要删除的设备.\n");    }    return head;}void dev_print(struct sys_dev *head){    struct sys_dev * p;    p=head;    if(NULL==head){        printf("列表为空!\n");    }else{        printf("%d 个设备已连接。\n",g_dev->count_dev);        while(p!=NULL){            printf("类型:%d 名称:%s\n",p->node.type,p->name);            p=p->next;        }    }}struct sys_dev * stu_to_link(struct sys_dev *head){    int i;    //通过配置文件,生成动态设备列表    for(i=0;i
count_dev;i++){ if(i==0) head = Create(g_dev->sys_dev[i]); else head = Insert(head,g_dev->sys_dev[i]); } return head; }void link_to_stu(struct sys_dev *head){ struct sys_dev * p; int i=0; int max = g_dev->count_dev; p=head; if(NULL==head){ printf("列表为空!\n"); }else{ while(p!=NULL){ g_dev->sys_dev[i].connect_sta = p->connect_sta; strcpy(g_dev->sys_dev[i].name,p->name); g_dev->sys_dev[i].join_sta = p->join_sta; g_dev->sys_dev[i].node.id = p->node.id; g_dev->sys_dev[i].node.type = p->node.type; g_dev->sys_dev[i].sw_sta = p->sw_sta; g_dev->sys_dev[i].bind_dev = p->bind_dev; p=p->next; if(i<=max) i++; } } }int find_id(char id,struct sys_dev *head,struct sys_dev *dev)//{ struct sys_dev * p; p=head; if(NULL==p){ printf("列表为空!\n"); return 0; }else{ while(p!=NULL){ if(p->node.type==id){ if(dev!=NULL) memcpy(dev,p,sizeof(struct sys_dev)); return 1; } p=p->next; } } return 0; }struct sys_dev * get_dev_id(char id,struct sys_dev *head)//{ struct sys_dev * p = NULL; p=head; if(NULL==p){ printf("列表为空!\n"); return NULL; }else{ while(p!=NULL){ if(p->node.type==id){ return p; } p=p->next; } } return NULL; }

转载于:https://blog.51cto.com/91arm/2052471

你可能感兴趣的文章
CDI services--Event(事件)
查看>>
PHP全栈开发(七):PHP与MySQL存储交互(1.连接、创建数据库;创建数据表)
查看>>
第10章 Java类的三大特性之一:多态
查看>>
你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?...
查看>>
ideal中spring的xml文件没有提示的问题
查看>>
Python大法之input用户登录
查看>>
C#操作XML小结(转)
查看>>
(转)Linux学习路线
查看>>
8.全排列[深度优先搜索]
查看>>
【原创】IO流:读写操作研究(输入流)
查看>>
IO 流之字节流和转换流
查看>>
DQL、DML、DDL、DCL的概念与区别
查看>>
PHP学习总结(10)——PHP入门篇之自定义网站根目录
查看>>
历届试题 带分数 全排列模板 JAVA
查看>>
Mybatis框架学习总结-优化Mybatis配置文件中的配置
查看>>
第五周周记
查看>>
selenium 使用笔记
查看>>
pthread_attr_init线程属性
查看>>
JavaScript表格搜索高亮功能模拟
查看>>
java中Thread (线程)
查看>>