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

从ADS1115单次读取转换数据-详细位运算解读版

如果学了前文看这个就容易了,这个操作来自于ADS1115的转换数据读取。...可以看到是一个16bit的结果,所以就要接收和拼接 这个就是转换的代码 读取ADC数据: 通过I2C通信与ADC设备交互,读取转换结果。...receiveI2CData(CONFIG_ADDRESS, regData, 2): 通过I2C通信从ADC的配置寄存器(CONFIG_ADDRESS)读取2字节数据,并存储到 regData 数组中...(regData[0] & 0x80) 表示“如果第7位为0,则继续循环”。 代码里面一把都有转换完成标志: 通常是一个特定的位(如第7位),用于指示转换是否完成。...很多人可能会问,这么复杂有什么用? TI也推出了自己的精密转换库,学会一个: 就相当于学会多,这个投资值了,很新的库

5700

利用Swift协议替换历史遗留的代码

维护任何应用程序、框架或系统的一个重要部分是处理历史代码。...无论一个系统的架构有多好,历史遗留问题总是会随着时间的推移而被建立起来——这可能是因为底层SDK的变化,因为功能集的扩展,或者仅仅是因为团队中没有人真正知道某个特定部分是如何工作的。...选择你的目标 我们要做的第一件事是选择我们应用程序中需要重构的部分。它可以是一个经常导致问题和bug的子系统,它也许使实现新功能比正常情况下更难,或者是团队中大多数人都不敢碰的东西,因为它太复杂了。...最后,我们可以从我们的项目中删除LegacyDatabase——我们已经成功地用一个闪亮的新类取代了一个历史遗留类——所有这些对我们应用程序的其他部分的影响和风险都是最小的。...你最喜欢的重构技术是什么,你觉得用这种方式替换历史遗留代码有用吗?

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

    如何培育好的内部开发者平台体验

    DevOps 将发布所需的所有技能带入了一个团队,这减轻了开发人员的一些认知负担,他们不再需要——过多地——担心代码之上的安全性、支持和成本,因为他们团队中的运维工程师已经涵盖了。...但是,Bangser 继续说道,这也导致了大型组织的大量重复工作,在这些组织中,DevOps 团队并没有 100% 专注于为最终用户创造价值,因为他们仍然关心基础架构、扩展和安全性。...“所以你有一个团队来生产和操作工具来帮助其他团队为他们的最终用户生产和操作他们的软件应用程序,”Bangser 说,提供了平台工程的最新定义。...主要是应用程序开发人员,但也不要忘记可能需要硬件或其他不同功能的数据科学家和机器学习工程师。她还观察到,在平台设计中需要考虑领导和治理社区——包括监管和金融。...这些边界可能因利益相关者而异,但请记住记录这些差异,包括: 平台是做什么的? 平台团队负责什么? 应用程序团队负责什么?

    12210

    坏了,我的RTX 3090 GPU在对我唱歌!

    接着,Desai 发现了一个有趣的现象,即与运行 CUDA 图形或自定义内核相比,Pytorch Eager 模式会导致更响的 GPU 线圈噪音 ——Desai 表示甚至能听到代码运行的声音!...Desai 推测这可能是因为 Eager 模式在内核启动之间有更长的延迟,导致 GPU 核心负载的变化更大,从而在 GPU 的电感器中产生更强的磁场振荡。...为了测试这一点,Desai 编写了一个内核,该内核可以从全局内存中执行大量加载,这是一项非常耗能的操作,并改变内核启动之间的持续时间,Desai 发现确实可以通过这种方式控制线圈噪音!...SRAM 单元由 6 - 晶体管触发器电路组成,并且由于这里涉及到的唯一电容是晶体管栅极,因此访问数据的速度变快了很多。 但是,SRAM 也有缺点,它的芯片面积和制造复杂性导致了更高的成本。...80-90% 的内存带宽,而你原本可能会天真地认为这些内核应该接近 100%,而且这个问题的复杂性非常深。

    15810

    【i.MX6ULL】驱动开发5——设备树原理与点亮LED

    上篇文章(【i.MX6ULL】驱动开发4--点亮LED(寄存器版))介绍了在驱动程序中,直接操作寄存器了点亮LED。...本篇,介绍另外一种点亮LED的方式——设备树,该方式的本质也是操作寄存器,只是寄存器的相关信息放在了设备树中,配置寄存器时需要使用OF函数从设备树中读取处寄存器数据后再进行配置。...对应ARM-Linux开发,这些板级描述文件存放在linux内核的/arch/arm/plat-xxx和/arch/arm/mach-xxx中。...LED是应用程序不需要修改,仍使用上一篇文章中的程序即可。...测试方法与之前基本相同: 使用设备树的方式,再次点亮LED: 5 总结 本篇介绍了设备树的基本原理以及设备树的使用方法,在上一篇点亮LED的代码基础上,通过设备树的方式,实现了LED点灯,总结一下主要的修改就是先在设备树中添加

    1.7K30

    如何设计出正确的搜索模式?

    但切记搜索框的设计必须与你的网站或应用程序的主题相吻合,并同时确保它足够引人注目。 Youtube新的(令人惊叹的)黑色主题通过保持搜索模式与其他元素的一致性就完美地阐述了这一点。...3.透明占位符 为输入的占位符文本使用适当的副本很重要,它们通常是暗示用户可以搜索的内容。 这确保了他们知道要搜索什么,并且不会因编写错误导致查询失败而感到沮丧。...因此,尽量保持用于占位符文本的副本简短而直接。使用较长的提示会增加用户的认知负荷,从而损害用户体验。你可以在这里了解更多有关有害标签和占位符的信息。 在某些项目中可能需要设计一个更具体的搜索功能。...在这里,自动提示就可以派上用场了。 采用自动提示的目的不是为了使搜索速度更快,而是在用户查询构建中提供一点帮助。 你可以通过执行预测的搜索模式来实现这一点。例如用户想问这个可怕的词是什么?...搜索是一个不断发展的模式,我知道这篇文章没有涵盖所有现有的指导方针。了解这一点,我希望这篇文章能够帮助到你们当中的一些初学者,甚至UX和UI设计的老手。

    1.5K60

    人工智能革命需要时间

    与此同时,在现实世界中,我们往往在数据与我们的直觉相冲突之前才以数据为导向,研究已经揭示了这一点很多年。...上周 Jan Lieke 辞去了 OpenAI 的工作,原因之一是他担心“安全文化和流程在 OpenAI 中已经让位于闪亮的产品”,即使风险迫在眉睫。...这可能也是 Mims 第一个观点背后的一个关键因素:颠覆被高估了。...的终结,但只要应用程序在该代码上运行,就会有人受雇维护该系统——永远。 考虑到 AWS 现在是一项年收入 1000 亿美元的业务,但在整个 IT 市场中仍然是一个舍入误差。...云计算代表着数亿美元的 IT 支出,但绝大多数企业 IT 美元服务于内部工作负载。这种情况正在改变,但很缓慢。为什么?因为人们实施了这些内部应用程序,并将继续维护它们很多年。

    12100

    成为一个喜鹊程序员

    软件世界前进的改革步伐是无情的。我们的周围充斥着各种所谓闪亮和新的东西,其概念本身开始瓦解,一遍一遍又一遍地重复这些陈词滥调,直到它们成为无意义的名词。“闪亮”和“新颖”最终成为平凡,甚至是司空见惯。...亚精英(高级)开发人员跟随精英开发人员的脚步,也来学习新语言,开辟了书籍、培训等的市场,同时也加速了语言的开发和测试。...Andy Hunt和Dave Thomas的看法是,Pragmatic Programmers(实用型程序员)是Ruby中最后一波改变的重要组成部分,这在一份2004年的IEEE column中说得非常详细...追逐技术的前沿,还不如专注于[用COBOL]为自己或客户建立一个有效的系统。不但易于使用,还易于理解和快速部署。框架使用多种技术的混合:用于建模的技术,用于代码生成的技术,还有一些可重用的组件,等等。...不要在不知不觉中让追求新的、闪亮的东西成为你的目标。不要成为喜鹊开发人员。有选择性地追求闪亮和新颖的东西,有助于你成为一个更好的开发人员。

    92010

    在单体架构中应用Hystrix

    回退 当连接到外部系统时,我们通常不会考虑如果远程系统停机我们应该支持什么回退操作,我们倾向于乐观并假设,在99%的情况下,这个系统将在没有任何错误的情况下做出响应并且响应速度非常快。...一些更成熟的开发人员将处理大多数可预测的错误,记录它们并可能通知用户操作失败。如果我们开始使用Hystrix会有什么变化?...当然,我们会鼓励(或者甚至强迫)我们考虑在出现错误时应该做些什么,因为Hystrix的基本配置包括为指定的业务操作定义了回退。 让我们假设我们正在设计一种管理我们书籍的服务。...在发送电子邮件之前,用户填写的表单将有一个等待显示正在进行的操作。 如果SMTP服务器开始响应非常慢,会发生什么?当花费太长等待时间,用户会尝试再次执行它。...线程池分离 外部系统慢还导致一个问题 - 线程池会用光,当越来越多的线程执行远程调用并且它们永远留在那里无法收回到线程池时会发生什么?当然我们所有的线程都挂在这个调用上,我们正在消耗越来越多的线程。

    93410

    9个DevOps最佳实践-你应该做什么和不应该做什么

    这样,我们就不再依赖人类对我们的代码进行手动测试;取而代之的是,我们设置了在引入的每一个微小变化上运行的自动化测试。 通过增加测试频率和测试数量,我们减少了将错误引入生产系统的机会。...它还为我们的系统和流程提供了更多信心,消除了人为错误和沟通不畅,并提高了团队的绩效。 6. 在开发生命周期的早期加入安全性 安全性不应该是集成到软件开发中的最后一件事。...在基础设施领域,即使是最微小的错误也可能导致严重中断。...在寻求采用 DevOps 实践的过程中,人们误解了他们的范围并犯了导致常见反模式的错误。让我们看看公司在实施 DevOps 原则时面临的一些常见挑战、陷阱和误解。 1....这可能是由于积累的知识、更高水平的经验或一个人增加的努力。当这种模式出现时,它可能会迅速导致 DevOps 英雄反模式,在这种模式中,特定的团队成员对团队来说变得不可或缺。

    1.1K30

    软件架构30条原则

    而且,有了这个原则,你的发布也会更流畅。 原则 8: 我们都喜欢闪亮的设计,但是不要将您永远不需要的特性和解决方案引入到架构中。 可选的原则 原则 9: 要完全考虑用户将如何使用我们的产品是不可能的。...如果你这样做了,系统就会像骡子一样慢。 分布式系统 原则 16:状态系统是可扩展的和直接的。尽可能了解和使用无共享架构。...严格执行这一点可能是错误的,有时我们发现我们添加的特性根本没用,然后所有额外的工作都白白地浪费掉了。最后,如果这导致了多个团队之间的协商,那么这个特性可能永远无法完成。...现在回过头来看,当我试图消除复制导致的显著复杂性时,我愿意忍受重复。治愈可能比疾病更糟糕。 结论 作为架构师,一个人应该像一个园丁一样思考,他塑造、管理和清除杂草,而不是定义和建造。...虽然在短期内支配体系结构可能更便宜、更容易,但从长期来看,指导和让团队找到他们的方法是有好处的。 如果你不小心,那么你就更容易从架构出发,因为设计师只告诉你他的架构是错误的,而不告诉你为什么是错误的。

    71220

    APM(应用性能监控) 行业认知系列 - 一

    应用程序性能中的问题最常见于应用程序代码或基础架构服务。...在代码错误之外,性能问题始终源自应用程序与外部系统接口这一点。容器,虚拟机,存储或网络. 数字服务现在必须在非常复杂的基础设施中进行大规模和高速度的转变,这些基础设施可以包括混合云和软件定义的网络。...由于基于微服务的应用架构变得更加常见, 应用程序的依赖性变得更加分散和动态。如果车轮上的单个齿轮失效,整个系统可能停止工作,导致减速(性能下降),用户体验受挫和收入损失。...影响这些应用程序性能的主要因素之一是他们必须连接的大量第三方。事实上,第三方组件占应用程序体验的2/3. 随着第三方增加, 复杂性和错误风险增加,可用性差和响应时间慢。...如果用户和服务器之间的延迟较高,最成熟的应用程序都将非常慢。最烂的应用程序都可以在一切都是本地的时候获得各种赞誉。我认为低延迟是IT经理在其网络上可以拥有的最重要的资产。

    1.1K10

    深度解析垃圾回收:Minor GC 和 Full GC

    本文将深入探讨这两种垃圾回收类型,提供代码示例,帮助您更好地理解它们。 什么是垃圾回收? 垃圾回收是一种自动管理内存的技术,它追踪和释放不再被程序使用的内存对象。...在不使用垃圾回收的情况下,程序员需要手动分配和释放内存,这容易导致内存泄漏和程序错误。垃圾回收器负责在程序运行时识别和回收不再需要的对象,以便将内存用于其他目的。...老年代存放的是生命周期较长的对象。 Full GC通常比Minor GC慢,因为它需要检查整个堆内存,包括大量对象。这个过程可能会导致应用程序的停顿,因此需要谨慎使用。...在实际应用程序中,垃圾回收的性能和效率非常重要。合理的内存管理和垃圾回收策略可以显著提高应用程序的性能和稳定性。因此,程序员需要深入了解 垃圾回收的工作原理,以便根据应用程序的需求进行优化和调整。...希望本文能够帮助您更好地理解Minor GC和Full GC的概念,并为您在实际编程中更好地利用垃圾回收提供了一些启发。

    82130

    Python黑客Victor Stinner访谈

    没有可靠基准的情况下尝试不同的优化方法很可能导致时间的浪费和不成熟的优化。无用的优化可能使代码更糟,更不易懂,甚至更慢。有用的优化必须至少让程序加速5%。...应该手工重复测试,以得到稳定的结果。 优化是非常花时间的,所以最好能专注那些耗费最多CPU的函数。为了找到这些函数,Python提供了cProfile和用来记录每个函数时间消耗的profile模块。...也有一些用来优化Python的非常手段,但是应该避免使用它们,因为这一点点的速度提升会丧失代码的可读性。 Python之禅(PEP 20)说:“应该有一种—最好只有一种—显而易见的方式去实现。”...另一个稍微复杂的方式是编写异步代码。Twisted、Tornado和Tulip都是利用了这一技术的面向网络的库。 你见过最多的导致性能差的“错误”是什么?...没有很好地理解Python就可能写出效率低的代码。例如,我见过在不需要复制时错误地使用了copy.deepcopy()。 另一个性能杀手是低效的数据结构。

    76230

    dotnet 已知问题 警惕 StreamReader 的 EndOfStream 卡住线程

    如果在判断是否读取完成时,使用的是 StreamReader 的 EndOfStream 属性,则可能破坏原本的异步出让逻辑,导致线程被卡住 对于带 UI 的应用程序,如 WPF 等应用来说,如果 UI...访问 EndOfStream 会导致 StreamReader 执行一次同步读取 Stream 的过程 假定 Stream 是一个读取非常慢的对象,如卡顿的网络下的响应内容。...当读取完成的时候,则会返回 null 值 当然了,使用 ReadLine 方法读取的时候,使用 EndOfStream 属性是没有什么问题的,因为本身就在进行同步读写 为什么在使用 ReadLineAsync...从 C# 属性设计上讲,通用的属性应该都是获取速度十分快的,然而 EndOfStream 属性违背了这一点,居然是进行同步读取 Stream 内容才能判断,这就导致了如果 StreamReader 所读取的...如果此时 _stream 的读取缓慢,则会卡住线程 本文代码放在 github 和 gitee 上,可以使用如下命令行拉取代码。

    7210

    环境网格:无边车Istio能否让应用程序更快?

    为什么应用程序在环境网格中有时更快? 我们一直被教导服务网格会增加延迟。Quentin 的结果在这里得到了复制,显示了一个工作负载在通过服务网格运行时 更快 的情况。发生了什么事?...鉴于 P50、P75、P90 和 P99 在环境运行中都比连接关闭慢,因此似乎可以安全地排除 ztunnel 中的连接池,因为第一个理论可能会使请求更快。...第三个理论 继续查看表 3 中的测试结果,为什么在存在额外的跳跃到 ztunnel pod 以及环境提供的重大优势(例如 Fortio 和 details 服务之间的 mTLS 和 L4 可观察性)的情况下...我预计这种模式在企业中非常普遍,一些 HTTP 库和应用程序在缓冲和刷新方面做得更好,而另一些则没有那么好。这通常与应用程序的年代和它们构建的 SDK 相关。...我记得我只能使用旧的 Bookinfo 应用程序达到 1200 RPS,这已经导致了很小比例的错误。现在我可以将负载增加到 4000 RPS 或更高,而不会出现错误。

    18610

    实测一手LLaVA-o1推理大模型

    以下是推荐理由:实用性强:文章提供了从环境准备、代码下载、镜像构建到容器运行的完整步骤,适合希望在本地搭建 Paint Board 的用户。...工具结合:通过引入 cpolar 内网穿透工具,解决了本地服务无法被外网访问的问题,拓展了 Paint Board 的使用场景。图文并茂:文章配有详细的截图和命令行示例,便于读者理解和操作。...从下面图可以看到,如果推理阶段没有使用这种搜索方法,尽管模型生成了正确的推理步骤,但在推理过程中无法得出具体答案。这导致模型在结论阶段进行猜测,从而得出错误的结果。...第一步:分析了具体的问题,然后重点关注微小的闪亮球和紫色物体第二步:计算了图片中共有10个物体,然后减去那些闪亮的小球,接着也识别到了紫色物体,再进行相减第三步:最后得出了答案,从10个物体中减去2个,...我们需要根据给定的序列和运算确定一个变量的值。但是从后面的几个步骤来看,好像模型没有正确识别出图片中需要计算的背景是什么,导致只给出了一个平均值之差为3的结论。

    14310

    慢的不是 Ruby,而是你的数据库

    解决 Ruby 代码中的性能问题轻而易举:只需增加更多服务器。然而,解决数据库性能问题就没那么容易了,因为扩大关系数据库规模困难重重,甚至有时不可能。...这对所有软件都是如此,但 Ruby 放大了这一点。Rails 的 163500 行 Ruby 代码当然无助于加快速度。 “代码行” 并非性能指标,但它们是一种指示。...我们没有看到这一点,因为在开发和测试中,性能从未下降。但我们应该注意到的是,这种错误在代码库中比比皆是。...这些项目之所以继续运行,唯一的原因是 Heroku 服务器的巨大成本(1200 美元 / 月),能为数百访问者提供服务一天。这样的错误不会导致数据库集群崩溃,而是逐渐累积成昂贵且性能糟糕的应用程序。...未优化的连接。添加简单的 has_many 太容易了,这使得开发人员可以在数据库中启动过于繁重的查询。一旦通过应用程序引入和传播,这几乎不可能解决。

    15130

    技术分享 | App常见bug解析

    这种错误的产生有两种可能 1、前端代码写的文案错误 2、接口返回值错误 功能错误 功能错误是在测试过程中最常见的类型之一,也就是产品的功能没有实现。比如图中的公众号登录不成功的问题。...界面展示错乱 产品界面上的元素展示重叠(如下图),这类型的错误一般是前端代码问题。 界面展示后台信息 前端页面展示了不应该出现的后端日志信息(如下图),这类的错误一般是由于后端服务错误导致。...产生崩溃的原因有很多,有可能是代码中存在多余空格、开发人员对该段代码的处理欠佳,未做异常处理等等。...这些异常在最坏的情况下,不仅影响本 app 的使用也可能会导致系统故障,操作系统崩溃,整个 app 无法再继续使用。 这一类的问题会导致客户体验非常差,影响产品的口碑。...太耗电和流量 在使用应用的过程中,点击某一个事件进入的页面出现白屏的闪动等

    65730

    如何用7个简单的步骤,在Firefox开发工具中调试JavaScript

    本文将着重于在Firefox的开发工具中调试JavaScript代码。Firefox中的开发工具是一个非常强大的工具,可以加速您的bug查找和修复过程! 我们将要采取的步骤如下: 1、示例项目介绍。...步骤2、分析Raygun错误报告 进入Raygun的错误报告有很多信息可以用来查找和修复错误,让我们看看我们正在处理什么。 ? 调试错误所需的信息位于堆栈跟踪模块中。...堆栈跟踪的消息部分是错误的简要概述。在本例中,对未定义的值调用toUpperCase方法。 堆栈跟踪告诉您错误发生的位置和导致错误的函数调用序列。...现在,您可以使用“Step In”按钮移动到对capitalizeString函数的调用中。 ? 导航调用堆栈 当您像这样浏览代码时,您可能想要跳转回父函数,以检查此时发生了什么。...既然已经导航到错误发生的位置,我们需要检查应用程序的状态并找出导致错误的原因。 在代码继续之前,有很多选项可以用来确定变量包含的值和表达式的值。我们将依次研究每一个。

    4.2K60
    领券