
软件架构
文章平均质量分 87
软件架构
机载软件与适航
全网同名,公众号【机载软件与适航】主理人
展开
-
同样是软件开发,为什么没有嵌入式软件架构师
已剪辑自: https://mp.weixin.qq.com/s/mKQ_d8mfau-JB04v-_coWg大家好,今天分享一篇关于嵌入式软件架构师的文章,文中的 “我” 为作者本人。希望对从事嵌入软件开发的你有所启发。我从事嵌入式软件开发有6、7个年头,bsp,驱动,应用软件,android hall,framework 等都有涉猎。平时除了关注嵌入式行业的发展,也多少对 Web,后台服务端,分布式等方向的技术有一些关注。近期有萌生换个行业方向的想法,想做做后台服务器相关的开发,由于之前工作中并没有这方原创 2023-03-19 22:32:37 · 585 阅读 · 1 评论 -
嵌入式软件分层隔离的典范
已剪辑自: https://mp.weixin.qq.com/s/T7EJEAuXo1CCJa5vPAPVvg:嵌入式软件开发分层、模块化是理想状态,实际开发中因各种限制而有所取舍,但这不妨碍学习参考优秀软件架构,即使有部分思想在项目中落实,也是大有裨益的。原创 2023-02-19 11:05:12 · 469 阅读 · 0 评论 -
怎么提高自己的系统设计和架构理论水平?
本文主要探讨和总结服务架构设计中高性能的技术和方法,如下图的思维导图所示,左边部分主要偏向于编程应用,右边部分偏向于组件应用,文章将按图中的内容展开。高性能思维导图。原创 2023-01-02 22:37:03 · 963 阅读 · 1 评论 -
如何画架构图?
在我们做时,如何快速的向外界传达我们的设计思路。4+1试图适合我们厘清思路、表达自己的想法。在我们汇报,争取领导层的认同支持更适合用架构图来表述我们的观点。架构图包括总体架构、逻辑架构、应用架构、技术架构、数据架构、功能架构、网络架构、运行架构等等。原创 2023-01-01 16:41:05 · 13655 阅读 · 0 评论 -
嵌入式软件分层框架设计,举了个例子
为了能够使得产品得到更好的开发速度与以后更好的迭代和移植,框架分层是很有必要的。但如对于中小型项目严格遵循这些原则,势必会消耗过多精力去思考怎么设计系统,这是一个抉择的过程。到这里,一个简单的例子也解释完毕了,通过LED这个简单的例子,已经大概了解到这个设计的复杂了,如果是大型项目,运用起来会很爽,小型的话完全没必要这样分层,太麻烦了,严重减慢开发效率,时间都用在思考如何进行分层才能符合框架分层的原则。原创 2022-12-20 23:33:19 · 1107 阅读 · 0 评论 -
分享一种通信协议的应用编程原理和思路
已剪辑自: https://mp.weixin.qq.com/s/wy-flva6pCNqHV3ObeLPCQ嵌入式开发过程中,UART、 CAN、 USB等通信基本离不开通信协议。下面给大家分享一种通信协议(MAVLink)在应用编程中的编程原理和思路。本节提供“”例程下载地址:地址:(公众号不支持外链接,请复制链接到浏览器打开)将需要发送的数据(如:SysState, BatVol),添加MAVLink通信协议,通过硬件(如:UART、CAN)发送出去。原创 2022-12-19 22:52:34 · 777 阅读 · 0 评论 -
一个单片机驱动LCD编程思路
在讨论怎么写LCD驱动之前,我们先大概了解一下嵌入式常用LCD。概述一些跟驱动架构设计有关的概念,在此不对原理和细节做深入讨论,会有专门文章介绍,或者参考网络文档。原创 2022-12-02 23:16:24 · 925 阅读 · 0 评论 -
前后台系统及嵌入式前后台模式实时性优化
前后台系统,即计算机前后台系统,早期的中没有操作系统的概念,程序员编写嵌入式程序通常直接面对及裸设备,在这种情况下,通常把程序分成两部分,即前台程序和后台程序。实现模式应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台程序则掌管整个软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫事件处理任务,前台程序也叫中断级任务。原创 2022-11-29 21:59:53 · 1749 阅读 · 0 评论 -
分享一个通用的嵌入式驱动层
https://mp.weixin.qq.com/s/bzPg5SremHDeIiguzvUVFA原创 2022-11-17 22:32:22 · 599 阅读 · 0 评论 -
嵌入式状态机的几种骚操作
已剪辑自: https://mp.weixin.qq.com/s/tulMJ7S7oOqV01J2E_-9Xg。原创 2022-11-17 22:26:07 · 486 阅读 · 0 评论 -
嵌入式软件分层隔离的典范
已剪辑自: https://mp.weixin.qq.com/s/9gVBZL0sTYIIcvQ_bKn8gw:嵌入式软件开发分层、模块化是理想状态,实际开发中因各种限制而有所取舍,但这不妨碍学习参考优秀软件架构,即使有部分思想在项目中落实,也是大有裨益的。原创 2022-11-17 22:16:15 · 400 阅读 · 0 评论 -
一种简洁、可拓展的RTOS任务初始化设计
已剪辑自: https://mp.weixin.qq.com/s/9IN3AZsqnvgvYLukqvlEPQ随着写代码功力的提升,个人对于代码的整洁、优雅、可维护、易拓展等就有了一定的要求,虽然自己曾经就属于那种全局变量满天飞,想到哪里写到哪里的嵌入式软件工程师;但是这一切在现在来说必须要结束了!要想做一个好的项目,我们时刻都要去想它的框架如何设计,如何去兼容未来的拓展,以便我们构建一个优雅、整洁、易维护、易拓展的程序,;因此,我们必须在代码的设计上利用编程语言的特性来下一些功夫。原创 2022-11-09 16:14:29 · 456 阅读 · 0 评论 -
真正的模块化编程原来是这样的!
真正的模块化,并不是简单文本意义上的,而是与逻辑相关的有逻辑意义的。一个模块应该像一个集成电路芯片,我们能见到能使用的都很清晰,它定义了良好的输入和输出。模块是可能分开地被编写的单位。这使他们可再用和允许广泛人员同时协作、编写及研究不同的模块。实际上,编程语言已经为我们提供了一种很好的模块化方法,它的名字叫做函数。每一个函数都有明确的输入(参数)和输出(返回值),同一个文件里可以包含多个函数,所以你其实根本不需要把代码分开在多个文件或者目录里面,同样可以完成代码的模块化。原创 2022-11-09 15:53:38 · 1023 阅读 · 0 评论 -
敏捷开发,持续集成/交付/部署, DevOps总结
随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发—测试—发布)模式已经不能满足快速交付的需求。2009 年左右 DevOps 应运而生,简单地来说,就是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。关于 DevOps 是什么,DevOps 的合著者 John Willis 写了一个非常好的帖子,在这里.原创 2022-11-07 21:39:10 · 1410 阅读 · 0 评论 -
一文讲清微服务架构、分布式架构、微服务、SOA
*2.微服务架构:**其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。**系统的服务化:**站在功能的角度,把业务逻辑抽象成 可复用、可组装的服务,通过服务的编排实现业务的 快速再生,目的:把原先固有的业务功能转变为通用 的业务服务,实现业务逻辑的快速复用;而且,它可以标准化,同样的容器不管在哪里运行,结果都是一样的,所以市场上有很多 SaaS 产品,提供标准化的微服务。原创 2022-11-07 21:38:18 · 4672 阅读 · 2 评论 -
单片机STM32有什么推荐的裸机编程架构
基于循环时间的跨平台任务管理系统(可用于MCS51,STM32等单片机)原创 2022-11-07 21:37:18 · 4301 阅读 · 0 评论 -
结构化程序设计
已剪辑自:是进行以****功能和处理过程设计为主的的基本原则。结构化程序设计是过程式程序设计的一个,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。是:顺序结构、选择结构和循环结构。顺序结构 :顺序结构表示程序中的各操作是按照它们出现的先后的。顺序结构的程序又称****简单程序****,这种结构的程序是顺序执行的,无分支,无转移,无循环,程序本身的很简单,它只依赖于能够顺序执行指令(语句)的特点,只要语句安排的顺序正确即可。选择结构 :选择结构表示程序的处理步骤出现了****分支****,它。原创 2022-10-10 20:08:32 · 1695 阅读 · 0 评论 -
软件形式化方法概述
还有一种是等价性验证,等价性验证其实是一种半形式话的技术,同前两种验证正确性的技术不同,它验证的是设计的一致性,即不同设计阶段的设计是否功能相同,这种技术中一般采用符号的方法和增量的方法,而且由于这种方法和硬件电路紧密结合,所以电路验证的一些传统方法也大量应用于此中方法中来,比如ATPG技术等。,软件需求的描述是软件开发的基础。软件设计的描述和软件需求的描述一样重要,形式化方法的优点对于软件需求的描述同样适用于软件设计的描述,另外由于有了软件需求的形式化描述,我们可以检验软件的设计是否满足软件的要求。原创 2022-10-10 20:03:14 · 333 阅读 · 0 评论 -
嵌入式软件编程模式
这里讨论的编程模式主要针对没有操作系统的嵌入式软件运行环境,在这种情况下,CPU的全部算力可以分配到和应用相关的计算,不需要额外执行IO资源状态、内存清理、调度等软件操作系统的管理任务,因此运行效率和内存使用效率会更高,但付出的代价是需要手动管理任务并发、IO状态检查、资源共享等,对开发者有更高的要求。这一设计模式和带优先级的事件队列运行模式相似,差别是这里的每个事件队列的优先级被执行时间所取代,系统根据当前时间检查事件队列,对于时间匹配的事件队列,执行队列中的所有事件,执行完删除该队列。原创 2022-10-02 11:49:37 · 3154 阅读 · 2 评论 -
软件耦合的分类及解决方法
已剪辑自: https://www.cnblogs.com/zhjblogs/p/14221560.html一、耦合(可以称为关联性)1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。二、解耦1、解耦,字面意思就是解除耦合关系。原创 2022-09-27 23:19:52 · 7617 阅读 · 0 评论 -
软件开发中会使用到的图
其实最好的图是手稿,不但画起来快,还能让你的思维专注到构思上,用什么颜色之类的问题不会对你产生干扰。另外我们不要为了画图而画图,结合实际的情况把握好尺度,一般情况下,时间上不太会允许我们把图画的面面俱到,能覆盖到核心甚至80%就很好了。1.匿名用户2.张恂老师3.如果你想及时得到个人自写文章的消息推送,欢迎扫描下面的二维码~。原创 2022-09-26 23:15:51 · 5621 阅读 · 0 评论 -
软件开发总结
设计原则一句话归纳目的开闭原则对扩展开放,对修改关闭降低维护带来的新风险依赖倒置原则高层不应该依赖低层,要面向接口编程更利于代码结构的升级扩展单一职责原则一个类只干一件事,实现类要单一便于理解,提高代码的可读性接口隔离原则一个接口只干一件事,接口要精简单一功能解耦,高聚合、低耦合迪米特法则不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度只和朋友交流,不和陌生人说话,减少代码臃肿里氏替换原则不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义。原创 2022-09-26 22:05:41 · 1245 阅读 · 0 评论 -
软件工程总结
软件开发技术和软件项目管理。[1]软件开发技术:软件开发方法学、软件工具和软件工程环境。[1]软件项目管理软件度量、项目估算、进度控制、人员组织、配置管理、项目项目等。[1]关于软件工程的定义,在GB/T11457-2006《消息技术软件工程术语》中将其定义为"应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、和维护的工程或进行研究的学科"。创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。[4]...原创 2022-08-13 01:40:46 · 973 阅读 · 0 评论 -
什么是软件架构?常用的软件架构
软件架构所指的就是说相应的系列性的抽象模式,可以为设计大型软件系统的各个方面提供相应的指导。从本质上来看,软件架构是属于一种系统草图。在软件架构所描述的对象就是直接的进行系统抽象组件构成。连接系统的各个组件之间就是做到把组件之间所存在的通讯比较明确与相对细致的实施描述。处于相应的系统实现环节,那么就会使得细化这些抽象组件成为现实的组件,比如可以是具体的某个类或者是对象。从面向对象领域进行分析,那么各个组件之前实施的连接实现往往是接口。...原创 2022-08-13 01:17:37 · 11574 阅读 · 1 评论 -
嵌入式为什么没有嵌入式软件架构师?
转载于:https://www.sohu.com/a/207313547_505803此处嵌入式特指基于linux平台,单片机和其他rtos不在讨论范围~我从事嵌入式软件开发有6,7个年头,bsp、驱动、应用软件、android hall、framework等都有涉猎。平时除了关注嵌入式行业的发展,也多少对Web、后台服务端、分布式等方向的技术有一些关注。近期有萌生换个行业方向的想法,想做做后台服务器相关的开发,由于之前工作中并没有这方面的实际需求,只是自己平时关注,了解了些知识,比如:NIO、epo原创 2022-05-28 13:28:57 · 297 阅读 · 0 评论 -
互联网架构的软件架构是否会对车用软件等传统嵌入式领域的系统架构产生影响
转载于:互联网架构的软件架构是否会对车用软件等传统嵌入式领域的系统架构产生影响?? - 辣笔小星的回答 - 知乎 https://www.zhihu.com/question/34875160/answer/2410436442要回答互联网软件架构是否会对汽车软件传统嵌入式领域系统架构产生影响,就要来一起讨论一下汽车面向服务软件架构SOA是什么,以及它会给汽车行业带来哪些变革吧。什么是SOA架构↑面向服务架构SOA概念面向服务架构SOA,即(Service-Oriented Architectu.原创 2022-04-30 22:39:17 · 1580 阅读 · 1 评论 -
重构代码总结
下面推荐一下进行代码重构的文章:重构指北——《重构,改善既有代码设计》精读经验总结 | 重构让你的代码更优美和简洁常见代码重构技巧如何实施代码重构?代码重构新手教程:如何将烂代码变成好代码?...原创 2022-04-20 23:08:26 · 233 阅读 · 0 评论 -
RT-Thread 编程风格
文章目录1.目录名称2.文件名称3.头文件定义4.文件头注释5.结构体定义6.宏定义7.函数名称、声明8.注释编写9.缩进及分行10.大括号与空格11.trace、log信息12.函数13.对象14.格式化代码使用 astyle 格式化使用 formatting 格式化这是一份 RT-Thread 开发人员的开发指引。RT-Thread 做为一份开源软件,它需要由不同的人采用合作的方式完成,这份文档是开发人员的一个指引。RT-Thread 的开发人员请遵守这样的编程风格。同时对于使用 RT-Thread原创 2022-02-16 23:28:22 · 585 阅读 · 0 评论 -
跨平台组件方案设计
转一篇看完有点收获的文章:https://blog.csdn.net/c12345423/article/details/117914561一、背景说明模块是对业务的抽象,组件是对功能的抽象,组件化的目的是为了将高频使用的功能点抽象成独立的插件,供开发者调用,提高开发效率;跨平台组件通过对不同芯片平台的兼容适配,提供给应用开发者无差异化的无感接口;解决以往同一个功能组件,各芯片端/业务线需要分开维护,造成人力浪费的问题;跨平台组件示意图如下:二、设计原则2.1 功能独立组件内部不能互相显式调用,原创 2022-02-12 00:46:52 · 576 阅读 · 0 评论 -
架构设计:如何实现一个高性能分布式 RPC 框架
在前面的课程中,我们由浅入深地讲解了 Netty 的基础知识和实现原理,并对 Netty 的核心源码进行了剖析,相信你已经体会到了 Netty 的强大之处。本身学习一门技术是一个比较漫长的过程,恭喜你坚持了下来。纸上得来终觉浅,绝知此事要躬行。你是不是已经迫不及待想在项目中使用 Netty 了呢?接下来我会带着你完成一个相对完整的 RPC 框架原型,帮助你加深对 Netty 的理解,希望你能亲自动手跟我一起完成它。我先来说说,为什么要选择 RPC 框架作为实战项目。RPC 框架是大型企业高频使用的一种中间原创 2022-02-05 21:14:53 · 925 阅读 · 0 评论 -
分布式、分布式系统、分布式计算、分布式存储
用大白话聊聊分布式系统什么是分布式系统,如何学习分布式系统分布式学习最佳实践:从分布式系统的特征开始(附思维导图)分布式系统分布式[到底什么是分布式系统?你需要了解这些](https://segmentfault.com/a/1190000023951396)一文详解分布式系统分布式与微服务,定义,区别,理解...原创 2022-02-05 19:19:36 · 1713 阅读 · 0 评论 -
如何高效地学习开源项目
转载于:https://time.geekbang.org/column/article/10022你好,我是华仔。今天这期“特别放送”,我想和你聊聊如何高效地学习开源项目,一方面澄清开源项目学习过程中的几个误区,另一方面谈谈我自己具体实践时的一套方法论。得益于开源运动的蓬勃发展,众多技术顶尖的公司、团队或者个人通过开源的方式向技术社区贡献了许多优秀的开源项目,一方面大大促进了整体技术的发展,另一方面大大减轻了中小公司和团队在技术方面的投入压力,让团队能够更加聚焦于业务。开源项目对团队和业务有很大好处原创 2022-01-27 19:04:27 · 777 阅读 · 0 评论 -
任正非:全面提升软件工程能力与实践,打造可信的高质量产品
最近看了点软件工程相关的东西,转一下篇文章吧。全面提升软件工程能力与实践,打造可信的高质量产品 致全体员工的一封信我今天写信,是要和大家沟通公司如何全面提升软件工程能力和实践。二十年前的IPD变革,重构了我们的研发模式,实现了从依赖个人、偶然性推出成功产品,到制度化、持续地推出高质量产品的转变。至今为止,我们的产品和解决方案已经在170多个国家安全稳定运行,并因此积累和赢得了全球数万客户的信任。今天,我们又处在一个原创 2022-01-20 23:56:44 · 650 阅读 · 0 评论 -
事件驱动和消息驱动
之前简单写过一些关于事件驱动的文章:【C/C++服务器开发】事件驱动、事件驱动架构、事件驱动编程及设计模式。最近看到一篇不错的文章,在此转载一下:事件驱动和消息驱动事件驱动和消息驱动消息驱动和事件驱动很类似,都是先有一个事件,然后产生一个相应的消息,再把消息放入消息队列,由需要的项目获取。他们的区别是消息是谁产生的消息驱动:鼠标管自己点击不需要和系统有过多的交互,消息由系统(第三方)循环检测,来捕获并放入消息队列。消息对于点击事件来说是被动产生的,高内聚。事件驱动:鼠标点击产生点击事件后要向系统发原创 2022-01-20 22:35:33 · 4565 阅读 · 0 评论 -
【C/C++服务器开发】事件驱动、事件驱动架构、事件驱动编程及设计模式
文章目录一、事件驱动二、事件驱动编程事件驱动和异步IO看图说话讲事件驱动模型三、C/C++实现事件驱动四、常用的C/C++事件驱动库一、事件驱动首先我们来看看百度百科的介绍。所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作. 事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(如时钟原创 2021-12-03 22:28:13 · 7797 阅读 · 1 评论 -
软件项目开发流程以及人员职责,软件工程中五种常用的软件开发模型整理
文章目录一、软件项目开发流程逻辑图开发流程需求分析概要设计详细设计编码测试软件交付验收维护软件维护软件升级软件项目开发流程以及人员职责软件工程中五种常用的软件开发模型整理软件系统开发流程七大详细步骤完整介绍一、软件项目开发流程逻辑图这张图应该清楚的说明了一个软件项目开发的各个流程。项目启动会项目启动会的目标是明确该产品开发项目的目标。目标不是孤立存在的,目标与计划相辅相成,目标指导计划,计划的有效性影响着目标的达成。所以在执行目标的时候,考虑清楚自己的行动计划,怎么做才能更有效地完成目标,是每原创 2021-12-22 19:25:40 · 11120 阅读 · 0 评论 -
C语言注册机制原理及实现
文章目录一、前言二、注册机制1.问题描述2.如何解决这种问题定时器运用注册机制定时器的使用方法一、前言想要理解注册机制,首先我们需要对函数指针,回调函数有一定的了解。之前我的一篇博客已经详细的讲解了:C语言回调函数详解(全网最全)二、注册机制1.问题描述在使用定时器的过程中最令人苦恼的就是,定义flag,holdtime,每用一次定义就会导致中断函数中标志位满天飞,时间变量在程序中随处可见。在想要移植,又不敢随便删除。程序处于高耦合状态,失去了一个.c 一个 .h的意义。2.如何解决这种问题原创 2021-11-21 00:01:32 · 3872 阅读 · 2 评论 -
【C/C++服务器开发】同步与异步、阻塞与非阻塞、同步调用和异步调用的概念
同步与异步首先我们要明确的是,同步和异步都是针对两个或者两个以上的事物来说的。比如当我们在网上购物看中一件物品,然后去浏览该商品详情的时候,首先页面会先发送一个请求,后台服务器查询对应商品的相关数据,然后前端详情页面才根据返回数据展示该商品的详细信息。而此时你的网速比较差,一个详情页面等了将近一分钟才全部展示完成,这时候你问这个请求是同步还是异步?答案显然是同步请求,它给我们最直观的表现形式就是页面一直显示在加载中,商品的详情页面渲染必须要等待后台服务器返回商品详情数据后才能进行。也就是说下一个操作必须要原创 2021-11-20 23:59:44 · 3913 阅读 · 4 评论 -
嵌入式编程之状态机
文章目录1、什么是状态机?2、状态机编程的优点(1)提高CPU使用效率(2) 逻辑完备性(3)程序结构清晰3、状态机的三种实现方法switch—case 法表格驱动法函数指针法小节摘要:不知道大家有没有这样一种感觉,就是感觉自己玩单片机还可以,各个功能模块也都会驱动,但是如果让你完整的写一套代码,却无逻辑与框架可言,上来就是开始写!东抄抄写抄抄。说明编程还处于比较低的水平,那么如何才能提高自己的编程水平呢?学会一种好的编程框架或者一种编程思想,可能会受用终生!比如模块化编程,框架式编程,状态机编程等等,都原创 2021-11-02 00:11:05 · 17984 阅读 · 4 评论 -
C语言模块化编程规范
C语言编码规范:参考优秀公司的编码规范和gjb的编码规范。(整理到附件中)模块的划分:这个是重中之重,高内聚,低耦合。(软件架构和模块划分)模块的命名、变量的命名、函数的命名。这个地方可以参考优秀的软件代码。比如我们可以使用和VxWorks一致的系统命名。命名格式:camelCase命名法(驼峰式命名):开头单词小写,后面单词首字母大写。在Java的官方标准中,Camel命名法被作为主要命名法。使用的很普遍,很多人习惯这种命名方法。示例:userName。命名方法:一般...原创 2021-05-23 15:03:55 · 1142 阅读 · 0 评论