当前位置: 首页 > news >正文

回头看——《智能家居项目小结》

openAI兴起,于是拿着之前小组合作的项目(承认优化较差),交给AI试着帮忙优化下

1.功能函数(TCP_SER_INIT)优化

源代码:

int TCP_SER_INIT(int *tcpsocket, const char *ip, const char *port)
{int res, optval = 1;// TCP通信结构体构建struct sockaddr_in ser = {.sin_family = AF_INET,.sin_port = htons((short)atoi(port)),.sin_addr.s_addr = inet_addr(ip),};*tcpsocket = socket(AF_INET, SOCK_STREAM, 0);if (-1 == *tcpsocket){ERR_MSG("socket");return -1;}// 允许端口快速重复使用res = setsockopt(*tcpsocket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));if (-1 == res){ERR_MSG("setsockopt");return -1;}res = bind(*tcpsocket, (struct sockaddr *)&ser, sizeof(ser));if (-1 == res){ERR_MSG("bind");return -1;}res = listen(*tcpsocket, 128);if (-1 == res){ERR_MSG("listen");return -1;}printf("等待客户端链接...\n");return 0;
}

优化后代码:

// TCP通信结构体构建
struct sockaddr_in ser = {.sin_family = AF_INET,.sin_port = htons((short)atoi(port)),.sin_addr.s_addr = inet_addr(ip),
};*tcpsocket = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == *tcpsocket)
{ERR_MSG("socket");return -1;
}// 允许端口快速重复使用
res = setsockopt(*tcpsocket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
if (-1 == res)
{ERR_MSG("setsockopt");return -1;
}res = bind(*tcpsocket, (struct sockaddr *)&ser, sizeof(ser));
if (-1 == res)
{ERR_MSG("bind");return -1;
}res = listen(*tcpsocket, 128);
if (-1 == res)
{ERR_MSG("listen");return -1;
}printf("等待客户端链接...\n");
return 0;

反思:

优化前后的差别: 优化前,主要出现在每一次操作之后都要判断操作是否成功,返回相应的值; 优化后,通过将操作结果判断和返回值放在操作一起,简化了代码,使之更加简洁易读。

2.手动控制线程代码优化

源代码:

void *pthread_manual(void *arg)
{while (1){int which;msg_t *sendmsg = (msg_t *)arg;if (sendmsg->type & LED1_ON){which = 1;ioctl(fd_led1, IO_LED_ON, &which);}if (sendmsg->type & LED1_OFF){which = 1;ioctl(fd_led1, IO_LED_OFF, &which);}if (sendmsg->type & LED2_ON){which = 2;ioctl(fd_led2, IO_LED_ON, &which);}if (sendmsg->type & LED2_OFF){which = 2;ioctl(fd_led2, IO_LED_OFF, &which);}if (sendmsg->type & LED3_ON){which = 3;ioctl(fd_led3, IO_LED_ON, &which);}if (sendmsg->type & LED3_OFF){which = 3;ioctl(fd_led3, IO_LED_OFF, &which);}if (sendmsg->type & BUZZER_ON){ioctl(fd_buzzer, IO_BUZZER_ON);}if (sendmsg->type & BUZZER_OFF){ioctl(fd_buzzer, IO_BUZZER_OFF);}if (sendmsg->type & FAN_ON){ioctl(fd_fan, IO_FAN_ON);}if (sendmsg->type & FAN_OFF){ioctl(fd_fan, IO_FAN_OFF);}if (sendmsg->type & MOTOR_ON){ioctl(fd_motor, IO_MOTOR_ON);}if (sendmsg->type & MOTOR_OFF){ioctl(fd_motor, IO_MOTOR_OFF);}}
}

优化后代码:

    //循环处理每个设备for(int i=0; i<6; i++){which = device[i];if (sendmsg->type & LED1_ON){ioctl(fd_led1, IO_LED_ON, &which);}if (sendmsg->type & LED1_OFF){ioctl(fd_led1, IO_LED_OFF, &which);}if (sendmsg->type & LED2_ON){ioctl(fd_led2, IO_LED_ON, &which);}if (sendmsg->type & LED2_OFF){ioctl(fd_led2, IO_LED_OFF, &which);}if (sendmsg->type & LED3_ON){ioctl(fd_led3, IO_LED_ON, &which);}if (sendmsg->type & LED3_OFF){ioctl(fd_led3, IO_LED_OFF, &which);}if (sendmsg->type & BUZZER_ON){ioctl(fd_buzzer, IO_BUZZER_ON);}if (sendmsg->type & BUZZER_OFF){ioctl(fd_buzzer, IO_BUZZER_OFF);}if (sendmsg->type & FAN_ON){ioctl(fd_fan, IO_FAN_ON);}if (sendmsg->type & FAN_OFF){ioctl(fd_fan, IO_FAN_OFF);}if (sendmsg->type & MOTOR_ON){ioctl(fd_motor, IO_MOTOR_ON);}if (sendmsg->type & MOTOR_OFF){ioctl(fd_motor, IO_MOTOR_OFF);}}}

反思:

优化前:

上面的代码中,在给LED1,LED2,LED3,Buzzer,FAN,MOTOR的控制语句中,which变量的值都是写死的,如果需要控制的设备添加,这样的写法会比较复杂且容易出错。

优化后:

可以将控制的设备的which值存储在一个数组中,循环处理每个设备,这样只要添加新的设备,只需要在数组中添加新的which值即可,比优化前更加简单,也更容易维护。

相关文章:

回头看——《智能家居项目小结》

openAI兴起&#xff0c;于是拿着之前小组合作的项目&#xff08;承认优化较差&#xff09;&#xff0c;交给AI试着帮忙优化下&#xff11;.功能函数&#xff08;TCP_SER_INIT&#xff09;优化源代码&#xff1a;int TCP_SER_INIT(int *tcpsocket, const char *ip, const char *…...

社交登陆OAuth2.0

QQ、微博、github 等网站的用户量非常大&#xff0c;别的网站为了 简化自我网站的登陆与注册逻辑&#xff0c;引入社交登陆功能&#xff1b; 步骤&#xff1a; 1&#xff09;、用户点击 QQ 按钮 2&#xff09;、引导跳转到 QQ 授权页 3&#xff09;、用户主动点击授权&#xff…...

C++005-C++选择与分支2

文章目录C005-C选择与分支2条件语句C实现else if 语句题目描述 根据成绩输出成绩等级ABCDEif嵌套语句题目描述 输出三个数中的最大值题目描述 模拟游戏登录switch语句三元运算符题目描述 输出三个数中的最大值-基于3元运算符题目描述 根据1-7输出星期1-星期日案例练习题目描述 …...

IPFS 简介及概述

文章目录 IPFS 简介IPFS 包含的协议内容及其理解IPFS 和 BitTorrent 区别IPFS 简介 星际文件系统(InterPlanetary File System). IPFS 是一个分布式的网络文件系统, 点到点超媒体协议. 可以让我们的互联网速度更快, 更加安全, 并且更加开放. IPFS协议的目标是取代传统的互联网…...

初学者必读:讲解 VC 下如何正确的创建、管理及发布项目

Visual C 的项目文件组成&#xff0c;以及如何正确的创建及管理项目。 本内容是初学者必须要掌握的。不能正确的管理项目&#xff0c;就不能进一步写有规模的程序。 一、项目下各种常见文件类型的功能 1. 代码文件 扩展名为 .cpp、.c、.h 等。 通常情况下&#xff0c;项目…...

剑指offer(中等)

目录 二维数组中的查找 重建二叉树 矩阵中的路径 剪绳子 剪绳子② 数值的整数次方 表示数值的字符串 树的子结构 栈的压入、弹出序列 从上到下打印二叉树① 从上到下打印二叉树③ 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 二叉搜索树与…...

微软发布会精华回顾:“台式电脑”抢了风头

Lightbot北京时间2016年10月26日晚10点&#xff0c;微软在纽约发布了名为 Surface Studio 的一体机、名为 Surface Dial 的配件以及外观未变的顶配版 Surface Book。同时&#xff0c;微软宣布了 Windows 10 下一个重要版本——“Creators Update”的数项新功能&#xff0c;包括…...

CF1561C Deep Down Below 题解

CF1561C Deep Down Below 题解题目链接字面描述Deep Down Below题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路TLE算法具体思想TLE特例AC思想代码实现备注题目 链接 https://www.luogu.com.cn/problem/CF1561C 字面描述 Deep Down Below 题面翻译…...

秒杀项目之服务调用分布式session

目录 nginx动静分离 服务调用 创建配置zmall-cart购物车模块 创建配置zmall-order订单模块 服务调用 spring session实战 什么是Spring Session 为什么要使用Spring Session 错误案例展示 配置spring-session 二级域名问题 用户登录 nginx动静分离 第1步&#xff…...

聊聊什么是架构,你理解对了吗?

什么是架构?软件有架构?建筑也有架构?它们有什么相同点和不同点? 下面咱们就介绍一下,容易混淆的几个概念 一、系统与子系统 系统 泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是 “总体”、“整体”或“联盟” 子系…...

java多线程开发

1.并发和并行 并发&#xff1a;同一时间段内多个任务同时进行。 并行&#xff1a;同一时间点多个任务同时进行。 2.进程线程 进程&#xff08;Process&#xff09;&#xff1a;进程是程序的一次动态执行过程&#xff0c;它经历了从代码加载、执行、到执行完毕的一个完整过程…...

杂记7--opencv的ar码模块学习

背景&#xff1a;项目需要用到marker知识&#xff0c;所以到官网上临时补一些知识。 概要&#xff1a;主要介绍marker一些接口的含义&#xff0c;纯属个人理解&#xff0c;有误则希望大佬不吝赐教 1、 涉及ar码操作学习&#xff0c;其头文件为&#xff1a; #include <op…...

[项目设计]高并发内存池

目录 1、项目介绍 2、高并发内存池整体框架设计 3、thread cache <1>thread cache 哈希桶对齐规则 <2>Thread Cache类设计 4、Central Cache <1>Central Cache类设计 5、page cache <1>Page Cache类设计 6、性能分析 <1>定长内存池实现…...

28岁才转行软件测试,目前32了,我的一些经历跟感受

我是92年的&#xff0c;算是最早的90后&#xff0c;现在跟你介绍的时候还恬不知耻的说我是90后&#xff0c;哈哈&#xff0c;计算机专业普通本科毕业。在一个二线城市&#xff0c;毕业后因为自身能力问题、认知水平问题&#xff0c;再加上运气不好&#xff0c;换过多份工作&…...

Python导入模块的3种方式

很多初学者经常遇到这样的问题&#xff0c;即自定义 Python 模板后&#xff0c;在其它文件中用 import&#xff08;或 from...import&#xff09; 语句引入该文件时&#xff0c;Python 解释器同时如下错误&#xff1a;ModuleNotFoundError: No module named 模块名意思是 Pytho…...

select 与 where、order by、limit 子句执行优先级比较

当 select 和 其他三种语句的一者或者多者同时出现时&#xff0c;他们之间是存在执行先后顺序的。 他们的优先级顺序是&#xff1a;where > select > order by > limit 目录 1、select 与 where 2、select 与 order by 3、order by 与 limit 4、优先级证明 1、s…...

Linux内核并发与竞争-原子操作

一.原子操作的概念首先看一下原子操作&#xff0c;原子操作就是指不能再进一步分割的操作&#xff0c;一般原子操作用于变量或者位操作。假如现在要对无符号整形变量 a 赋值&#xff0c;值为 3&#xff0c;对于 C 语言来讲很简单&#xff0c;直接就是&#xff1a; a3但是 C 语言…...

Java笔记-泛型的使用

参考&#xff1a; Java 泛型&#xff0c;你了解类型擦除吗&#xff1f; 泛型的使用 1、泛型的定义 可以广泛使用的类型&#xff0c;一种较为准确的说法就是为了参数化类型&#xff0c;或者说可以将类型当作参数传递给一个类或者是方法。 2、泛型的使用 2.1泛型类 public c…...

特斯拉无人驾驶解读

来源于Tesla AI Day Tesla无人驾驶算法的核心任务就是如何理解我们所看到的一切呢?也就是说,不使用高端的设备,比如激光雷达,仅仅使用摄像头就能够将任务做得很好。Tesla使用环绕型的8个摄像头获得输入。 第一步是特征提取模块Backbone,无论什么任务都离不开特征…...

生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。

结构式&#xff1a; ​ 生物素-琥珀酰亚胺酯Biotin NHS CAS号&#xff1a;35013-72-0 英文名称&#xff1a;Biotin-NHS 中文名称&#xff1a;D-生物素 N-羟基琥珀酰亚胺酯&#xff1b;生物素&#xff0d;琥珀酰亚胺酯 CAS号&#xff1a;35013-72-0 密度&#xff1a;1.50.1 …...

【数电】组合逻辑电路模块:从原理到系统级应用

1. 组合逻辑电路基础入门 第一次接触数字电路时&#xff0c;我被那些密密麻麻的逻辑门符号搞得头晕眼花。直到真正理解了组合逻辑电路的精髓&#xff0c;才发现它就像搭积木一样有趣。组合逻辑电路的特点是输出只取决于当前的输入状态&#xff0c;不像时序电路那样需要考虑历史…...

Leptin30;YQQVLTSLPSQNVLQIANDLENLRDLLHLL (mouse)

一、基本信息名称&#xff1a; Leptin30&#xff08;小鼠源瘦素功能片段肽&#xff09;单字母序列&#xff1a; YQQVLTSLPSQNVLQIANDLENLRDLLHLL三字母序列&#xff1a; Tyr-Gln-Gln-Val-Leu-Thr-Ser-Leu-Pro-Ser-Gln-Asn-Val-Leu-Gln-Ile-Ala-Asn-Asp-Leu-Glu-Asn-Leu-Arg-Asp…...

ICML 2026 开分!投稿群来了!还有IJCAI、CVPR 2026投稿群!

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信&#xff1a;CVer2233&#xff0c;助手会拉你进群&#xff01;扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可获得最新顶会/顶刊上…...

轻量级OpenClaw监控:nanobot镜像运行状态仪表盘搭建

轻量级OpenClaw监控&#xff1a;nanobot镜像运行状态仪表盘搭建 1. 为什么需要监控OpenClaw运行状态 上周我在本地部署了基于nanobot镜像的OpenClaw环境&#xff0c;用来对接Qwen3-4B模型实现自动化办公。刚开始使用时一切顺利&#xff0c;直到某天早上发现OpenClaw服务已经停…...

保姆级教程:用seqtk、bwa和bedtools从零绘制GC-depth图,诊断测序污染

从零构建GC-depth分析全流程&#xff1a;手把手教你诊断测序数据污染 刚拿到测序数据的生物信息学新手&#xff0c;常常会面临一个灵魂拷问&#xff1a;我的数据干净吗&#xff1f;GC-depth分析就像给测序数据做"体检"&#xff0c;通过一张图就能快速发现细菌污染、样…...

OpenSSH用户枚举漏洞(CVE-2018-15473)修复实战:从检测到升级的完整指南

OpenSSH用户枚举漏洞(CVE-2018-15473)修复实战&#xff1a;从检测到升级的完整指南 在当今的网络安全环境中&#xff0c;SSH服务作为远程管理服务器的标准协议&#xff0c;其安全性直接关系到整个系统的防护水平。2018年曝光的OpenSSH用户枚举漏洞(CVE-2018-15473)虽然CVSS评分…...

EdB Prepare Carefully:定制你的RimWorld完美开局体验

EdB Prepare Carefully&#xff1a;定制你的RimWorld完美开局体验 【免费下载链接】EdBPrepareCarefully EdB Prepare Carefully, a RimWorld mod 项目地址: https://gitcode.com/gh_mirrors/ed/EdBPrepareCarefully 是否厌倦了RimWorld随机生成的殖民者团队带来的不确定…...

OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫+分析闭环

OpenClaw任务编排&#xff1a;用Qwen3.5-4B-Claude实现爬虫分析闭环 1. 为什么需要自动化任务编排 去年我接手了一个市场调研项目&#xff0c;需要每周从20多个网站抓取产品价格数据&#xff0c;清洗后生成趋势图表。最初用Python脚本手动Excel处理&#xff0c;每次要花3小时…...

别再只盯着find了!Linux系统隐藏文件和进程的5种“花活”与排查指南

Linux系统隐匿技术深度解析&#xff1a;从防御视角看5种高级隐藏手法与实战排查 在Linux系统安全领域&#xff0c;攻击者与防御者的博弈从未停止。当普通管理员还在使用ls和ps检查系统时&#xff0c;高级攻击者早已掌握多种隐匿技术。本文将揭示五种超越常规认知的隐藏手法&…...

教你 .NET Core API 怎么和数据库表一一对应

不用复杂理论,直接照做就能成功! 一、核心规则(记住这 4 句) 类 = 表 类名 = 表名 属性 = 字段 属性名 = 字段名 二、一步一步教你对应(超级简单) 1)数据库有一张表 → 你就写一个类 例如你数据库里有表: sql Users (Id int primary key identity,Name nvarchar(5…...