• 可重复烧录10万次!瑞芯微国产全新通用快充芯片发布

    可重复烧录10万次!瑞芯微国产全新通用快充芯片发布

    近日,瑞芯微发布了两颗全新的通用快充协议芯片,分别是RK835、RK837。那么两款芯片具体是怎么样的呢? RK835通过了PD2.0、PD3.0、PPS认证,编号TID 4325,支持QC 2.0、QC 3.0、QC 4.0、QC 4.0+、VOOC快充协议,能够快速便捷与各类电源芯片对接,支持18W-100W输出。内部集成ARM Cortex-M0内核、60KB Flash、1KB RAM,从而实现对PD和其他专有快充协议的支持,可以承受10万次以上的重复烧录。它可用于电源角色的USB Type-C和PD物理层,并支持E-Marker线缆供电,超低功耗模式下耗电量低于10μA。 RK835核心特性:-内部集成ADC,可连续检测电压、电流、温度,以及通过GPIO引脚反馈的系统参数- 所有的GPIO均可配置成边缘触发中断,DP/DM引脚可配置UART模式和BC1.2模式-支持I2C接口和主从模式,集成输出放电功能- DP/DM/CC1/CC2引脚均支持24V耐压,可有效防止损坏的数据线造成产品损坏,并内置过流、过压、过热保护。 RK837除了通过PD2.0/PD3.0/PPS认证(TID 5141),还通过了高通QC4+认证,证书编号20210303222。内部集成Flash、RAM分别增加到64KB、2KB,同样支持10万次以上的重复烧录。 核心特性:- 支持USB Type-C和Type-A双接口,支持I2C接口- 集成NMOS驱动,VBUS开关管可使用低成本性能好的NMOS,内部集成快速放电电路- 内部集成高精度ADC,可实现3-22V以10mV精度输出,使用5mΩ取样电阻,可实现0.1-12A以12mA精度恒流- DP/DM/CC1/CC2引脚均支持26V耐压,可有效防止损坏的数据线造成产品损坏,并内置过流、过压、过热保护。 瑞芯微电子有限公司(Fuzhou Rockchips Electronics CO., Ltd)是国内独资的专业集成电路设计公司和经国家认定的集成电路设计企业,专注于数字音视频、移动多媒体芯片级的研究和开发。公司自主研发的RK2606A芯片被誉为2006年度中国最亮的一颗“芯”,荣获“最佳市场表现奖”,迅速成为MP3高端芯片的第一品牌。2007年“瑞芯数字音视频处理芯片控制软件”在第11届中国国际软件博览会上获得金奖,与微软正式建立战略合作关系在语言复读机领域。该公司已经申请成功了两个国家专利。目前正在进行市场推广的数字多媒体处理领域以及未来的数字广播领域专利的申请。 早在4月7日,瑞芯微发布年度业绩快报公告,公告中显示2020年1-12月营业总收入为18.63亿元,比上年同期增长32.37%;归属于上市公司股东的净利润为3.19亿元,比上年同期增长56.31%。公司总资产为27.18亿元,比本报告期初增长31.71%;基本每股收益为0.79元,上年同期为0.55元。得益于公司的远见卓识,瑞芯微很早就在人工智能物联网(AIoT,例如各类行业应用)、音频/视频(例如智能音箱,平板电脑,智能电视盒子)等产品领域发展。在AI领域,2017年瑞芯微就推出了带有AI功能的1108和1608,随后又在2018年陆续发布了1808和1806,浮点运算能力已经高达3T,同时和3399搭配组合成3399Pro,开发出更多客户需求。 月31日,国内知名CPU厂商瑞芯微发布调价通知函,4月1日起对芯片产品进行不同程度的价格上调,所有未交付订单将按新价格方案执行。 在此前缺芯潮的时候,瑞芯微表示,由于晶圆、基板、封测的成本已经发生了不同程度的大幅上涨,同时产能紧张,各个链条的交期延长,当下有限的供应无法满足快速增长的市场需求。公司在继续自行承担大部分成本上涨的基础上,决定对芯片产品进行不同程度的价格上调。 瑞芯微始终自主创新的产品研发方向和 “经营公司须先经营人才”的人才理念,拥有一支高素质的、经验丰富的技术研发团队,独立完成从芯片到SoC软件的整体解决方案,并在此基础上拥有多个自主知识产权。瑞芯的合作客户遍及国内 外知名公司,已成为移动互联芯片解决方案的领先品牌。 瑞芯人每年以业务增长200%-300%的速度飞快前进,以坚韧的毅力和饱满的热情担负着发展民族IC设计产业的责任,我们真诚欢迎各位心存远大抱负、乐于接受挑战和追求成就感的年轻人加盟,共创民族IC产业!

    嵌入式硬件 芯片 瑞芯微 快充芯片

  • 英国政府欲调查英伟达收购ARM案

    英国政府欲调查英伟达收购ARM案

    在英国的当地时间周一,英国政府以可能构成国家安全问题为由,宣布将对美国芯片大厂英伟达(Nvidia)400亿美元收购日本软银旗下的英国芯片设计公司ARM一案启动调查,这也使得这起原本就有着较大争议的并购案的未来走向变得更加的不乐观。 英国信息部长奥利弗·道顿(Oliver Dowden)周一表示,他希望英国的竞争监管机构评估其影响。他说:“在认真考虑了拟议的收购之后,我今天发出了干预通知。下一步,为帮助我收集相关信息,英国的独立竞争管理部门现在将就交易的影响编写一份报告,这将有助于做出进一步的决定。 2020年9月,美国芯片行业巨头英伟达(NVIDIA)宣布,将以400亿美元(约合人民币2599亿元)的交易价收购英国芯片设计公司ARM,若交易达成,这将成为半导体史上最大一笔收购,英伟达也可借此成为半导体行业又一龙头巨擘。不过近日,这笔交易正式遭到了英国的出手干预。英国干预交易的消息一出,英伟达盘中便跌逾4%。该公司发言人紧急回应称,并不认为这笔交易构成任何重大的国家安全问题,未来公司将继续与英国政府密切合作。但对于英伟达的回应,市场大多都“存疑”。毕竟2020年7月,该公司就已凭借2510亿美元的市值超越老牌巨头英特尔(2480亿美元),成为北美最有价值的芯片企业,同时也是全球第三大芯片公司;若再成功收购规模不俗的ARM,其势必会在芯片设计领域形成垄断地位,届时,英国很可能会面临技术限制的风险。美国银行表示,若不收购Arm,英伟达能以20亿美元的代价来取得超250亿美元的潜在市场规模 (TAM),即10:1的投资回报率,还能以现金和股票的形式节省380亿美元。相反,收购Arm,英伟达则需付出400亿美元的代价,仅仅才取得1250亿美元的潜在市场规模 ,即3:1的相对较低的回报率。也就是说美国政府十分赞成,但是美国银行却不看好英伟达收购ARM。 ARM到底是一家什么样的公司,国内和英国为什么要反对它被英伟达收购?从本质上来讲,ARM专门负责研究芯片架构技术,其推出的ARM架构与英特尔的X86架构,是目前全球最主流的两种架构技术。而站在影响力的角度来看,ARM架构是所有移动芯片设计公司都离不开的核心技术,包括苹果、高通以及华为等巨头都需要它的授权。更有甚者,连苹果、高通等美企都不赞成英伟达收购ARM,因为它们心里很明白,一旦ARM架构落入英伟达手里,要想得到授权就必须付出更大的代价,不利于接下来的发展。在这种一面倒的反对形势下,英伟达只好搁置了自己的计划,但是它并未死心。 NVIDIA(纳斯达克股票代码:NVDA)是一家人工智能计算公司。公司创立于1993年,总部位于美国加利福尼亚州圣克拉拉市。美籍华人Jensen Huang(黄仁勋)是创始人兼CEO。1999年,NVIDIA定义了GPU,这极大地推动了PC游戏市场的发展,重新定义了现代计算机图形技术,并彻底改变了并行计算。Jensen Huang在接受采访时说:“我们很清楚,ARM和英伟达都是独立的优秀企业。即使收购完成,我们也将继续推进各自擅长的独立业务。然而,我们合并后可以做很多事情。我非常有信心监管机构会看到这笔交易带来的好处。它将带来一股创新热潮,为市场创造新的选择。这将使ARM得以扩展到原本难以进入的市场。就像我宣布的许多合作伙伴关系一样,它们将AI带入ARM生态系统,也将英伟达加速计算平台带入ARM生态系统,而且只有我们和多家计算公司合作才能做到。监管机构将看到这些,我们与他们的讨论也非常具有建设性。我相信,我们仍将在2022年完成这笔交易,这符合我们最初预期的18个月。”

    嵌入式新闻 NVIDIA 英国 ARM

  • Linus:“C++ 真是一门很烂的语言!”

    他来了他来了!Linus 带着他的“暴脾气”又来了! 近日,Rust 进入 Linux 内核的决定已正式提上议程,上周其内核开发者  Miguel Ojeda 提交了一份在 Linux 内核中添加 Rust 支持的 RFC 引起热议。 对于这件事,许多人自然想知道 Linux 之父——Linus Torvalds 的看法,毕竟这是 Linux 这么多年以来,第一次要在其内核中加入除了 C 以外的第二门编程语言。因而外媒 IT Wire 就此问题采访了 Linus。 起初他还比较“矜持”,只是比较官方地回应说 Linux 内核对 Rust 的支持还在早期阶段,等到 5.14 版本可能才会合并相关补丁。 但在知道有开发者认为“应该用 C++ 而不是 Rust”时,Linus 的“暴脾气”终于还是藏不住了。 他大笑并讽刺道:“C++ 真是一门很烂的语言!” 01 十多年来,坚持站在炮轰 C++ 第一线 如果说,Linus 对 Linux 的“爱”这三十年来从未变过,那他对 C++ 的“恨”也可以说是十几年如一日。 他早在 2007 年就开始炮轰 C++ 了。 彼时,有位名为 Dmitry Kakurin 的开发者查看了 Git 源代码发现使用的是纯 C 而非 C++ 后,他表示不可理解,于是发帖喷道:“别拿可移植性说事儿,这是胡扯(原句这里是 BS,即 bullshit)。” 好家伙,结果这句“BS”直接引爆了 Linus 的炸弹脾气。 向来以言辞犀利著称、甚至曾对 Nvidia 比中指的 Linus 自然不避讳什么脏话粗话,因此他回怼的第一句就“以其人之道还治其人之身”:“*YOU* are full of bullshit.” 报了“BS”的仇之后,Linus 接下来还把 C++ 批的一无是处:“C++ 是一门很糟糕的语言”、“很多不合格的程序员都在使用它”、“我要把喜欢用 C++ 而不是 C 来开发项目的程序员都踢出去,免得他们来搞乱我参与的项目”、“C++ 最后做出来的就是一堆可怕、难以维护的垃圾”...... 自此,Linus 与 C++ 算是彻底杠上。 这还不算完,2010 年,Linus 又在邮件列表中接连发帖吐槽 C++。依他来看,C++ 真是一门很烂的语言。他表示,无论什么时候 C++ 都不可能是最正确的选择:系统编程里直接用 C 就可以,而非系统编程里,最好选择一种有垃圾收集的语言,但 C++ 的特性除了捣乱,基本无用。 他还嘲笑 C++ 的 new 关键字很蠢,认为“C++ 就是废物,根本没啥设计,只是在 C 上面加了些渣滓而已。” 而这次采访是 Linus 时隔多年以来再次于公共场合对 C++ 进行炮轰。 02 再一次被骂“很烂”的 C++ 这次引得 Linus 再次炮轰 C++ 的是 Linux Weekly News 网站上网友 @mss 的一条评论: 解决方案很简单:用 C++ 代替 Rust。 当代码调用不安全函数时,Rust 的内存安全就得不到保证了,而目前几乎所有内核 API 都在其中。不过,你也可以轻松地使用 C++ 进行此类手动标记。 本来呢,每个人都有发言权利,尤其在现在的互联网时代,网友发言更加随心随性,哪种编程语言更好也自然是“仁者见仁,智者见智”。 可这对 Linus 来说可就不同了。他一直视 C++ 为“废物”、认为它“无用”,结果居然有人认为他们精心挑选可以进入 Linux 内核的 Rust 还比不上 C++? 因此听到这个评论的 Linus 没控制住嗤笑出声,他鄙夷说道:“C++ 根本解决不了 C 语言的问题,它只会让事情变得更糟。这真是一门很烂的语言。” 他认为,那些不喜欢 C 语言的人可以去寻找真正能给你带来价值的语言。比如具有内存安全性并可以避免 C 导致的隐患的语言,或者具有内部 GC(垃圾回收)支持并简化内存管理的语言。而这个语言明显不是 C++,因为在 Linus 看来,C++ 解决的都是错误的问题,因而那些说“用 C++ 重写内核”的人都太无知了。 与 C++ 相比,Linus 选择无条件站在 C 这一边。“当人们谈到由 C 导致的危险时,也谈到了 C 如此强大的部分原因:'它允许你高效地实现所有这些低级的东西'。”Linus 提到。此外,尽管大多数情况下 GC 对于简化编程而言都是一件挺好的事,但是它通常不是你在低级系统编程中所能做的事情。 03 网友:C++ 不是垃圾 相信大家经常可以在网上看到许多人争论有关“最佳编程语言”的话题,但随着时间的推移,越来越多新兴编程语言的崛起,大多数的人都意识到了一个事实:每种编程语言都有自身局限性,也拥有其最擅长的用武之地。 因此这次 Linus 把 C++ 骂得“一无是处”引来许多开发者的抗议。 网友@ Chuck Messenger : C++ 的伟大之处在于它“就是 C”。你能用 C 语言做一些 C++ 做不到的事情吗?据我所知没有。在每次新的迭代中,C++ 都提供了对抽象的改进支持, 我对 Rust 很感兴趣,也有可能向它迁移。但是,C++ 在任何意义上都不是“垃圾”。 网友@stikves: 他说 C++ 不适合 Linux 内核可能是对的。不过对于 C++ 这个语言......大家都知道他的看法一直比较强烈吧。 当然,C++ 也适用于其他操作系统,比如 Windows、Mac OS,甚至Android。所以这都取决于不同的项目。 这次 Linus 又把 C++ 程序员得罪了一通,不过这么多年来他的“暴脾气”也没怎么改,或许就跟编程语言一样,Linus 的“火爆”也是部分开发者的“心头好”吧!

    嵌入式ARM Linux C

  • 安谋中国发布全新“山海”S12解决方案,持续巩固AIoT安全生态

    2021年4月20日,中国上海——安谋中国今天发布面向AIoT系统的全栈安全解决方案“山海”S12,包含硬件加解密引擎、安全软件和安全服务三大部分,从芯片的安全IP层到云端安全应用和安全管理提供全链路的安全保护。“山海”S12可以广泛应用于智能手机、平板、智能电视及安防等行业,为多种安全解决方案如数字版权保护、AI安全、身份认证等提供基础安全能力。 “山海”S12由安谋中国自主研发,重点匹配基于Arm® Cortex®-A和Cortex-R处理器的CPU,不仅能与Arm安全基础架构形成系统协同,同时支持未来的Arm安全架构,从而充分激活整个Arm安全生态体系的能力。与2019年发布的上一代“山海”产品相比,“山海”S12具备更高的性能,硬件加解密引擎支持多达16个Host同时访问,为多应用场景提供安全支持,可为相关设备在一个平台上运行多个操作系统,或者在一个操作系统上运行多个应用的场景提供安全保护。 “山海”S12的核心模块是TrustEngine-600密码算法引擎,支持国际通用算法以及中国商用密码算法,可更好支持客户安全业务多样性的需求。TrustEngine-600默认支持Arm TrustZone®,其算法及安全能力可根据需要灵活配置。此外,客户既可以使用安谋中国提供的随机数方案,也可以自定义随机数方案。“山海”S12还提供丰富的软件能力,包括安全启动、安全调试、安全烧录等。同时,“山海”S12可以提供云端的设备管理以及安全升级应用,为OEM和云服务提供商快捷实现设备管理和固件升级提供安全部件。 “山海”S12丰富的固件支持为客户的快速集成提供了保证,帮助客户快速设计芯片并快速推向市场。客户还可以便捷地对“山海”S12的算法和能力进行优化配置来增强适应力,满足不同场景对系统安全防护强度的不同需求,有效提高系统集成效率,降低产品成本。 “山海”S12具有以下技术特点: ◆ 为硬件IP层到云端安全服务提供一站式安全解决方案; ◆ 同时支持国内和国际两套密码算法,更好满足客户需求; ◆ 模块化设计,可灵活配置算法及能力,客户可根据自身需求组合出最佳解决方案; ◆ 支持多达16个Host的能力; ◆ 生命周期安全管理; ◆ 通过3级密钥派生增强密钥安全的管理能力。 安谋中国产品研发常务副总裁刘澍表示:“中国AIoT产业目前正处于高速增长的阶段,AIoT基础设施对安全性的要求也越来越高。一款好的安全产品除了要具备优异的性能,还需要能够快速响应客户的定制化需求。安谋中国‘山海’S12的推出显示出安谋中国具有良好的市场快速反应能力和向客户提供快速服务的支持能力,能够帮助客户做到快速集成,快速推出产品。以‘山海’为代表,我们持续丰富的自研产品线也证明了安谋中国在信息安全等领域具备一流的研发实力和技术储备。” 目前,“山海”S12已经可以向客户交付。

    Arm 安谋中国 AIoT 芯片

  • 远程升级单片机程序怎么设计?

    远程升级单片机程序怎么设计?

    之前的文章中介绍过串口和U盘的IAP程序设计。在物联网应用中,远程IAP升级MCU的程序是一项非常有用的功能。当设备出现程序问题或者需要更新程序时,只需要在服务器上对设备进行升级,不需要在有专门的人员去现场进行升级,节省人力物力。 要实现远程升级,首先要实现以下几个基本功能: 1、Flash读写。不管是本地IAP还是远程IAP,这都是最基本的功能。 2、无线通讯。可通过WIFI、4G、以太网等多种方式来实现,根据实际项目需求选择。 3、通讯协议。常用的通讯协议有TCP、HTTP、FTP、MQTT等。其中HTTP、FTP和MQTT都属于应用层协议,都是基于TCP(传输层)来实现的。用户也可以自己基于TCP编写简单的通讯协议来实现。 远程IAP与本地IAP的设计思路是一致的,都需要设计BOOT程序和APP程序。但也有一些需要注意的地方。主要是远程升级需要考虑网络延迟甚至网络中断的问题。体现在以下几方面: 设计程序缓存区 在内部或外部存储器开辟一块区域,用于存储分包接收到的程序数据。等到全部数据接收完毕后再一次性写入到Flash进行升级。这样做有以下2点好处: 1.直接升级时间可能会比较长,影响用户正常使用,增加缓存区设计可以大大减少升级时间。 2 增加缓存区设计后,即使升级数据传输失败,也不影响设备的正常使用。 健壮的通讯协议 本地升级时数据传输出错的概率比较小。但远程设计时就需要多考虑一些,比如前后两包数据可能同时达到等。因此,设计通讯协议时,就要更严谨,服务器发送的指令和数据都需要设备的确认回复。 程序备份设计 即使有上面的各种设计的保障,也不能保证升级过程不会失败。最好能够设计一个程序备份区,在程序升级失败时运行备份区程序。 下面介绍一种简单的远程升级的步骤。 服务器发送升级请求指令。 设备回复收到请求升级指令。 服务器发送程序升级数据。(一般包含包头、包号、总包数、分包的程序数据、校验) 设备收到程序数据后,确认校验无误,存储到程序缓存区,并按包号回复服务器,防止出现传输包错乱。 服务器收到回复后再发送下一包数据,直至结束。 程序数据发送完成后,服务器发送升级结束指令。 设备收到结束指令后,回复服务器。并在Flash指定位置写入升级标志,重启进入BOOT程序。 BOOT程序读取升级标志,若需要升级,则读取程序缓存区数据,写入到Flash中。 升级完毕,跳转到Flash指定地址运行。

    嵌入式ARM 服务器 远程升级 单片机

  • 嵌入式系统编程

    嵌入式系统编程

    今天分享的文章描绘出了一个真正的嵌入式程序员应该是怎样的模样,其实bug菌一直觉得嵌入式程序员是一个程序员世界中的鬼斧神工,他们利用极其简约的"物件"构造出精美的杰作! 好吧,不吹了,看了下面的译文你就了解了: 寄存器!示波器!胡子! 串口!C! 循环剃须!胡子!中断!汇编!等等,我刚刚提到胡子了吗? 如果我提到“嵌入式程序员”一词,我们行业中的大多数人都会立刻想起一个英雄角色的形象。 一个拥有神秘技能的伟大开发人员,有着渊博的神秘学的知识,对个人卫生的概念持半信半疑的态度,面部胡子拉碴,像神一样的形象。 然而,在秘密地研究了几年这个主题之后,我在这里告诉你,你们的想象统统不正确。 大多数嵌入式程序员都没有胡子,做嵌入式程序员也不必连做梦都要使用汇编语言,而且嵌入式程序员也会洗澡。 我还可以告诉你嵌入式编程非常有趣,收获颇丰,且富有挑战性。如果你对本文感兴趣,那么有可能将来你也会从事这一行。 请注意,以下内容可能有点雄心勃勃。我会介绍嵌入式程序应有的样子,而不是大多数嵌入式程序实际的样子。 这可能是一种理想的状况。突然偶遇嵌入式代码,你可能觉得非常吓人,觉得这些代码都是一些聪明的家伙写的高端代码。 但我想要告诉你,你会对Spotify的嵌入式编程感兴趣,而优秀的代码正是我们的奋斗目标。 所以,如果你也是一个嵌入式程序员,那么可能本文中介绍的代码与你每天使用的有出入,我明白你的心情,现实确实如此,但生活可以更加美好。 首先,我们来介绍一下嵌入式系统编程与嵌入式应用程序编程之间的区别。 嵌入式系统编程 :可能就是你想象中的嵌入式编程。 包括让嵌入式硬件平台正常运行所涉及的所有工作:编写设备驱动程序,引导加载程序,移植或编写操作系统,各种位操作,还要考虑到时钟周期问题。调试丢失的中断。 一连盯着示波器几个小时,埋怨编译器,讨厌中断控制器,就仿佛它是一个人一样。时常在午夜惊醒,冷汗淋漓,努力说服自己是猫偷走了中断信号的正面。不好意思,我跑题了。嵌入式系统编程确实涉及非常底层的东西。 嵌入式应用程序编程 :指的是为资源有限的系统编写应用程序的技术。这种开发更容易,开发环境很好。 还可以在台式计算机上编写、测试和调试代码。虽然有些约束可能很具挑战性,但是你无需考虑汇编、GPIO引脚或DMA描述符。 然而,你必须考虑内存的使用情况,运行环境,代码的大小和可移植性。但说真的,难道有人不喜欢这些工作吗? 本文讨论的是嵌入式应用程序编程,在Spotify我们大部分时间从事的都是这种类型的嵌入式编程。 1 简约之美 约束让我们的生活变得更加有趣。 与完整的管弦乐队录制的专辑相比,只用两根柱子和一杯水录制的音乐专辑需要更多的创造力。 虽然我对创造力或对“音乐”一词有着非常规的理解。但是, 我想表达的是嵌入式编程很有趣,但是有趣在哪儿呢? 大多数嵌入式程序的首要约束因素是大小,代码必须紧凑,常见的编程习惯(代码需要模块化,易于维护和测试,还要经过测试)仍然适用于嵌入式程序,除此之外还需要将代码量降到最低,而且还需要保证自给自足。 用一个概括就是: 优雅 。良好的嵌入式代码非常优雅。 那么什么是嵌入式编程呢?什么是嵌入式程序员?让我们继续往下看…… 2 内存的利用率--隐形的杀手 嵌入式程序员需要避开现代内存管理的概念。你几乎不可能实现垃圾收集。一个垃圾收集器可能就耗尽了代码容量的限制。 而且垃圾收集器还需要不时地运行实际的垃圾收集,这会破坏嵌入式程序的实时效果。 你甚至还需要避免常规的malloc(),调用malloc()可能会花费大量时间,因为分配器可能必须对分配区域进行碎片整理,才能释放出足够大的内存块来响应请求。 嵌入式程序员很乐意直接管理内存,编写自定义分配器,甚至通过静态分配的内存块来杜绝内存分配失败的发生。 大多数嵌入式系统和普通计算机之间的一个 重大区别就在于内存的组织方式 。 主流的台式机和服务器的处理器架构(如Intel x86)使用的编程模型中,代码和数据存储在同一个地址空间中。 这意味着如果你的机器有64MB的RAM(好大啊,太不可思议了!),而你的程序是40MB(令人难以置信!),那么你的数据就只剩下24MB(这么多,根本用不完啊!)。 在家的时候,我们称之为冯·诺伊曼架构,但在酒吧我们就不敢这么说,因为这会引发唇枪舌战。 由于RAM是处理器中功耗最大的一部分,而且由于RAM占用大量芯片面积,因此在许多嵌入式系统使用的模型中,代码和数据分别存储在不同的存储器中。 代码和静态数据存储在ROM(通常是闪存或EEPROM)中;而动态数据存储在RAM中。ROM比RAM便宜很多,因此通常使用的也较多(通常是5-10倍)。 RAM和ROM可以具有单独的地址空间(哈佛架构),也可以映射到统一的单个地址空间(改良版的哈佛架构,遗憾的是从未被称为小丑架构)。 除非你需要编写引导加载程序或系统内升级的功能(在这些情况下,你需要向代码的存储空间中写入),否则一般你不会注意到这两者之间的差异。 但这确实意味着代码的大小和RAM的使用率需要单独计算。换句话说:在嵌入式系统中,代码大小的限制不同于RAM使用的限制。 请记住,通常RAM的使用是最关键的参数。 3 你所看到的就是一切 嵌入式程序员确实是软件世界的佼佼者。他们喜欢亲手写程序,创建自己的代码库,使用20世纪60年代的语言,使用机械键盘。 很少有是现成的库可以满足嵌入式系统的特殊限制。虽然有很多JSON解析库,但很少有库能够支持大于RAM容量的文档的解析。 嵌入式程序员总是乐于尝试现有的库,因为他们都很懒。但是,如果没有合适的库,那么嵌入式程序员也很乐意重新发明更小、更快的工具。 由于嵌入式程序员非常重视理解和控制代码的执行和资源的使用,因此几乎所有代码都是用C语言编写的。 有时新的编程语言试图入侵嵌入式的世界,结果却会遭到嵌入式程序员的质疑。 这种语言有一些奇特的线程模型吗?请参见如下有关并发的讨论。 这种语言有垃圾收集吗?请参见如下有关性能的讨论。 这种语言的编译器是否支持人类已知的每种计算机体系结构? 请参见如下有关可移植性的讨论。简而言之,衡量标准设定得很高,而且C非常优秀。 嵌入式软件系统往往很好理解 。缺乏第三方的代码库和华丽的继承结构,而且还存在严格的代码大小限制,所有这些都保证了代码很小且易于理解。 在编写良好的嵌入式代码中,你在页面上看到的一切就是所有的代码。嵌入式程序员无需通过层层地剥离才能弄清楚代码的实际作用。 这并不是说实际的嵌入式应用程序的逻辑不会非常复杂,但至少我们不需要通过层层叠叠的抽象模式来隐藏这些逻辑。 4 并发 嵌入式开发人员都不喜欢并发。对于查尔斯·巴贝奇(可编程计算机的发明者,计算机的先驱)来说,一次做一件事就足够了,你也一样。 大多数形式的并发支持都需要不时地保存状态并切换到新任务。 这需要多个堆栈,每个任务一个,还需要很多的RAM,有时多得不是一点半点。现如今,堆栈很容易就占用1KB甚至更大的空间。 嵌入的程序员无法忍受这一点。他们宁愿手工处理合作性的任务切换、非阻塞的I/O、轮询、回调、手动任务调度、主循环。 这些都是嵌入式程序员最常用的东西。如果你不了解这些东西的含义,也不用担心,你可以参考本文末尾推荐的著作。 聪明的读者可能不禁想问:“难道不是所有类型的的任务切换都需要保存任务的状态吗?你岂不是将这些工作从操作系统转嫁到程序员头上了吗?” 嵌入式程序员会回答说:“然也!”,或者说:“将工作从操作系统转嫁到程序员头上,这就是嵌入式编程的工作啊!” 并发是一个难题。但是,抛开先入为主的多线程的概念,并发实际上就简单多了。你知道你的代码不会被中断,因此你很容易掌握执行顺序。 缺点就在于你需要为I / O等编写更多的代码,因为你不能使用阻塞。 前面说过的可怜的嵌入式系统程序员很不走运,对他们而言, 硬件中断会打乱所有的工作。 5 请可移植性 如果你的程序不能在人类所有已知的处理器体系结构上运行,那么你的程序就不算嵌入式程序。 大端、小端、基于堆栈的寻址、基于寄存器的寻址、RISC、 CISC、标量、向量、DSP或PIC,这些都无所谓。 代码无论放到哪里都可以正常运行。一个字节包含8比特?没那么快!嵌入式程序员不会做任何假设,他们会质疑所有问题。 如果有一天,客户要求你的程序在有分段只写内存和分支协处理器的基于Chewbacca 5000 12.5位堆栈的矢量CPU上运行,那么嵌入式程序员也可以坦然地告诉他:没问题。 这对你来说意味着什么?疯狂地刷旧版的C标准吧。 6 易于测试 由于嵌入式程序可以在“设备外”进行多种类型的测试,因此嵌入式程序员可以在编写测试代码的时候,尽情地尝试现代软件开发。 测试代码可以用Node.JS、Python、或C ++编写。我们可以在测试代码中在为堆栈上分配大对象,世上没有比这更享受的罪恶感了。 为硬件开发嵌入式程序时,测试绝对至关重要。你编写的代码最终会出现在永远不会更新的设备中。 有时你的代码会被刻录到ROM芯片中。如果在发布后才发现Bug,那成本可就十分昂贵了。 因此,坚决地贯彻现代测试的原则,对编写易于测试的代码保持热情,以及百分百完成测试覆盖率的决心,是嵌入式程序员非常宝贵的品质。 7 性能 对于大多数程序员来说,性能是一个简单的问题:“代码的运行速度够快吗?” 如果代码的运行速度比要求还快,则万事大吉。 对于嵌入式程序员来说,情况则略为复杂:“代码的运行速度够快吗?实时性够吗?功耗是否在计划内?” 除了RAM和代码大小的限制外,代码的运行速度还必须够快。 但不用过快。未使用的周期有助于降低功耗。降低功耗意味着电池寿命更长,产生的热量更少,而且在下一次硬件升级中可以使用更便宜,更慢的CPU。 我们总是与底层的硬件人员博弈。良好的嵌入式代码设计可以促进CPU进入睡眠模式,例如利用显式轮询,让系统可以在轮询之间休眠。这也意味着代码不应该因任何原因造成阻塞。 有些嵌入式系统有硬性的实时要求,例如起搏器。在这样的系统中运行的任何线程或任务都必须保证能够在固定的时间段内返回。 如果运行时间过长,则系统可能会完全失效。拿起搏器举个例子,这样的起搏器会被归类为“次品”。毋庸置疑,为心脏起搏器写代码的工作不适合胆小的人。 大多数嵌入式媒体应用程序都有软性的实时要求——如果线程或任务占用CPU的时间超过应有的时间,那么系统性能会被降级,但不会完全失败。 音频或视频可能会出现故障或卡顿。用户界面可能会感觉延迟。这绝对不是好事,但也不是灾难性的。 编写具有良好实时特性的代码非常类似于编写有助于CPU睡眠模式的代码,两者都是利用很短时间片,非常注意循环长度并且永远不会阻塞。了解你的代码路径。不惜一切代价避免递归。 8 怎样才能成为嵌入式程序员 有理想的嵌入式程序员都有哪些重要的特质? 你需要对计算机体系结构的基础知识有深入的了解。了解内存的层次结构,吞吐量瓶颈和硬件级别的并发问题。还有一颗强大的心理掌握寻址的工作原理(指针)。 此外,根据你需要使用的软件类型,可能还需要掌握一些行业的技术。例如,在Spotify,你需要对网络有很好的理解。 如果你觉得你对计算机体系结构的基础知识没有深入的了解? 那么请参照下列推荐书籍: 《计算机体系结构:量化研究方法》 这本书绝对是经典之作,写的非常好。如果你可以理解内存层次结构设计和线程级并行等章节,那么就可以应对内存管理、并发或吞吐量瓶颈相关的所有问题了。 《现代操作系统》 这本是也是经典之作。作者写道:“5年后,每个人都将在他们的200 MIPS,64M SPARCstation-5上运行免费的GNU。”这本书写自1991年,但书中的内容远远超过了作者的预知能力。书中有关内存管理的章节是内存管理方面优秀的入门读物。 《C语言程序设计 K&R》 标准的C编程书。有史以来最优秀的编程书籍之一。也可能是有史以来最好的技术写作范例之一。当然也是有史以来最畅销的数据。一定要读! 《C语言接口与实现》 这是一本关于正确使用C的书籍,书中介绍了如何使用最实用的数据结构和算法的示例,编写易于维护和测试的代码。 《C专家编程》 这本书对C语言及其与系统交互进行了深入探讨,介绍了内存管理、指针算法、编译器的工作原理、中断的处理方法。 除此之外,好奇心也是嵌入式程序员身上最重要的品质,渴望了解事物原理的冲动以及坚韧,愿意全身心地投入到工作中,不断学习。 END 直接来源:最后一个bug 素材来源: 作者 | Per Knytt 译者 | 弯月 责编 | 屠敏 本文为CSDN翻译,转载请注明来源出处。 版权归原作者所有。仅供技术的传播和学习讨论,如涉及作品版权问题,请联系我进行删除。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式ARM 内存 嵌入式 编程

  • RTOS任务间通信和全局变量有什么区别?

    转自 | Mculover666 1. 知识点回顾 队列(queue)是一种只能在一端插入元素、在另一端删除元素的数据结构,遵循先入先出(FIFO)的规则。 环形队列(ring queue)可以方便的重复利用这段内存空间,同样遵循先入先出(FIFO)的规则。 优先级队列(prio queue)不遵循FIFO,而是根据元素的优先级进行出队,优先级最高的先出队。 「本文的所有内容都是基于这两个数据结构」,TencentOS-tiny中环形队列和优先级队列的实现和使用示例请阅读文章: 数据结构 | TencentOS-tiny中队列、环形队列、优先级队列的实现及使用 2. 消息队列 2.3. 消息队列的使用示例 #define MESSAGE_MAX     10 uint8_t msg_pool[MESSAGE_MAX * sizeof(void *)]; k_msg_q_t msg_q; void entry_task_receiver(void *arg) { k_err_t err; void *msg_received; while (K_TRUE) {         err = tos_msg_q_pend(&msg_q, &msg_received, TOS_TIME_FOREVER); if (err == K_ERR_NONE) { printf("receiver: msg incoming[%s]\n", (char *)msg_received);         }     } } void entry_task_sender(void *arg) { char *msg_prio_0 = "msg 0 without priority"; char *msg_prio_1 = "msg 1 without priority"; char *msg_prio_2 = "msg 2 without priority"; printf("sender: post a message 2 without priority\n");     tos_msg_q_post(&msg_q, msg_prio_2); printf("sender: post a message 1 without priority\n");     tos_msg_q_post(&msg_q, msg_prio_1); printf("sender: post a message 0 without priority\n");     tos_msg_q_post(&msg_q, msg_prio_0); } 执行结果如下: TencentOS-tiny Port on STM32L431RCT6 By Mculover666 sender: post a message 2 without priority sender: post a message 1 without priority sender: post a message 0 without priority receiver: msg incoming[msg 2 without priority] receiver: msg incoming[msg 1 without priority] receiver: msg incoming[msg 0 without priority] 3. 优先级消息队列 4.1. 不同之处 消息队列和邮箱队列的不同之处,在于底层队列每个元素类型不一样,看一眼源码便知。 消息队列传递的消息是地址,所以在初始化消息队列的时候,环形队列中每个元素都是空指针类型: __API__ k_err_t tos_msg_q_create(k_msg_q_t *msg_q, void *pool, size_t msg_cnt) { //部分源码省略 //重点:队列中每个元素类型大小是sizeof(void*) err = tos_ring_q_create(&msg_q->ring_q, pool, msg_cnt, sizeof(void *)); if (err != K_ERR_NONE) { return err;     } return K_ERR_NONE; } 而邮箱队列传递的是值,所以在初始化底层用到的环形队列时,每个元素的大小是由用户指定的: __API__ k_err_t tos_mail_q_create(k_mail_q_t *mail_q, void *pool, size_t mail_cnt, size_t mail_size) { //省略了部分源码 //重点:每个元素的大小是mail_size,由用户传入参数指定 err = tos_ring_q_create(&mail_q->ring_q, pool, mail_cnt, mail_size); if (err != K_ERR_NONE) { return err;     } return K_ERR_NONE; }

    strongerHuang 通信 全局变量 RTOS

  • 中国五大移动应用商店携手启动64位安卓生态迁移

    中国五大移动应用商店携手启动64位安卓生态迁移

    为协助中国安卓开发者无缝对接全球64位开发环境,并进一步向终端用户提供最佳体验,中国五大移动应用商店(排名不计先后)——小米应用商店、OPPO软件商店、vivo应用商店、腾讯应用宝、百度手机助手,于2021年4月19日共同宣布,今后发布于各应用商店的所有应用必须有序支持64位Arm架构,今年底前全体应用及游戏均需按计划上传含有64位构建的APK(涵盖存量应用更新及新版本发布),以便中国市场上所有的移动安卓应用程序能在2022年8月底前为64位架构的全面普及做好准备,从而紧随全球移动科技领域的发展趋势,更好更快地为中国数亿手机用户提供沉浸式的使用体验。此前,Arm于2020年10月首次揭晓,所有Arm® Cortex®-A CPU大核自2022年起将仅支持64位代码的执行,如今更进一步宣布,从2023年起,所有的Cortex-A系列移动CPU内核(大核与小核)都将只支持64位。这些顶级移动应用商店在此承诺,针对开发者提交64位应用所必须的所有前期准备工作业已就绪,即将把安卓生态系统推向64位的新纪元,从而为两年后纯64位设备的面世铺平道路。今天的当务之急,首先是开发者必须在这些移动应用中及时添加64位支持。 自2014年6月首款支持64位的移动设备面世以来,32位的手机数量一直处于下降态势之中。从国内的数据来看,目前仅支持32位应用的手机占比已远小于百分之一。随着安卓移动应用的开发重心转向64位,生态系统上下游将可以专注于支持过去基于32位架构所无法提供的新功能和新技术。 移动生态系统向64位的迁移意味着一流的安全性和多达20%的性能提升,从而为终端用户提供更快的应用加载速度、更高的帧率和更复杂的沉浸式体验,这点对于高品质移动游戏助益甚多。 小米应用商店:“在未来的64位CPU的智能手机上,只有应用程序是针对64位的设备构建的,才能够提供超出我们预期的更快、更丰富的用户体验。” OPPO软件商店:“应用开发者不能错过在纯64位安卓设备出现之前检查、更新和构建项目的机会。越早进行转换,收益越大。” vivo应用商店:“支持64位设备是安卓应用程序利用超过4GB RAM地址空间、在数据处理中利用更宽寄存器和更高精度,以及获取强化安全特性的唯一途径。” 腾讯应用宝:“变化是不可避免的,也是令人兴奋的——尤其是当我们谈论到64位安卓生态系统的过渡时,为64位架构构建应用,越早越好。” 百度手机助手:“永远不要低估将32位安卓应用移植到64位的价值。毫无疑问,投资于此将是有丰厚回报。我们鼓励您尽快开始着手进行64位迁移。” 腾讯先游云游戏平台:“伴随着64位生态系统迁移的推进,一个划时代的拐点就在眼前,我们构建于Arm架构之上的服务将彻底打破平台的藩篱,从根本上改变人们相互联系与享受高品质移动游戏的方式。” 在产业链上游,Arm也携手诸多引领业界的芯片厂商,在移动应用商店转向仅支持64位应用开发的过程中提供支持,并针对预计在2023年到来的纯64位设备的市场场景,做出专注为纯64位设备提供服务的承诺,同时通过开发者文档、最佳代码实践等资源提供,以帮助生态系统完成过渡。 Arm终端事业部副总裁兼总经理Paul Williamson表示:“我们认为,迁移到64位是安卓生态系统保持竞争力和未来增长的重要行动。现有应用和未来应用都将受益于64位架构带来的性能和计算能力提升。我们将继续支持中国移动应用开发者,确保其应用平稳过渡到64位。” 64位要求的额外迁移工作仅适用于使用原生代码或库的应用。使用Java或Kotlin编程语言编写的应用以及任何库或SDK已经针对64位设备准备就绪。对于大多数开发者而言,面向64位的过渡并不复杂,仅需专注于64位兼容应用还可以节省成本并加快产品上市速度。 安谋中国市场及生态副总裁梁泉表示:“为帮助中国开发者深入了解64位架构的优势,顺利完成升级过渡,安谋中国亦积极进行产业推广,包括通过极术社区等渠道发布多种技术文章与可供下载的白皮书,系统、深入的展示了64位架构的性能和安全优势,以及应用升级的方法等关键信息。”

    Arm 应用商店 安卓生态 Arm架构

  • 没有芯片的诸多原因

    编排 | strongerHuang 来源 | 硬件十万个为什么 芯片短缺问题从去年逐渐就开始出现了,包括台积电这种晶圆大厂也出现了一些“缺芯问题” 嵌入式专栏 1 导致没有芯片的诸多原因 1、天灾 今年2月,美国德州遭遇超级寒流袭击,导致严重能源供应短缺与电力中断,包括Samsung、NXP与Infineon三家半导体业者位于奥斯汀的晶圆厂因此停摆。还有瑞萨失火!!! 2、人祸 全球半导体严重短缺的开端是美国政府对中国企业的制裁,尤其是对中芯国际的制裁。 中芯国际拥有成熟的28nm芯片生产线,原本可极大地弥补产能,然而受美国制裁影响,目前其14nm生产线产能仅仅达到1.5万片/月。 报道指出,订单集中涌向台湾企业等,再加上全球汽车半导体等各行业的需求快速复苏,供应短缺迹象加强。 同样的观点,也出现在近期法国广播公司的一篇报道中,他们指出特朗普对中国发起的“科技战”是当下芯片短缺问题的间接推手。 3、囤货 晶圆厂和封测厂属于超级大的资金密集型的行业,需要维持生产线24小时运转以最大化营利,产能的增加将是几十亿为单位的量级。 “一方面扩大产能需要时间,另一方面,芯片原厂相比去年产能已经大幅提升,但依然无法满足日益增长的市场需求。” 芯片短缺和涨价带来的不确定性导致市场恐慌性囤货,各环节订单激增。台积电高管在最近两次财报电话会议上表示,客户为了应对不确定性的风险开始囤积芯片。 晶圆代工厂产能在手机、笔记本、服务器等需求已经满载,安防芯片难以插队。 而另一关键环节封测也呈现相同的趋势,据工商时报报道称,受上游晶圆代工产能持续爆满的影响,今年上半年半导体封测产能仍严重吃紧。 订单的持续涌入,诸如日月光这类大厂的投控产能已经排满到今年下半年,其他公司如华泰、菱生、超丰的打线封装订单同样爆满。 晶圆代工紧缺之下,2021年全球各大晶圆代工厂、IDM大厂、IC设计厂均纷纷宣布于年初涨价。晶圆代工价格涨价10%至20%,封装测试涨价10%至20%。高级芯片的需求全面增加,尖端晶圆厂和封测厂等会优先考虑高端产品。 嵌入式专栏 2 缺芯对汽车行业的影响 虽然在去年12月初大众中国被曝出“因芯片短缺导致停产”时予以了否认,但从目前情况来看,芯片短缺的问题远没有解决。近日,因为芯片短缺而不得不减产的汽车厂商正在持续增加,几乎冲击了全行业。由此可见,半导体芯片短缺对全球汽车市场的影响并不小。 今年三月份,大众汽车发布公告称1-2月因缺少芯片已减产10万余辆。本田汽车也宣布,墨西哥工厂将于3月18日起全部停产;通用汽车宣布暂时关闭其位于密歇根州兰辛的工厂,该工厂生产雪佛兰科迈罗以及凯迪拉克 CT4 和 CT5,预计今年 4 月份之前不会重新开工。3月26日,蔚来汽车宣布,因芯片短缺,决定从3月29日起将合肥江淮汽车工厂的生产暂停5天。至此,蔚来成为国内首家因受芯片产量波动影响而减产甚至停产的新势力车企。 日本汽车制造商铃木汽车首次因为芯片供应问题而宣布停产。铃木汽车宣布,由于芯片短缺,其位于静冈县的两座工厂将暂停生产。本次停产的分别为Sagara工厂,以及Kosai工厂内三条生产线中的一条。铃木汽车表示,暂时没有削减产量的计划,公司将在假日期间维持工厂的运营,以弥补产量损失。 另外,韩国现代汽车也计划使其牙山第三工厂从4月7日至4月9日停产三天时间,并在4月12日至4月15日仅运营一半生产线。值得注意的是,蔚山第三工厂可能也将在4月10日暂停生产,该厂生产Avante轿车。 现在的行情: 今天同事跟我说:年前几块钱的STM32,现在报价是一百多!!!! 国产替代还有诸多问题需要解决,而且也没有库存! 前两天客户问我,量大是不是可以优惠?答复是:“不涨价就是兄弟价!” 没有芯片供应,你怎么办? 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang 晶圆 芯片短缺 芯片

  • 进了国企以为上岸了!干了1年,我再次回到互联网内卷!

    01 前言 2017年初,我通过一整天的笔试及面试加入一家(某一线城市国资委全资控股)某集团的研究机构(中央研究院),任职高级软件工程师;在这边工作了整整一年,目前已经跳槽到一家互联网公司,在回头看看这一整年,感受颇深,只好一吐为快,以便对想进入国企的程序员帮助及借鉴。 02 入职考试 笔试部分:国企面试与其他企业并没有太大区别,首先是笔试,一般都是前面50道选择题,后面两道是开放性的大题,大题没有固定答案,只要符合社会主义核心价值观就可以拿到满分,选择题是关键,全部都是技术题,需要答对40题以上,才有可能进入下一轮面试。 面试部分:面试分三轮,首轮是程序员面你(你未来的同事),他们会问你一些技术相关问题,例如:选举算法,redis的应用场景,如何处理高并发,如何保证高可用,是否关心Nodejs新发布的版本,deno是什么;诸如此类的问题很多很杂。 第二轮面试是由副院长来面(也就是你未来的直属上司)。他会问你项目相关的问题,例如:做过哪些项目,解决了什么问题,你在项目中的角色,项目是如何管理的,又是如何进展的,使用了哪些技术栈,为什么挑选这样的技术栈,遇到哪些问题,如何解决的这些问题。 第三轮面试是由HR来面,这个面试就很简单了,简单说一下你的情况,聊聊家常,然后他会向你说明组织结构,与一些待遇问题。 PS:进国企最重要的素质是文凭,我们研究院硕士以上学历人数比本科要多,而且大部分毕业于国内一流院校(交大生是整个研究院的主体)。 03 工作压力 工作压力还是蛮大的,产品并不像私企由市场导向,而是政策导向;国家说人工智能热,那我们就去做人工智能的项目,说区块链热,我们就去搞区块链的项目,反正我在研究院一年以来,搞过云计算,人工智能,大数据,区块链。好处就是你能学到很多东西,而且紧跟市场热度。坏处就是什么都会,但是什么都不精。 吐槽:为了迎合政策做一些不具市场价值的产品(这里面不存在腐败,现在国企很难贪腐,30万RMB以上的项目就要求公共招标)。 举个两个例子,我们也开发OCR AI图片识别系统,在市场上已经有很完善的产品,而且很廉价,我们依然花钱去开发这种产品,市场价值基本没有,因为直到目前为止,我们产品的识别率依然不如市场上的几个主流产品(阿里,百度)。 第二个例子,便是私有云,这个我们做得真的还不错,但是市面上最强的是华为,他们是卖服务器送私有云,也就是传统的卖硬件送软件,与他们相比,我们的产品就不具竞争力了。 04 工作强度 工作强度真的还好,一般都不需要加班,至少我是不加班的。 这就意味着可以放羊了吗?当然不是,我加入的项目组,大多都是以2个星期为周期进行开发的,每两个星期要举行一次组内讨论会,如果完不成任务或者bug太多是需要加班处理的,因为国企是不可以出错的,一次出错可能直接招致点名批评(包括这个项目的所有相关人员),一次kpi黑记录,会直接影响你以后的升迁前途。 组内都是协同工作,可能因为你的原因导致项目没法按时上线,发生一两次你就会被边缘化,最终要么离职,要么下放到子公司。就算是副院长级别,如果完成不了集团的KPI,也是会被下放的。 但是相比互联网公司,国企的压力相对小一些,互联网公司实行的是不能胜任就走人的策略,所以每个人几乎都没有什么安全感,只有拼命的工作来争取自己有安全感。国企,特别是大国企,公司的人事权一般都在公司总部手里。 05 工作环境 国企办公环境一般都是比较好的,我们有自己的园区,自己的办公楼,空间很大,硬件配置都是很不错的,有健身器材,有空气净化器,有自己的食堂,有自动售货机。 有自己的产品展厅,有自己的公司纪念馆。 06 晋升空间 这部分只剩下吐槽了,一个萝卜一个坑,萝卜不走,也不会让出这个坑。在国企表现是没有意义的,除了口头表扬,你获得不了任何实际好处。 好的人脉要比努力重要,如果上面没人认识你,就算你的领导大力推荐你,你也不会得到提拔,空降长官在国企是一件司空见惯的事。 PS:组织人员要比群众晋升快(群众进不了总部)。 07 福利待遇 如果说国企15年前的待遇是一流的,那么如今的国企待遇最多只能算是二流的,特别是对于IT行业来说。以我所在公司为例,待遇采用工资+福利(洗漱产品,电影票,接近1500RMB的补助等)的方式,工资增长比较慢,相对于互联网公司来说,待遇至少是被腰斩的,鄙人也是迫于生活压力,为了生计而离开国企,跳槽去了互联网公司。 吐槽 :国企没有奖金,国企没有奖金,国企没有奖金,重要的事情说三遍。 08 工作稳定性 国企的稳定性应该是最被人人称道的,特别是中字头企业。一方面是国企的社会责任感几乎不太可能会裁员;另一方面公司的人事权几乎都是在公司总部手中,下面的分部门是没有权利做出裁员决定的。以研发为例,如果有人不能胜任工作或者和其他人工作合不来,部门领导会想总部申请调岗,调到行政人力或其他部门,不会出现领导向总部申请把你开除的事,所以国企给了员工很大的安全感。 互联网公司则不同,裁员是家常便饭,领导一高兴或一生气甚至一拍脑袋就裁员,经常一年就会裁员几次,员工几乎是没有安全感的。互联网公司很多都是靠融资生存,一旦融资间隔比较大或融不到资就会裁员,生存的压力巨大,让它们没有能力或者没有职业道德感或无耻去考虑员工的感受。 国企则不同,国企的业务本来波动就很少,国企营收相对稳定,再说也不差钱,没有生存的压力。 09 技术栈 实际大部分国企使用的技术一般都是商用的,比如Oracle,SQL server等,极少使用网上的开源框架。 一方面是因为商业软件系统稳定,有大公司做技术支持;另一方便开源软件稳定性有待加强,到了线上因为开源框架的bug导致的系统故障可以说是得不偿失,毕竟对于国企来说不差这些钱。 但是我们不同,我们毕竟是研究院,以研发为主,所以更多地使用开源技术。 PS:国企软件开发版本迭代比较慢,系统测试时间比较长,毕竟对于国企来说,不怕慢,就怕系统出现问题,系统出了问题比系统开发不出来更严重。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式ARM 互联网 软件工程师 国企

  • IGBT原来是这么玩的!

    1 多子与少子器件 传统的功率器件根据主要导电载流子一般分为多子和少子器件,少子器件主要包括二极管,BJT,晶闸管,GTO等,这些器件导通的时候电流至少经过一个PN节,并且电子和空穴同时导电,其都是进入对应的PN区的少数载流子,最终形成电流。 多子器件主要有MOSFET,肖特基二极管等,这些器件都是半导体中的多数载流子导电,且一般只有一种载流子导电。 两者的区别如下 : 1)多子器件主要靠多数载流子导电,而少子器件主要是靠电子和空穴同时导电。 2)多子器件相对少子器件开关速度要快,因为少子器件的PN节存在载流子的积累和清除过程,相当于不仅要对势垒电容充放电还需要跟扩散电容充放电。 3)少子器件其管压降是负温度系数,温度越高其漏电流也越大;而多子导通压降为正温度系数,温度升高使得N型(或者P型)半导体中的粒子运动频率加快,从而阻力加大,压降升高。所以少子器件不利于并联,而多子器件更适合并联,原因如下: 2 绝缘栅双极晶体管 绝缘栅双极晶体管就是我们常说的IGBT,可以说它是MOSFET的高压改进版本,MOSFET在低压情况下性能能表现得非常得优秀,但高压下导通压降太高,损耗也就会太大。 为什么压降太大呢? 上面标注的PN节压降区由于需要承受较大的电压,所以其右侧的N区需要做得较大,且掺杂浓度也更高,压降就越大。因此高压MOSFET通过的电流一般都不能太大。 为了解决MOSFET高压情况下电流不能太大的问题,就有了IGBT。 IGBT仅仅只是在MOSFET的右侧增加了一个P区,刚好右侧PN形成了一个正向PN节,所以一旦出现沟道其可以直接导通。 但是新增的PN节怎么就降低MOSFET压降了呢? 根据电导调制效应,右侧PN节正偏会导致P中大量空穴向N中移动,使得右侧N中的空穴浓度大大提高,导通压降也会降低,电阻降低,这样就获得耐压高,压降低的性能特点。 导通和关闭过程都是由等效MOSFET部分来控制,而等效PNP三极管只是通过电导调制效应来降低电阻率。 但是这样的结构在关断的过程中还是存在PN节的释放扩散区载流子的过程,所以会带来电流的拖尾现象,当然损耗相对MOSFET也会升高。 说到底IGBT是一种MOSFET与BJT的复合器件,都通过牺牲一部分各自的优势来进行互补,从而得到了一种更性能综合的器件。 3 小节 最后MOSFET一般工作频率在50KHz以上,而IGBT一般只能在20KHz以下,所以IGBT的PN节限制了其速度,同时也降低了压降,能够在高压下通过更大的电流。 IGBT也是压控器件,不过1KW一下一般还是选MOSFET,2MW一下首选IGBT,更高的话就选择IGCT和IECT等。

    嵌入式ARM 功率器件 IGBT 少子器件

  • 嵌入式技术面试时的

    编排 | strongerHuang 微信公众号 | 嵌入式专栏 找工作也是一门技能,有的人很快就找到自己喜欢的工作,有的人找了很久也没找到合适的工作。 下面给大家分享几点找工作过程中存在的“潜规则”内容。 嵌入式专栏 1 面试的本质不是考试,而是告诉面试官你会做什么 经验不够的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难倒你的意思,只是想通过提问的方式来知道你会什么。 比如STM32单片机的代码从哪里开始执行? 没入门的说从main函数开始,大佬会从上电启动开始。 围绕着一个话题只要你能在某一方面回答得很深入很透彻,基本上面上的可能性会大大提高; 如果当你听到这个话题时,感觉不知道如何回答,或者说感觉很简单,几句话就说完了,那么基本上你很难面上,因为你的知识储备不够,说不出来关于技术相关的内容。 嵌入式专栏 2 薪水要求高一点录取概率就大一点 我曾经面试一个嵌入式工程师,各种精通C语言,精通stm32等等等,然后我就问他你期望的薪水是多少呢? 他的回答是4K,先不说他简历上写的是真是假,但是有一点很明确,如果你在市场上去肉,别人都是卖30元一斤,而路边有个摆摊的只买10元一斤,那么你们会去买么? 另外,我想告诉大家的是,一般来说对于一家正规的技术型公司,真的不在乎多给工资,最重要的是人才; 或者我们换位思考一下,假设你是项目经理,你来招人帮你干事情,你会节约一点工资,去招技术差的,帮老板节约成本,自己慢慢来带人么,给自己找一大堆事情么? 而且,从心里角度来说,人们一般只会集中精力关注一个点,如果你的期望薪水高一点,那么他在考虑是否录取你时考虑的就是薪水问题,或者就是考虑你的技术问题,但是工资是老板发,技术是自己使用,所以从某方面来说如果有几个人与你技术差不多,但是从潜意识里,就会因为你的期望工资高而觉得你的技术好一点,最后录取你,这就像假设我们要求买一件羽绒衣服,同时看上了两件,一件800元,另一件1000元,我相信大多数人都会认为1000元这件质量好点,如果再加上买这件衣服的钱不是你出,那么你会选择那件呢? 最后提醒大家,期望薪水高一点并不是说无边界,那么到底多少合适呢? 可以从两个方面考虑一是工作年限,一般来说 初入行:8K到12K 1年到2年:10K到15K 3年到5年:13K到22K 5年以上:18K以上 当然,不同的地区有点差别,但差别应该不大 另一个方面是参考大公司的工资标准,打开招聘信息,查看大公司的招聘信息,一般来说都是给的一个区间值,你可以把区间值最大的那个值乘80%作为你的期望薪资的参考值。 嵌入式专栏 3 简历上罗列了很多技能的很难面上 这里我就简单说一下为什么,简历上罗列很多技能可以反映如下几个问题: 1.不清楚对应岗位工程师的核心技术是什么,给面试官的第一感觉就是:外行; 2.罗列的技能越多面试官问的方向就越多,你很难每一样都精通,最后会成为问的每一个技能你都只会点皮毛; 3.完全暴露出你没有任何工作经验,我见过有的把熟练使用办公软件、外语等级、计算机二级什么的都写在上面; 那面试技能这里到底应该怎样写呢?从个人经验和及面试反馈来看,个人建议如下: 1.写两个精通或者深入研究的技术点,如:熟练某款MCU,有多个某平台项目实战等; 2.写三个熟练应用,这个最好写常用的框架; 3.写三个了解并能简单使用的技能; 总之技能这一栏要在潜意识里引导面试官去问你你已经准备好的话题; 嵌入式专栏 4 笔试题做不来影响并不大,关键是要体现出你在认真对待 首先大家要明白一点的就是,在你认真对待笔试题的情况下,笔试题做得好与不好、正确与错误其实影响并不大,注意我这里说的是认真对待的情况下。 这一点估计没有多年工作经验或没有带过团队开发的人很难理解,其实大部分面试官招人重点看如下3点: 1.是否聊得来 2.主观能动性 3.逻辑思维注意: 我这里并不是没有任何基础的人具备上述三点就能面试,而是指已经基本会编程的情况下满足上述三点就很容易面试上; 嵌入式专栏 5 对自己要自信,面试官只是比你早到公司几个月而已 首先强调一点,对自己自信,并不是不尊重面试官; 这里主要表达的核心思想是,在整个面试中你要让人感到你和面试官是平等的,面试官在挑选你,你也在挑选公司; 嵌入式专栏 6 不写假简历,但必须扬长避短 其实这就是里我们常常说的如何包装简历,老老实实总是会吃亏的;诚实守信、不写假简历这是最基本的职业道德; 但是,扬长避短,适当的夸张一下自己的能力是很有必要的,这就如同一家公司在对外宣传自己的产品是一个道理; 好了,这一点我也不好在公开场合长篇大论,先具体、实际的了解情况,然后在根据实际情况包装简历; 嵌入式专栏 7 老板是人精,谈理想时,别虚伪,要坦诚 这里一般是面试的最后一个环节,你一定要让人感觉你是一个真诚、实干的技术员,千万不能让人感觉你是一个浮躁、眼高手低的人; 嵌入式专栏 8 不打没有把握的仗,必须充分准备 这是面试是否顺利非常非常重要的一个环节,也是很多浮躁的最容易犯的错误。 它的核心思想其实就是:面试必须系统化的认真的准备!重要的事说3遍。 面试必须系统化的认真的准备! 面试必须系统化的认真的准备! 面试必须系统化的认真的准备! 怎样系统化的认真的准备呢? 以下7个步骤是在我实际经验中总结出来的,提供给大家参考 1.最基本条件,概念上一定要懂的一些知识和技能。 2.系统化的知识点,对知识点系统化的梳理和系统化的看面试题,并且强行将知识点划分为3类,精通、熟练、了解,千万别东看一下西弄一下,最后会让你浮躁的心直接在面试中崩溃掉。 3.写简历,简历中必须在醒目的位置体现出技术点(hr就认几个关键词,决定是否通知你面试),如果投递出去的简历面试邀请率低于60%,肯定是简历写得有问题,最好找专业人士帮你看看简历。 4.模拟面试(三次),提高面试通过率。面试的成本其实挺高的,好不容易收到面试通知,千辛万苦赶车找路来。 到面试的地方,如果犯了常规的低级错误,其实很不划算,早一天找到工作就早一天赚到钱(程序员的工资平均在500左右一天) 5.实战学习面试(5次实战面试),出去面试,但目的不是为了面上,而是为了让你放松心情,不紧张,习惯与面试官进行技术沟通(其实很多人在这个阶段就会拿到offer) 面试完后马上回忆并记录面试中问了那些问题,自己大体是怎么回答的,然后与专业人士讨论这样回答是否恰当,必须保证下次遇到类似问题会回答得更好,否则面试很多次也不会有提高,因为在你回答得不好或者明显错误的地方面试官并不会给你指出来,这就是为什么,很多人出去面试说自己回答得很好,然后就让他等通知,然后。。。就没有然后了 6.正式面试,同样,每面试一次后马上与专业人沟通,最后你会发现每个面试官问的问题都大同小异,你会觉得面试so easy!当你拿到多个offer后,然后从中选一个,那感觉简直就像走上了人生巅峰! 7.通过试用期,虽然都说面试造飞机、工作拧螺丝,但是估计对于刚入行的人来说,还是有很多的技术没有接触或者不懂,这时不懂的一定要多问,业务上的多问同事,技术上的要先自己研究一下,如果还是不懂就要多请教专业的人,实在不懂再问同事,总而言之言而总之一定要积极主动! 嵌入式专栏 9 选择大于努力的前提是先足够的努力才会有选择 很多人都在倡导选择大于努力,可更重要的往往更容易被忽略,那就是:只有足够的努力才会有选择。 这就形成了一个死循环,或者用我们程序员术语叫做:死锁,选择一家好的公司上班,对自己的发展前景很重要,但前提是你能拿到好公司的offer! 嵌入式专栏 10 人生苦短,绝不将就,必须去自己真心想去的公司 我遇到过很多人,在跟他们聊天时,他们都有类似的心理:一点都不想在这里上班,但是工作又不好找,只好暂时做着,这一做就是好几年;每天带着一种不愿意的心情上班,是何种的煎熬,而且我相信也很难作出卓越的成绩,最多勉强把工作完成,这样做下去意义又何在!

    strongerHuang 嵌入式 面试

  • 二极管的反向恢复时间

    PN结二极管经常用来制作电开关。在正偏状态,即开态,很小的外加电压就能产生较大的电流;在反偏状态,即关态,只有很小的电流存在于PN结内。 我们感兴趣的开关电路参数就是电路的开关速度。下面的内容会定性地讨论二极管的开关瞬态以及电荷的存储效应。在不经任何数学推导的情况下,简单给出描述开关时间的表达式。 二极管的作用 利用二极管正、反向电流相差悬殊这一特性,可以把二极管作开关使用。 当开关K打向A时,二极管处于正向,电流很大,相当于接有负载的外回路与电源相连的开关闭合,回路处于接通状态(开态); 当开关K打向B时,二极管处于反向,反向电流很小,相当于外回路的开关断开,回路处于断开状态(关态)。 V1为外加电源电压,VJ为二极管的正向压降,对硅管VJ约为0.7V,锗管VJ约为0.25V,RL为负载电阻。 在开态时,流过负载的稳态电流为I1: 通常VJ远小于V1,所以上式可近似写为: 在关态时,流过负载的电流就是二极管的反向电流IR。 假设外加脉冲的波形如图(a)所示,则流过二极管的电流就如图(b)所示。 接通过程中,二极管P区向N区输运大量空穴,N区向P区输运大量电子。随着时间的延长,N区内空穴和P区内电子不断增加,直到稳态时停止。在稳态时,流入N区的空穴正好与N区内复合掉的空穴数目相等,流入P区的电子也正好与P区内复合掉的电子数目相等,达到动态平衡,流过P-N结的电流为一常数I1。 随着势垒区边界上的空穴和电子密度的增加,P-N结上的电压逐步上升,在稳态即为VJ。此时,二极管就工作在导通状态。 当某一时刻在外电路上加的正脉冲跳变为负脉冲时: 正向时积累在各区的大量少子要被反向偏置电压拉回到原来的区域,开始时的瞬间,流过P-N结的反向电流很大,经过一段时间后,原本积累的载流子一部分通过复合,一部分被拉回原来的区域,反向电流才恢复到正常情况下的反向漏电流值IR。 正向导通时少数载流子积累的现象称为电荷储存效应。二极管的反向恢复过程就是由于电荷储存所引起的。反向电流保持不变的这段时间就称为储存时间ts。在ts之后,P-N结上的电流到达反向饱和电流IR,P-N结达到平衡。定义流过P-N结的反向电流由I2下降到0.1 I2时所需的时间为下降时间tf。储存时间和下降时间之和为(ts+tf)称为P-N结的关断时间(即为反向恢复时间)。 反向恢复时间限制了二极管的开关速度: 如果脉冲持续时间比二极管反向恢复时间长得多,这时负脉冲能使二极管彻底关断,起到良好的开关作用; 如果脉冲持续时间和二极管的反向恢复时间差不多甚至更短的话,这时由于反向恢复过程的影响,负脉冲不能使二极管关断。 所以要保持良好的开关作用,脉冲持续时间不能太短,也就意味着脉冲的重复频率不能太高,这就限制了开关的速度。

    嵌入式ARM 二极管 反向恢复时间

  • 嵌入式相关开源项目、库、资料------持续更新中

    1、OS RT-Thread:一款小而美的物联网操作系统。 freertos:一个轻量级的操作系统。 mbed-os :ARM自己打造、主打IoT的一整套软件解决方案 。 LuatOS :LuatOS是运行在嵌入式硬件的实时操作系统,只需要少量内存的flash空间就能运行,用户编写lua代码就可完成各种功能。 DJYOS:都江堰操作系统。 lmosem :一个完全从第一行引导代码开始编写,基于ARM平台,支持多进程、多CPU、内存管理、文件与设备管理的全32位操作系统内核。 更多资源敬请期待...... cJSON:一个基于C语言的轻量级的JSON解析库。 MultiTimer :一个软件定时器扩展模块。 SmartTimer :一个轻量级的基于STM32的定时器调度器 。 EasyLogger:一款超轻量级、高性能的 C/C++ 日志库。 SFUD:一款开源的串行 SPI Flash 通用驱动库。 PLOOC:受保护的低开销面向对象编程。 mqttclient:一个省资源、高稳定的MQTT客户端。 letter-shell:一个功能强大的嵌入式shell。 lwrb:一个轻量级通用环缓冲区管理器库。 Unity:一个轻量级的、适合嵌入式的测试框架。 CuTest :一款微小的C语言单元测试框, 全部代码加起来不到一千行。 googletest:谷歌C++测试框架。 libu:一个C语言写的多平台工具库。 SQLite :一个开源的嵌入式关系数据库。 Linux Lab :Linux 内核实验室,基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境。 nr_micro_shell :shell for MCU,单片机命令行交互。 mbedtls :一个开源、便携,易于使用,可读的和灵活的SSL库。 inih:C 语言编写的 INI 文件解析器。 MS-RTOS:Micro Safe RTOS 。 eepromfs:基于EEPROM的简易类文件的数据读写库 。 mult_timer :一个Linux下的超级精简的多重定时器 。 更多资源敬请期待...... GuiLite:大道至简 - 5千行/仅头文件/全平台GUI库 。 ToughGFX:一个C++编写的GUI软件框架 。 littlevGL :一个免费的开源图形库。 MonoGUI :一个黑白图形用户接口系统 。 QT:跨平台的应用程序和用户界面框架。 AWTK:是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架 。 4、物联网、智能家居 Domoticz :一个开源的智能家居系统 。 RT-Thread IoT SDK :基于RT-Thread IOT开发板的各类例程。 更多资源敬请期待...... qt_2019_ncov:基于Qt/C++实现的新冠肺炎疫情监控平台。 DAPLink/CMSIS DAP:一个调试器, 集成下载、调试和USB虚拟串口。 DoST:Linux 下开发 STM32 。 MiniQ :一个迷你四轴飞行器。 Avem:一个轻量级无人机飞控。 串口ISP程序:一个stm32串口ISP程序。 DSView:一个跨平台的逻辑分析仪。 Arduino :开源电子原型平台。 更多资源敬请期待...... 100ask download:百文网资料下载中心。 fire download:野火资料下载中心。 野火:野火电子论坛。 ST:ST中文社区。 Linux:Linux内核官网。 Buildroot:buildroot源码。 Ubuntu:Ubuntu官网。 清华镜像站:清华大学开源软件镜像站。 u-boot:u-boot源码下载页面。 宅学部落:一个Linux、编程语言、内核、驱动开发学习网站。 GNU:GNU官网。 PyQt5:PyQt5教程。 git手册:git学习手册。 电子世家:一个电子类导航网站。 芯路恒电子:小梅哥博客、FPGA论坛。 micropython:micropython中文网。 电堂科技:STM32相关。 KST-51 :《手把手教你学51单片机》 。 digoboy:地瓜派视频网。 open-c-book :《C语言编程透视》。 open-shell-book:《Shell 编程范例》 。 kerneltravel:Linux内核之旅。 bookstack:书栈网。 MobaXterm:一个好用的终端软件。 更多资源敬请期待...... 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式云IOT技术圈 嵌入式 开源项目

  • 嵌入式开发中为什么很少用设计模式?

    作者 | 李肖遥 来源 | 技术让梦想更伟大 刚开始工作的两年,我做项目写代码不会考虑代码扩展、移植、模块化等,导致项目有新增功能、或修改的时候不知如何下手。今天分享一篇肖遥整理的关于设计模式的文章,希望对大家有帮助。 工作有些年了,每每看到一些朋友会问,设计模式需要学吗?好像做嵌入式的从没遇到过需要用设计模式的,所以一直没系统学习,但是我也知道这个很重要,久而久之,到头来还是没学。 这里我说一下自己的看法和思考,来看看一些问题。 嵌入式专栏 1 什么是设计模式? 设计模式是代表了开发人员不断积累的最佳的实践,是软件开发人员在软件开发过程中面临的一般问题的最优解决方案。 也就是说,经过了不断的发展,不同的问题或者方案有对应的一套法子,而这个法子被总结成了这么几十种通用模式,我们如果遇到了就对应着去套用就可以了。 当然那几大开发原则和二十几种设计模式大家还是随便去找都可以找到说明的,笔者就不多说了(我也只用到了其中几种),大家自行学习为好。 嵌入式专栏 2 开发中为什么很少用设计模式? 在平时项目开发中,我们很少使用设计模式,我感觉这个现象还是很正常的,不是说工作中没用到设计模式,而是大多数情况下我们项目中没想那么多,更多的是做一些需求更改,而忽略本质。 设计模式的目的是提供可拓展性和可维护性, 但是我们开发的项目本身,大部分都是固定写死的,逻辑单一,我们开发的模块也并不在其他的位置或项目中复用,目的很明确就是做当前的业务。 平时开发中用到设计模式的地方很少,但是框架就不同的了,框架必须适应不同的项目,具备高弹性和拓展性。他们要能适应各种不同的环境,所以,设计模式在框架设计中处处可见。 假如一开始在大公司或者接手一个接近成熟的项目时,那大概率会负责一些小模块或者细分领域的开发;而在小公司或者是几乎从零开始做项目的时候,可能我们本身还不够去设计一个符合项目长期规划的架构,最终导致写的代码比较乱,维护性差。 所以在嵌入式开发中,当我们有了一定的基础和项目经验的时候,我们就会想着,嗯,一个好的架构多么重要啊,或者我需要去好好学一下设计模式了。 嵌入式专栏 3 嵌入式开发一定要学设计模式吗 ? 可以这么说,设计模式为拓展而生。 平时项目中的业务逻辑代码,大部分功能是死的,是专为这个场景而生的,不会在另外的场景中出现,这种业务的开发,是不需要设计模式的。 但是如果需求有变化,我们一般可能就直接修改源代码了,这样实际上带来了一定的修改成本,而为了一个项目中可能不明确的未来变化,而精心设计扩展性很高的架构,成本也是显而易见的,所以,这是一个取舍。 当然,从长期来看,一个好的设计是值得的,毕竟与其不断的修改新的需求,还不如一劳永逸,这样开发人员才能从各个方面高效去开发了。 在嵌入式软件开发中,当软件系统到达一定的复杂程度时,设计模式就显得尤为重要。虽然搞嵌入式的常常是基于一些16位/32位/64位单片机开发,而且这些可能受一些硬件方面的限制,但是单片机软件也是可以遵循软件工程的基本原则来进行架构的。 从代码组织的角度比如组件化、分层、去耦等等,或者从设计角度比如基于消息队列、事件驱动等等,都是有因可循的。 所以对于这个问题,嵌入式开发最好是要学设计模式,这里鼓励大家多看看重构、设计模式、面向对象的C等方面的书籍。 嵌入式专栏 4 设计模式该怎么学? 前面说了那么多,设计模式是什么,嵌入式中哪里用到了设计模式,设计模式到底需不需要学等等,好,那你告诉我到底怎么学! 这里我想分一些情况来说,关于这个问题,设计模式怎么学习,得看你的程度、你主要解决什么问题、你负责的部分而定。 若你的编程水平或者学习的程度还没到那(还在学习怎么编程阶段),看了自然是懵逼的,这个时候还是好好补补基础知识,这些还用不到。 若在项目当中,你解决的大部分是一些业务逻辑,这种情况能用的设计模式不多,因为需要的是业务模式,也就是参考设计模式原理,自己设计业务模式改改需求啥的,就没必要了。 若你负责或参与应用框架或与其相关,那帮助就大了,这个时候用什么设计模式,怎么去设计就要考验功底了。 当然,不管怎么说,只要有时间即使是你目前程度还不到,你也可以学习设计模式使自己提升程度,但得一步一步来,稳中进步。 这个学习也不是一次性把所有的都学习了,这样其实也很难掌握,可能只是知其表而已,一般先从某个与你要处理的问题相关或者常会遇到的模式开始学起,一次学一个,学的深一些。 大部分人最常提的是单例、工厂、策略这几个,比如一个功能,要求既要支持串口通信,又要支持TCP通信,而对调用方来说最好不要知道它们的区别,这就是典型的策略模式场景。 这种比较常见的情况,很多项目中都可能遇到,因此不可能不学,网上也有很多经验分享,还有很多教程例子,这个时候也不可能学不会。 嵌入式专栏 5 总结 到此,你觉得设计模式有没有用? 每个人的情况不同,学习过程不一定是这样,做的工作内容肯定也不一样,关键点是只要你在这行,在写代码,那么一般一定用得到其中几个模式,等你学会几个,并且常用,时间久了自然就明白了。

    strongerHuang 嵌入式 设计模式

发布文章