首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

韦东山:6000字长文教你如何学习嵌入式开发

1.2, 在硬件操作上单片机和Linux是类似的 以点灯为例, 无论是单片机还是Linux,我们要做的事情都一样: ① 看原理图,确定引脚是哪一个,确定它输出什么电平才可以 ② 看芯片手册,确定要怎么操作寄存器...③ Linux内核 Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。...要了解一下根文件系统 你辛辛苦苦写出了应用程序,怎么把它放到板子上,让它开机就自动启动? 你写的程序,它依赖于哪些库,这些库放到板子上哪个目录? 怎么做一个可升级的系统?...③ Linux内核 Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。...要了解一下根文件系统 你辛辛苦苦写出了应用程序,怎么把它放到板子上,让它开机就自动启动? 你写的程序,它依赖于哪些库,这些库放到板子上哪个目录? 怎么做一个可升级的系统?

2.2K1915

DDD话语“聚合”中的伪创新-软件方法(下)第8章Part15

AGGREGATE是一簇相关联的对象,我们把它作为数据变化的单元来对待。...……根是AGGREGATE的成员中唯一允许外部对象持有引用的,…… 以图8-133为例,按照这个说法,我们可以说: (“植物”+“根”+“茎”+“叶”)等一簇相关联的对象形成了一个Aggregate,其中...要把这个圆过去,可以把“植物”排除在组成Aggregate的“一簇相关联的对象”之外,说“一簇根、茎、叶对象组成了植物Aggregate”,不过,Eric Evans又说了“根是AGGREGATE的成员...这是一个伪创新。 对象就是由其部件(包括属性值和其他对象)组成的,把部件去掉,对象就什么都不剩了,哪里还有什么根?...如果某个对象集合组成了另一个类的对象,那么这个类应该还有会其他属性(或关联)。

40010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    翻译 | 我在 React-Native app开发中曾经犯过的11个错误

    . 2、当你在预测 form的时候-你最好要一并考虑一下数据验证层.例如,当你使用React Native开发应用程序的时候,你会比使用Cordova时写更多的代码. 3、如果你需要在已经已经开发完毕,...如果有更多的复杂结构,我建议使用这个计划.你会明白什么是什么.在哪里找到他们. 5. 错误的项目结构 当你是一个新手的时候,规划项目结构很难. 首先要理解你的项目有多大? 大?真的很大?巨大?...错误的container结构.没有从一开始就使用smart/dumb组件 当你初始化一个RN项目,在index.ios.js文件中已经有了样式,存储在一个独立的对象中....但是要确保并不要深度定制一个小组件,这样会让组件的规模过大,这样一来很难去读懂代码.确确实实是这样.在需要添加一个新属性的时候,似乎是解决问题的最简单的办法,在未来这个小举动可能会在读代码的时候把你搞晕...过度的依赖zIndex 很多人从web开发转移到RN开发.在web开发中,有一个css 属性是z-index.它帮助我们展示我们需要的内容,在web中,这么做很酷.

    74520

    DDD领域驱动设计 (C# 整理自“老张的哲学”)

    明确含义:一个Bounded Context(界定的上下文)可能包含多个聚合,每个聚合都有一个根实体,叫做聚合根; 识别顺序:先找出哪些实体可能是聚合根,再逐个分析每个聚合根的边界,即该聚合根应该聚合哪些实体或值对象...如果把 Address 当一个实体,增加主键,就可以Code First通过,但是这个对我们来说是不行的,我们是从领域设计中考虑,需要把它作为值对象,是作为数据库字段,你也许会想着直接把 Address...//注意,这个是一个突发的,项目上线后的需求 ​ ​ } 这个时候你可能会说,这个项目太假了,不会发生这样的事情,这些问题都应该在项目开发的时候讨论出来,并解决掉,真的是这样的么,这样的事情多么常见呀...; return Task.FromResult(new Unit()); } 这个时候,我们把错误通知信息在事件总线中发布出去,剩下的就是需要在别的任何地方订阅即可,还记得哪里么,没错就是我们的自定义视图组件中...很简单,当我们在触发某个领域对象的某个行为时,该领域对象会先产生一个事件,然后该对象自己响应该事件并更新其自己的状态,同时我们还会持久化在该对象上所发生的每一个事件;这样当我们要重新得到该对象的最新状态时

    2K20

    如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    那么我们在把它们建立为值对象的同时,又需要持久化到数据库。这里就如这个等级折扣。   场景2:一个聚合根的内部引用了一个值对象的集合,那么如果使用的是关系型数据库进行存储,必然需要单独存一个表。   ...三、场景2的思考 场景2里有一个比较容易踩进去的坑,为了持久化把原本设计成值对象的改为实体(特别是针对一个值对象的集合的时候,需要一个唯一表示来区分其中多个值对象)。...那么在使用关系型数据库的情况下,我们可以通过使用以下几种方式解决这个问题:   1.把值对象中的属性作为所属实体/聚合根的数据列来存储。     ...缺点:会导致数据表列数较多,在一个数据页存储的数据量变少,影响数据库表的使用性能。   2.把整个值对象序列化后作为所属实体/聚合根的数据列来存储。     ...缺点:出现大数据长度的列,页会导致在一个数据页存储的数据量变少,影响数据库表的使用性能。另外无法直接通过SQL来查询值对象的属性,需要自定义做反序列化操作。

    79930

    新人怎样学习嵌入式Linux?

    也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。...具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。...当然是上网聊天什么的了。这些上网、聊天工具在哪? 在C盘、D盘上。所以, windows要先识别出C盘、D盘。在Linux下我们称为根文件系统。...但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?    答:全局变量应该在内存里 3. 那么谁把全局变量放到内存里去?    ...对于Linux做出来的产品,有些用作监控、有些做手机、有些做平板。那么内核启动后,挂载根文件系统后,应该启动哪一个应用程序呢?  答:内核不知道也不管应该启动哪一个用户程序。

    5.3K10

    【一日一技】揭秘字符串的两副“面孔”

    现在,当你在命令行交互环境直接输入变量名再回车的时候,你看到的是'test',当你输入print(a)的时候,你看到的却是test。 直接输入变量名回车,字符串会被单引号包起来。...在定义的时候,我使用的是单根反斜杠。 当我输入变量名,然后回车时,看到的结果是'D:\\game\\pal4',不仅有最外层的引号,而且反斜杠全部变成了两根。...当你要表示反斜杠本身的时候,就应该是\\这种写法。 当然在定义的时候你可以只写单根反斜杠,在大多数情况下,Python会理解你的意图,所以它会自动把单根反斜杠转换为两个反斜杠。...输入print(you)显示的又是什么内容。 ❖ ? ? 运行效果图 从上面的例子可以看出,直接输入变量名回车和直接用print函数打印调用的是对象的不同方法。所以他们当然可以不一样。 ?...上面说到,当你输入Windows路径的时候,大多数情况下,Python能够理解你的意图,把单根反斜杠转成双反斜杠。不过也有例外的情况。 例如: 假设有一个文件夹的名字叫做u6211。

    73730

    韦东山:6000字长文告诉你如何学习嵌入式linux

    1.2 在硬件操作上单片机和Linux是类似的 以点灯为例, 无论是单片机还是Linux,我们要做的事情都一样: ① 看原理图,确定引脚是哪一个,确定它输出什么电平才可以 ② 看芯片手册,确定要怎么操作寄存器...1.3 在单片机中点灯、使用LCD 使用单片机开发程序时,我们一上来就写一个main函数,下面是一些简化的代码: ?...③ Linux内核 Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。...要了解一下根文件系统 你辛辛苦苦写出了应用程序,怎么把它放到板子上,让它开机就自动启动? 你写的程序,它依赖于哪些库,这些库放到板子上哪个目录? 怎么做一个可升级的系统?...有时候连书籍都没有,你需要直接啃代码。 当你想从事某个行业时,就需要深入研究行业相关的知识。

    7.4K70

    Linux目录详解,软件应该安装到哪个目录

    我们应该知道 Windows 有一个默认的安装目录专门用来安装软件。Linux 的软件安装目录也应该是有讲究的,遵循这一点,对后期的管理和维护也是有帮助的。...在硬盘容量不够时,也可将 /opt 单独挂载到其他磁盘上使用。 源码放哪里? /usr/src 系统级的源码目录。 /usr/local/src 用户级的源码目录。...这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。...一般情况下,我们可以把tomcat等都安装到这里。 /proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。...共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。 /tmp 用于存放各种临时文件,是公用的临时文件存储点。

    25.9K54

    Beginner Tutorial 1: SceneNode, Entity,和SceneManager 结构

    一个在Ogre中需要注意的问题是它把可渲染的对象跟它们的位置与方向进行了分离. 这意味着你不能直接把一个Entity放到场景中去....当你创建一个Entity的时候,在你把它 绑定 在一个SceneNode之前,它是不会被绘制的. 相似的, 单独一个SceneNode 不是可以在屏幕上显示的物体....当你看向屏幕的时候, x轴应该是从左到右的, 并且右侧是x轴的正方向. Y轴在屏幕是从下到上的,上面那一端是正方向. Z轴是从里到外的,屏幕外的这一端是正方向....每个物体的网络和纹理只会载入内存一次,所以当你试着保存它们的时候并没有省下多少资源. 唯一节省的是你创建和销毁Entity对象所花费的那一点点时间而已....这些话的用意是当你在本也测试你的程序时, 你可以把所有的东西都"打开" 就是不要移除任何东西).

    45510

    万字破解云原生可观测性

    软件架构 最初我们开始学习开发的时候可能都是从主机模式着手,随后学习基于 C/S 架构的开发模式,接着是从 J2EE 的流行到现在的微服务和基于容器的服务,以及目前比较热门的基于流程编排的开发架构。...但我们发现,虽然开发、迭代、交付的效率得到了很大的提升,但是系统或者应用变得稍微复杂了一些。 那么在今天这样一个云原生时代呢,我们应该以什么样的方式对云原生应用进行监控和管理呢?...当你看到这样一个悲观的场面时,监控系统也没办法告诉你到底是哪里不工作了,以及为何不工作了。...从上图来看,可观测性包含了传统监控的范畴。总的来看这一套“信号量”显得有点复杂,我们尝试将其精简一下: ? 我们把它精简成为三根支柱,也可以认为可观测性是由日志、指标和追踪三根支柱去构建的。...一般社区在交流的时候也会选用如下这张图去讲解: ? Lgging,展现的是应用运行而产生的事件或者程序在执行的过程中间产生的一些日志,可以详细解释系统的运行状态,但是存储和查询需要消耗大量的资源。

    1.4K21

    架构之路(六):把框架拉出来

    确定方案之后,美工出效果图,前台切图出静态页面,程序员改成动态的,一页一页的做。 任务考核就大概是这样的,“我们今天把某个页面做完”。 这种做法的好坏利弊我们就不展开了。...由于(至少是暂时)不再需要考虑这些对象和存储问题,那么在测试的时候,我需要一个对象,只需要直接new一个就行了,而不是从数据库里取,这多方便啊!...所以还是把它放到了Entity中使用。 认为Repository是“聚合根”的一种,和取出/存储对象并列,应该置于Entity之外。...对系统数据的操作,我们脑海中应该是这样一个概念: 前提:所有的对象平时都是直接的存储在磁盘里,然后: 我们需要某个/些对象时,就把他们从磁盘里取出来,加载到内存中 进行一些操作修改...那么这里就有一个问题,我不想她只是一个单纯 的美工,画出效果图切片弄成一个html的静态页面就完了,我希望她一样的用VS进行开发,用Razor做成view,还负责页面的交互和跳转,所以她还 得在Controller

    59990

    Java开发框架必会Struts2第三天

    思路:我们在设置【开发模式】时,覆盖掉了一个default.properties中的常量,能不能把struts-default.xml中的默认拦截器栈的设置给覆盖掉呢?答案是可以的。 ?...e、d中遗留的问题:我们在声明时配置了哪些方法需要拦截,哪些方法不需要拦截。但是在没有写动作类和动作方法之前,不确定方法名叫什么。 解决办法:我们需要在使用拦截器的时候给它注入参数。 ?...三、OGNL简介(非常重要) 1、什么是OGNL OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个单独的开源项目。...这两个对象存储了整个动作访问期间用到的数据。并且把数据绑定到了线程局部变量(ThreadLocal)上了。所以是线程安全的。 ? ?...六、Struts2对EL的改变 1、Struts2中使用EL的问题: 前提: 我们应该知道,如果我们没有往值栈(根)中放入数据的话,那么我们的动作类默认是在值栈的栈顶。 ? ? ? ?

    914100

    .NET领域驱动设计—实践(穿过迷雾走向光明)

    本节想强调的是正确的识别出领域中的“基础数据”和“业务数据”,让后将其合理的关联来表达领域模型; 1.3.3】模型在数据库中的主外键关联问题 当模型落实到代码上的时候我们就要考虑如何将模型在关系型数据库中存储的问题...;】 这里我们只讨论面向关系型数据库的存储方式;聚合是一类实体的集合,会有一个“带头”的实体也就是聚合根,我们对它的操作需要很小心,比如:当你插入一个聚合根时会把聚合根所涉及的一些附属模型都插入,这个时候就是错误的...,比如我们在分析一个系统的时候总是喜欢假设它应该具备什么功能,那么这些功能真的能替你画龙点睛呢,还是在画蛇添足;普遍现象是分析人员在进行分析的时候都没有一定程度的搞懂需求的真正目的是什么,每一个需求的背后是价值驱动的...;我们一直都认为自己的设计能力不错,就是一直没找到合适的地方运用,至少在数据库驱动的软件开发中你是用不上什么设计思想的,逻辑都在数据库的存储过程里面;你的面向对象设计如何的了得不,你的面向接口编程运用的如何的出神入化...其实到目前我们对系统都没有进行实质性的编码或者设计数据库,在以往这个时候数据库已经出来了,然后对着一张E-R图讨论系统的需求。

    1.3K100

    领域驱动设计(DDD) - 乐享诚美

    我们应该紧密关联领域建模和设计,紧密将领域模型和软件编码实现捆绑在一起,模型在构建时就考虑到软件和设计。开发人员会被加入到建模的过程中来。...; 聚合根负责与外部其他对象打交道并维护自己内部的业务规则; 基于聚合的以上概念,我们可以推论出从数据库查询时的单元也是以聚合为一个单元,也就是说我们不能直接查询聚合内部的某个非根的对象; 聚合内部的对象可以保持对其他聚合根的引用...仓储(Repository) 仓储被设计出来的目的是基于这个原因:领域模型中的对象自从被创建出来后不会一直留在内存中活动的,当它不活动时会被持久化到数据库中,然后当需要的时候我们会重建该对象;重建对象就是根据数据库中已存储的对象的状态重新创建对象的过程...这样做的原因是:由于仓储背后的实现都是在和数据库打交道,但是我们又不希望客户(如应用层)把重点放在如何从数据库获取数据的问题上,因为这样做会导致客户(应用层)代码很混乱,很可能会因此而忽略了领域模型的存在...当然,其实说人不需要角色就能睡觉也是错误的,错在哪里?因为我们可以这样理解:一个客观存在只要具有“人”的角色就能睡觉,其实这时候,我们已经把DESC当作角色来看待了。

    41230

    架构杂谈

    开发视图:开发人员怎么看,开发文档和设计文档 进程视图:程序运行状态,线程、进程、系统交互,UML活动图 物理视图:部署视图,部署、网络、可靠性、可伸缩 问题: 在不同开发阶段实现架构设计的方法论有哪些...一个聚合是一组相关的被视为整体的对象。每个聚合都有一个根对象(聚合根实体),从外部访问只能通过这个对象。根实体对象有组成聚合所有对象的引用,但是外部对象只能引用根对象实体。...基于聚合的以上概念,我们可以推论出从数据库查询时的单元也是以聚合为一个单元,也就是说我们不能直接查询聚合内部的某个非根的对象; 服务(services) 服务这个词在服务模式中是这么定义的:服务提供的操作是它提供给使用它的客户端...服务应该是无状态的。 工厂(factories) 工厂用来封装创建一个复杂对象尤其是聚合时所需的知识,作用是将创建对象的细节隐藏起来。...DDD在管理层面实现的最大困难在哪里? DSL(Domain Specific Language) 如果我们能把设计做到极致,它就能成为一门语言,一门解决一个特定问题的语言。

    53410

    一周技术思考(第25期)-编写害羞的代码

    这么多年过去,我依然记得,在我第一份工作面试的时候,面试官问我,“你认为面向对象最伟大的地方在哪里”,刚走出校园的我并没有回答到面试官的“心坎里”,当时被告知的答案是多态。...我把它看做是登入面向对象大门的第一个门槛,一个对象要保证不会向其它模块透露任何不必要的信息,也就是让我们的类“害羞”起来,不要随便的“袒露心扉”,要编写“害羞”的代码。...在软件开发的世界里,我们一直矢志不渝地管理复杂度,以“对象”的方法来思考将有助于我们定义和设计复杂的的系统,我们会把一个系统看做是一群相互作用的组件,而不是试图从整体上处理这个复杂的组合体。...这也是为什么,在我们考虑一个系统的性能的时候,不会只看一个机器环境,而是要看整个大的运行环境,我们其实是很需要画一张图的,什么图呢,就是大家都各自画一张自己当前所维护的系统所在大运行环境的图,你的数据从哪里来...如果我们只关注Tomcat服务的监控,有些请求压根就没有过来,所以你看到的数据永远是正常的,当你在比如Nginx服务器上面部署监控的时候,你可能就会发现实际是有很多异常的错误码,这些请求都已经影响了我们的用户了

    23620

    「首席架构看设计」权威领域驱动设计(DDD)简介

    因此,域专家不会根据屏幕或菜单项上的字段描述新的用户故事,而是讨论域对象所需的基础属性或行为。类似地,开发人员不会讨论数据库表中的类或列的新实例变量。 严格要求我们开发一种无处不在的语言。...存储库是持久性存储的抽象,返回实体 - 或者更确切地说是聚合根 - 满足某些标准。例如,客户存储库将返回Customer聚合根实体,订单存储库将返回Orders(及其OrderItems)。...通常,每个聚合根有一个存储库。...如果使用对象关系映射(ORM)工具(如Hibernate),我们可以在实体之间导航引用,允许我们透明地遍历图形。根据经验,对其他实体的聚合根的引用应该是延迟加载的,而聚合中的聚合实体应该被急切加载。...他们还可以通过以下方式与表示层进行调解:解组入站请求;使用域服务(存储库或工厂)获取对与之交互的聚合根的引用;在该聚合根上调用适当的操作;并将结果编组回表示层。

    80110

    架构杂谈

    开发视图:开发人员怎么看,开发文档和设计文档 进程视图:程序运行状态,线程、进程、系统交互,UML活动图 物理视图:部署视图,部署、网络、可靠性、可伸缩 问题: 在不同开发阶段实现架构设计的方法论有哪些...一个聚合是一组相关的被视为整体的对象。每个聚合都有一个根对象(聚合根实体),从外部访问只能通过这个对象。根实体对象有组成聚合所有对象的引用,但是外部对象只能引用根对象实体。...基于聚合的以上概念,我们可以推论出从数据库查询时的单元也是以聚合为一个单元,也就是说我们不能直接查询聚合内部的某个非根的对象; 服务(services) 服务这个词在服务模式中是这么定义的:服务提供的操作是它提供给使用它的客户端...服务应该是无状态的。 工厂(factories) 工厂用来封装创建一个复杂对象尤其是聚合时所需的知识,作用是将创建对象的细节隐藏起来。...DDD在管理层面实现的最大困难在哪里? DSL(Domain Specific Language) 如果我们能把设计做到极致,它就能成为一门语言,一门解决一个特定问题的语言。

    51840

    DDD领域驱动设计实践

    我们应该紧密关联领域建模和设计,紧密将领域模型和软件编码实现捆绑在一起,模型在构建时就考虑到软件和设计。开发人员会被加入到建模的过程中来。...; 聚合根负责与外部其他对象打交道并维护自己内部的业务规则; 基于聚合的以上概念,我们可以推论出从数据库查询时的单元也是以聚合为一个单元,也就是说我们不能直接查询聚合内部的某个非根的对象; 聚合内部的对象可以保持对其他聚合根的引用...仓储(Repository) 仓储被设计出来的目的是基于这个原因:领域模型中的对象自从被创建出来后不会一直留在内存中活动的,当它不活动时会被持久化到数据库中,然后当需要的时候我们会重建该对象;重建对象就是根据数据库中已存储的对象的状态重新创建对象的过程...这样做的原因是:由于仓储背后的实现都是在和数据库打交道,但是我们又不希望客户(如应用层)把重点放在如何从数据库获取数据的问题上,因为这样做会导致客户(应用层)代码很混乱,很可能会因此而忽略了领域模型的存在...当然,其实说人不需要角色就能睡觉也是错误的,错在哪里?因为我们可以这样理解:一个客观存在只要具有“人”的角色就能睡觉,其实这时候,我们已经把DESC当作角色来看待了。

    70550
    领券