【唠唠嵌入式】__嵌入式开发需要从0开始造轮子吗?

目录

前言

从0开始和套用模板的利弊

1. 从0开始的利弊

2. 套用模板的利弊

从0开始,还是套用模板?

1. 看项目赶不赶

2. 看项目用途

3. 看工程师水平

4. 看领导决策

5. 看公司决策

6. 看项目规划

实际工作

总结

(* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 


前言

看到有小伙伴在讨论关于“造轮子”的话题,各有各的观点,这里先说两种常见的情况。

  • 第一种情况

老板从来不催进度,做项目的工程师也不慌不忙,从零开始一步一步创建工程,然后一步一步写代码(即从0开始造轮子)。

当把项目做好,或者项目才做到一半时,公司可能就已经倒闭了。

  • 第二种情况

老板要求在尽量短的时间把项目赶出来,好,直接套用各种模板(比如:单元模块、软件库、协议栈等),东拼西凑,终于,在规定时间完成了项目,项目也勉强运行起来。

某一天,老板让新加一个功能,发现与原来的功能有冲突,那该怎么办?重新开始写代码?

你会发现:不管是从0开始造轮子,还是直接套用模板都存在弊端。

从0开始和套用模板的利弊

从0开始,意味着整个项目都由工程师一步一步完成,而不用各种现成的模板。

凡事没有十全十美,从0开始和套用模板都有优点,也都有缺点。

1. 从0开始的利弊

  • 好处:软件的各种逻辑自己比较清楚,方便后期增、删、改、查。
  • 缺点:比较费时间,而且,软件存在bug的可能性比较大。

2. 套用模板的利弊

  • 好处:软件可靠稳定(当然,指的是市面上常见的软件库、协议栈等),也节约开发时间。
  • 缺点:可能与你项目存在冲突,比如存在阻塞情况,比如占用资源比较等。

从0开始,还是套用模板?

这里我也不能说哪一种好,哪一种不好,最终还是要结合你项目实际情况。

1. 看项目赶不赶

如果项目开发时间相对宽松(不那么赶项目),可以从0开始搞起。比如:前期尽量抽时间规划好项目,搭建好软件框架等。

如果项目要在最短时间内赶出来,可以套用一些现成模板,甚至直接从GitHub下载一个类似项目简单修改,以完成功能为主,先上(zheng)线(qian),然后慢慢优化。

2. 看项目用途

如果写一个软件,只是单纯的拿给客户演示,能用模板就用模板吧。

如果定位是一个大批量生产的产品,建议从0开始,结合成熟模板做起来。

3. 看工程师水平

如果工程师是一个菜鸟,你让他从0开始,等项目做好估计黄花菜都凉了。还有,即便项目做好了,可能Bug也无数。此时,还是建议你参考别人的模板,或者源码(当然,不是网上随便找的那种哈)。

如果工程师是有一定经验,手上项目没有很多的参考模板,可以从0开始做起。

4. 看领导决策

······

5. 看公司决策

······

6. 看项目规划

······

实际工作

公司项目立项的时候,各种近期、远期规划都有,就连嵌入式软件各种细节也是做了各种规划。比如:模块(模块化)、软件命名、软件框架等。

总之,前期花了很多时间做了很多准备工作,然后,项目按照规划一步一步从0开始搞起来。

前几年项目也非常顺利,虽然偶尔有小bug,但很快就能锁定bug并快速得到解决。

但是,随着市场的变化,功能改变和增加的情况越来越多,时间也越来越紧张,在增加、修改、删除功能或模块的时候,没有太多时间优化项目。

终于,项目暴露的问题越来越多,测试部反馈的一级bug也越来越多,市场也经常反馈问题。

最终,实在没办法,项目暂停,重新整理软件架构,在一个月之后,更新架构的软件完成了,也比较顺利。

说明一下:

整个软件项目做到后面比较大,其中也套用了第三方库、协议栈等。因为项目做的很多规划(准备工作),前期开发的也比较顺利,但后面项目紧张没有优化,代码叠加就更容易引起bug。

好在前期做足了工作,比如模块化、代码高内聚低耦合等,在后面软件重构也相对比较顺利,很多模块都可以直接复用。

总结

从0开始还是套用模板,应该遵循几个原则:

  • 项目开发时间越短越好

  • 项目越稳定越好

  • 项目后期增删改查越容易越好

  • ······

在不能平衡的情况下,就要有所取舍,但要尽量平衡。就像上面说的,赶进度而未优化,为后期留下后患。

因此,一般建议先规划项目,像软件框架、结构这种结合项目情况从0规划,然后参考或者套用一些成熟模板,再次,在编码过程中,不断优化和完善代码。

最终不管什么方式,目的是使项目稳定,方便增删改查。


(* ̄︶ ̄)创作不易!期待你们的 点赞收藏评论喔。 

本文来源网络,免费分享知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185447.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java数据结构--双端队列

一.概念 双端队列的意思是可以在头部和尾部添加和删除元素&#xff0c;更一般的单向链表队列比起来更加的灵活&#xff0c;下面我们用双向循环带哨兵链表和数组来分别实现 二.定义接口Dequeue /*** 双端队列*/ public interface Dequeue<E> {//队头添加元素boolean off…

QT QStackedWidget

QStackedWidget是一个特殊的布局容器&#xff0c;它可以管理多个页面&#xff0c;并且只能显示其中一个页面。这些页面是QWidget或其派生类的实例&#xff0c;并通过调用addWidget()函数添加到堆栈中。 例如&#xff1a; #include <QWidgets> #include <QStackedWid…

10.(vue3.x+vite)组件间通信方式之props与$emit

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 父组件代码 <template><div><div>{{message }}</div><Child

Scala爬虫实战:采集网易云音乐热门歌单数据

导言 网易云音乐是一个备受欢迎的音乐平台&#xff0c;汇集了丰富的音乐资源和热门歌单。这些歌单涵盖了各种音乐风格和主题&#xff0c;为音乐爱好者提供了一个探索和分享音乐的平台。然而&#xff0c;有时我们可能需要从网易云音乐上获取歌单数据&#xff0c;以进行音乐推荐…

【Azure 架构师学习笔记】-Azure Storage Account(5)- Data Lake layers

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;4&#xff09;- ADF 读取Queue Storage 前言 不管在云还是非云环境中&#xff0c; 存储是IT 系统的其中一个核心组件。在…

远程运维用什么软件?可以保障更安全?

远程运维顾名思义就是通过远程的方式IT设备等运行、维护。远程运维适用场景包含因疫情居家办公&#xff0c;包含放假期间出现运维故障远程解决&#xff0c;包含项目太远需要远程操作等等。但远程运维过程存在一定风险&#xff0c;安全性无法保障&#xff0c;所以一定要选择靠谱…

【紫光同创国产FPGA教程】——PDS安装教程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 一&#xff1a;软件简介 PangoDesign Suite是紫光同创基于多年FPGA开发软件技术攻关与工程实践经验而研发的一款拥有国产自主知识产权的大规模FPGA开…

chinese-stable-diffusion中文场景文生图prompt测评集合

我在git上新建了一个仓库&#xff0c;主要是总结一波了chainese-stable-diffusion的模型算法&#xff0c;非常欢迎关注&#xff1a; GitHub - leeguandong/Awesome-Chinese-Stable-Diffusion: 中文文生图stable diffsion模型集合中文文生图stable diffsion模型集合. Contribute…

C语言:深入浅出qsort方法,编写自己的qsort完成冒泡排序

目录 什么是qsort&#xff1f; 函数原型 比较函数 compar 排序整型数组 排序结构体数组 根据成员字符排序 strcmp函数 根据成员整型排序 自定义qsort实现冒泡排序 qsort的实现原理 具体步骤 快速排序示例代码&#xff1a; 什么是qsort&#xff1f; qsort是 C …

[AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]

场景 在使用Android Studio的虚拟设备运行App时&#xff0c;需要创建很大镜像文件。这些镜像文件一般都在系统盘&#xff0c;导致系统盘占用增大。怎么把这些镜像的存放路径设置在其他盘&#xff1f; 说明 虚拟设备的和它的镜像默认是放在用户目录\.android\avd位置。如果是在…

深入OpenCV Android应用开发

前言 OpenCV是Open Source Computer Vision library(开源的计算机视觉库)的缩写。它是使用最广泛的计算机视觉库。Opencv是计算机视觉领域常用的操作函数的集合&#xff0c;其自身由C/C编写而成&#xff0c;同时也提供了对Python、Java以及任意JVM语言的封装。考虑到大部分And…

统信UOS_麒麟KYLINOS创建网页桌面快捷方式

原文链接&#xff1a;统信UOS/麒麟KYLINOS创建网页桌面快捷方式 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇使用命令行在统信UOS/麒麟KYLINOS创建网页桌面快捷方式的文章&#xff0c;主要用于构建云桌面模板及镜像模板的时候使用&#xff0c;欢迎大家浏览分享转…

数据库数据恢复—无备份,未开启binlog的MySQL误删除怎么恢复数据

数据库数据恢复环境&#xff1a; 一台本地windows sever操作系统服务器&#xff0c;服务器上部署mysql数据库单实例&#xff0c;引擎类型为innodb&#xff0c;表内数据存储所使用表空间类型为独立表空间。无数据库备份&#xff0c;未开启binlog。 数据库故障&分析&#xf…

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的目标进行跟踪统计

上文中详细介绍了如何对视频进行抽帧,并对帧的图像进行目标识别。但在日常工作中,我们也会遇到需要对目标进行跟踪统计的情况,比如我们需要连续统计某一类目标有多少个的时候,如果单纯从帧中抽取图像的话,系统将无法判断是否为同一目标,从而造成目标数量统计的重复,导致…

SpringBoot整合Swagger3,赶紧整起来!

文章目录 一、Swagger是什么&#xff1f;二、使用步骤1.引入swagger3依赖2.添加swagger.conf配置类3.添加application.yml配置4.查看是否整合成功5.常用注解6.swagger美化 总结 一、Swagger是什么&#xff1f; Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用…

12 tcp协议详解

1、tcp的本性 tcp是一个悲观者&#xff0c;生下来就不信任网络&#xff0c;任务会发生丢包等&#xff0c;所以要从算法层面来保证可靠性。 2、TCP 包头格式 tcp的包头格式比UDP要复杂的多。 1.源端口号和目标端口号是不可少的&#xff0c;这一点和 UDP 是一样的。如果没有…

图形界面应用案例——关灯游戏(以及扩展)(python)

7.8 图形界面应用案例——关灯游戏 题目: [案例]游戏初步——关灯游戏。 关灯游戏是很有意思的益智游戏,玩家通过单击关掉(或打开)一盏灯。如果关(掉(或打开)一个电灯,其周围(上下左右)的电灯也会触及开关,成功地关掉所有电灯即可过关。 图7-43 关灯游戏运行效…

安防监控系统视频融合平台EasyCVR页面地图功能细节详解

安防监控视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff…

62、使用python进行rk3588开发板进行推流亚马逊云服务上,进行实时播放

基本思想:之前写了一套c++的推理和视频编解码,使用rk3588的mpp硬件进行编码和解码,然后使用RTSPServer进行推流,总是有问题,虽然可以使用ffplay和vlc进行拉取和播放,但是就是无法使用gstreamer推流到亚马逊云服务上,因为项目需求的紧急,所以先用python把流程跑同,后续…

linux基础指令【上篇】

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 引用 01. ls 指令2. pwd命…