选择关注/置顶/星标公众号,精彩内容即刻送达平时在开发嵌入式程序的时候大多数使用的都是keil软件,一般小的工程使用keil没感觉到有什么问题,但是当工程比较大的时候,比如移植了FreeRTOS系统或者LWIP网络系统时,代码全部编译一次就要花费很长时间,特别是开启了点击函数右键跳转的功能之后,速度更加慢。有时候只是为了查看一下代码,为了能够使用函数跳转功能,就不得不把工程全部编译一遍。 为了提高开发效率,一般查看代码的时候会使用vscode 和 source insight 这类软件,但是vscode占用内存比较大,电脑配置比较低的话,电脑就会比较卡...
选择关注/置顶/星标公众号,精彩内容即刻送达一、前言中断是什么?举个例子来说,当我们正在工作时,突然电话响了,这时你会把手里的工作先停下来,然后去接电话,当接完电话后,电话里的人安排你马上做一件事,这时你需要立刻去做这件事,当把这件事做完后你会继续之前被打断的工作,这个过程为一次中断。在计算机科学中,中断指计算机CPU获知某些事,暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后再继续执行之前的程序。整个过程称为中断处理,简称中断,而引起这一过程的事件称为中断事件。中断是计算机实现并发执行的...
选择关注/置顶/星标公众号,精彩内容即刻送达一、前言本篇介绍STM32芯片的存储结构,ARM公司负责提供设计内核,而其他外设则为芯片商设计并使用,ARM收取其专利费用而不参与其他经济活动,半导体芯片厂商拿到内核授权后,根据产品需求,添加各类组件,生产芯片售卖。图1为STM32的组成示意图,其中Cortex-M3内核、调试系统都是ARM公司设计,内部总线、外设、存储、时钟复位等都由ST公司开发。可以明显看出总线是cpu、内存、外设传递信息的公用通道,芯片上的各个部件通过总线相连接。图1 STM32芯片简要结构图内核通过总线访问各个外设,现在通往外设...
选择关注/置顶/星标公众号,精彩内容即刻送达很多技术干饭人自己非常轻视技术文档的书写,然而又时常抱怨文档不完善、质量差、更新不及时…… 这种在程序猿间普遍存在的矛盾甚至已经演变成了一个段子。| 文档的重要性高质量的文档对于一个组织或团队来说有非常多的益处,比如让代码和API更容易理解、错误更少;让团队成员更专注于目标;也可以让一些手工操作更容易;另外如果有新成员加入的话有文档也会让他们更快融入……写文档有比较严重的收益滞后性,不像测试,你跑一个测试case,它能立即告诉你是对还是错,它的价值马上就体现出来了。而写一...
选择关注/置顶/星标公众号,精彩内容即刻送达一、前言本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。后续将从以下图1中所示的几个方面对GPIO应用设计中的步骤展开介绍。本篇先介绍GPIO的基本API函数定义,配置初始化的流程,以及使用技巧;针对将GPIO的引脚用于外部中断的功能将作为单独的一篇进行详细的讨论介绍。图1 GPIO...
选择关注/置顶/星标公众号,精彩内容即刻送达一、前言在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍。GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析;GPIO工作模式中主要介绍GPIO应用在不同的使用场景下,GPIO端口的静态特征配置和动态的工作模式,同时对信号的工作流进行了分析。这一篇主要对GPIO模块使用到的寄存器进行详细的分析介绍,适当了解GPIO寄存器的相关知识,可以对GPIO最底层的一些配置和工作原理有更好的认识,有助于加深对GPIO基本结构及工作模式的理解,同时对后续介绍到的GPIO在应...
选择关注/置顶/星标公众号,精彩内容即刻送达一、前言万物皆有源头,大家学习单片机的源头操作就是通过GPIO口点灯,GPIO作为STM32最基础的外设,也是大家最先接触的外设。当然,看似基础的GPIO,不仅仅是简单的设置好IO口,让灯亮起就一了百了,了解清楚GPIO的使用特性,根本原理、运行机制对我们在涉及到GPIO的相关设计操作上会应用的更加自如。GPIO就是通用输入/输出接口(General-Purpose IO ports),可以配置成输出模式来控制外部设备,也可以配置成输入模式来读取外部信号,是 STM32的一种外设,连接芯片外部的引脚,其引脚可以供使用者自由的...
选择关注/置顶/星标公众号,精彩内容即刻送达该专栏是为Linux内核开发编程做铺垫,如果你对操作系统很熟悉,想了解一些Linux内核开发的知识,请直接跳转至《Linux内核编程专栏》,如果你对Linux内核编程也很熟悉,想了解Linux内核的各个模块,可移步至《Linux内核分析专栏》,带你领略Linux内核的绝美风光。操作系统导学会对一些基本的概念进行讲解,但并不是单纯的讲解概念,而是通过操作系统发展历史的脉络,解释一些概念。操作系统不断改进,针对计算机硬件发展,用户需求的变化,而提出的一些高效的设计。永远记住,操作系统是管理硬件的艺术,...
选择关注/置顶/星标公众号,精彩内容即刻送达一般来说,WIFI模块使用中支持三种无线网络工作模式。1、AP模式AP是Access Point的缩写,即无线接入点,它是一个无线网络的中心节点,可以看成是一个服务器。它作为一个网络的中心节点,提供无线接入服务,其他的无线设备允许接入该节点,所有接入该节点设备的无线信号数据都要通过它才能进行交换和互相访问。一般的无线路由器、网关、热点就是工作在AP模式下,AP节点和AP节点之间允许相互连接。 当WIFI模块工作在AP模式时,就可以用手机或者其他通讯设备连接上WIFI模块直接与模块通信,通过WIFI模...
选择关注/置顶/星标公众号,精彩内容即刻送达伴随着物联网概念的出现,直到今天,在提及物联网产业相关发展问题时,碎片化仍是一个绕不开的话题。很多人也都认可,是碎片化的问题阻碍了物联网的快速发展,导致企业无法大规模复制某个物联网项目。01.“物超人”时代 市场研究机构IoT Analytics发布最新物联网跟踪报告显示,过去10年全球所有设备连接数年复合增长率达到10%,这一增速主要由物联网设备贡献。 在2022年9月,工业和信息化部发布通信业运行情况显示,中国三家基础电信企业发展蜂窝物联网终端用户16.98亿户,物联网...
选择关注/置顶/星标公众号,精彩内容即刻送达一、什么是地弹 1 地弹的概念 地弹、振铃、串扰、信号反射······这几个在信号完整性分析中是分析的重点对象。初学者一看:好高深! 其实,感觉高深是因为你满天听到“地弹”二字,却到处找不到“地弹的真正原理”。 如果你认真读笔者的“噪声的起源”章节,其实你已经认识了地弹! 地弹,就是地噪声! 2 为何叫地弹 既然是地噪声,为啥叫“地弹”?为什么既然是一样的东西,却换了个名称,害的我苦苦思索不得其解。低频时,地噪声主要是因为构成地线的导体有“电阻”,电路系统的电流都要流...
选择关注/置顶/星标公众号,精彩内容即刻送达摘要:本文主要目的是在拿到一个蓝牙模块后,将其作为从机来对一些基本的软件功能进行测试,用以快速验证是否满足基本的使用需求和功能指标。针对测试的方法和测试的项目进行总结,作为对蓝牙模块从设备模式下的功能的一个初步评估。一、测试目的1、快速验证蓝牙模块从机模式下的基本功能。2、初步评估蓝牙模块从机模式下通信参数指标是否满足软件功能需求。3、掌握蓝牙调试助手的使用方法。4、熟悉蓝牙模块从机相关测试方法。5、熟悉蓝牙模块相关设置命令和含义。二、测试工具硬件:1、蓝牙模块一个,后...
选择关注/置顶/星标公众号,精彩内容即刻送达我们的板子在出货前,一般都要刷三防漆,它有什么作用呢,不刷行不行?下面简单介绍一下三防漆。1、三防漆简介三防漆是一种特殊配方的涂料,用于保护线路板及其相关设备免受环境的侵蚀。三防漆具有良好的耐高低温性能;其固化后成一层透明保护膜,可在诸如含化学物质(例如:燃料、冷却剂等)、震动、湿气、盐雾、潮湿与高温的情况下保护电路免受损害。在这些条件下线路板可能被腐蚀、霉菌生长和产生短路等,使用过三防漆的PCB线路板具有防水、防潮、防尘“三防”性能和耐冷热冲击、耐老化、耐辐射、耐盐...
选择关注/置顶/星标公众号,精彩内容即刻送达一、函数结构定义在理解拷贝构造函数前,还是有必要回顾下类的构造函数基本概念。类的构造函数是一种特殊的成员函数,它在创建类的对象时执行。构造函数的函数名和类名一致,它不会返回任何类型,同样返回类型也不是void,一般构造函数用来初始化类的成员变量。class Object{ public: Object(); // 构造函数 private: Object obj;};//构造函数结构定义Object::Object(void){ obj = 0; cout << "Object is init" << endl;}拷贝构造函数,又叫做复制构造函数,从字面上看...
选择关注/置顶/星标公众号,精彩内容即刻送达摘要:本文主要归纳总结蓝牙模块的不同工作模式,通过蓝牙模块不同的工作模式了解其扮演不同角色时工作的一个基本原理,为更深入的研究蓝牙模块底层的工作机制和技术方案进行铺垫。1、主设备工作模式主设备是能够搜索别人并主动建立连接的一方,从扫描状态转化而来的。其可以和一个或多个从设备进行连接通信,它会定期的扫描周围的广播状态设备发送的广播信息,可以对周围设备进行搜索并选择所需要连接的从设备进行配对连接,建立通信链路成功后,主从双方就可以发送接收数据。例如智能手机,数据传输中...
选择关注/置顶/星标公众号,精彩内容即刻送达ISM(工业、科学、医疗)频段为国际电信联盟(ITU)《无线电规则》定义的指定无线电频段。这些频段是为电信之外的其他射频用途挪出的频段。因此, ISM频段虽然理论上可用于电信用途,但使用ISM频段的电信设备必须能够承受来自其他射频及微波技术的干扰,如来自微波炉、射频加热及其他可能生成电磁干扰(EMI)的设备的干扰。虽然国际电信联盟已确定了指定频段,但各个国家所规定的ISM频段并不统一。ISM频段的最初目的并非用于通信,但是现在很多短距离、低功耗、免许可(或免许可容错)通信系统均在该频段...
选择关注/置顶/星标公众号,精彩内容即刻送达啸叫是指听到来自PCB板的类似“叽”或“吱”声音的现象。例如,听说有的便携设备用的廉价充电器发出相当大的啸叫音。可能有些设备或环境即使产生了啸叫也未注意到,或者是不在意的现象,但如果在就寝时的安静环境中,应该可以注意到便携设备充电器等的啸叫声。另外,音频设备等听到在播放声音之外的声音就是比较严重的问题了。首先,讲解一下啸叫的机理。高介电常数的陶瓷电容器具有给电介质施加电压时,电介质变形(失真)的特性。这是压电效应的相反现象,被称为“逆压电效应”。此外,有时也将具有这种...
选择关注/置顶/星标公众号,精彩内容即刻送达1、为什么需要可变参数列表我们都知道,在函数的使用原型中,列出函数具体接受的参数,即参数的个数是固定的,如下例子为加法函数:int sum(int a, int b) //a和b相加{ return (a + b);}由上述例子继续引申,当函数有多个参数时:int sum(int a, int b, int c, int d, int e) //多个参数相加{ return (a + b + c + d + e);}可以看出,上述的函数定义较为复杂,尤其是这种参数的性质都一样,如该加法函数的参数类型都是累加因子。虽然函数定义较为复杂,但是参数的个数还是可以确定的...
选择关注/置顶/星标公众号,精彩内容即刻送达一、数字地和模拟地概念数字地:数字信号只有0和1,那么数字地就是0信号,但这个信号通常情况下都不为0,都会多少比0高一点。但如果没有到1的话,它仍然是0。也就是说它的高低电平都是一个范围,正是因为这样,所以数字信号的抗干扰能力强。众所周知,数字信号的上升沿比较陡,含有丰富的高次谐波。这些高次谐波可能在数字电路中没有多大影响,因为通常高频干扰电压都很低,且数字信号的抗干扰能力强。模拟地:模拟地是实实在在的0电位。问题就出在这里,如果把两个地直接接在一起,数字地就会将模拟地拉...
选择关注/置顶/星标公众号,精彩内容即刻送达防御式编程的重点就是需要防御一些程序未曾预料的错误,这是一种提高软件质量的辅助性方法,断言assert就用于防御式编程,编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。使用断言是为了验证预期的结果——当程序执行到断言的位置时,对应的断言应该为真;若断言不为真时,程序会终止执行,并给出错误信息。可以在任何时候启用和禁用断言验证,因此可以在程序调试时启用断言而在程序发布时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。1、原型函数...
选择关注/置顶/星标公众号,精彩内容即刻送达1、低代码概念低代码是无需编码(0 代码)或通过少量代码就可以快速生成应用程序的开发平台。通过简单的拖拉拽操作,而不用编写复杂的代码,实现少写代码或者不写代码,就能快速高效完成业务目标。通过可视化进行应用程序开发的方法,具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程序。2、低代码衍生历程20 世纪 80 年代,第四代编程语言出现。2000 年 VPL 可视化编程语言的诞生,是低代码产品的前驱,都可以通过一些可视化的界面来进行操作...
选择关注/置顶/星标公众号,精彩内容即刻送达1、旁路和去耦旁路电容(Bypass Capacitor)和去耦电容(Decoupling Capacitor)这两个概念在电路中是常见的,但是真正理解起来并不容易。要理解这两个词汇,还得回到英文语境中去。Bypass在英语中有抄小路的意思,在电路中也是这个意思,如下图所示。couple在英语中是一对的意思,引申为配对、耦合的意思。如果系统A中的信号引起了系统B中的信号,那么就说A与B系统出现了耦合现象(Coupling),如下图所示。而Decoupling就是减弱这种耦合的意思。2、电路中的旁路和去耦如下图中,直流电源Power给芯片IC供电,...
选择关注/置顶/星标公众号,精彩内容即刻送达在当下“软件定义”、“数据驱动”的大背景下,国内外传统主机厂已经从特斯拉“硬件预埋、OTA升级、软件收费“模式带来的震撼中改变,纷纷开始大力投入操作系统的开发,尤其是自动驾驶操作系统的开发。本文重点分析国内外自动驾驶相关企业操作系统的发展现状和未来趋势。01.自动驾驶操作系统架构关于自动驾驶操作系统架构,《车载智能计算基础平台参考架构1.0》已经给出了很好的描述,现已经成为行业共识。广义的自动驾驶操作系统包括系统软件(内核、虚拟化、中间件)和功能软件,向下适配异构分布硬件...
选择关注/置顶/星标公众号,精彩内容即刻送达一般来说,单片机的时钟电路是使用外部的无源晶振和负载电容组合实现连接到单片机的Xin和Xout引脚上,无源晶振自身无法振荡,因此需要匹配外部谐振电路才可以输出振动信号。但是在实际电路设计中,也会在晶振两端并联一个电阻。这个电阻叫做反馈电阻。那么并联的这个反馈电阻有什么作用呢?首先来看下时钟电路的基本原理。一般来说,时钟电路又称作皮尔斯振荡器电路,因为它电路简单,工作有效而稳定,优于其它型态的石英晶体振荡电路。皮尔斯振荡器所需零件很少: 一个反相器、一个电阻、一个石英晶体、...
选择关注/置顶/星标公众号,精彩内容即刻送达在 C++ 中为了操作简洁引入了函数模板。所谓的函数模板实际上是建立一个通用函数,其函数类型或形参类型不具体指定,用一个虚拟的类型来表达,这个通用函数就称为函数模板。1、通用的写法函数模板不是一个具体的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。为了容易使用,一般通用的写法都是在头文件中直接定义函数模板,定义的同时也是声明该函数,供给其它文件包含调用。//------fun.h或fun.hpp------//#ifnde...
选择关注/置顶/星标公众号,精彩内容即刻送达dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”……有时,这些长得很像的dBx们可能被弄混,甚至造成计算失误。它们究竟有什么区别呢?这事不得不先从dB说起。而说到dB,最常见的就是3dB啦!3dB在功率图或误码率图中经常出现。其实,没什么神秘的,下降3dB就是指功率下降一半,3 dB点指的就是半功率点。 +3dB表示增大为两倍,-3dB表示下降为1/2。这是怎么来的呢?其实很简单,让我们一起看下dB的计算公式:dB表示功率P1相...
选择关注/置顶/星标公众号,精彩内容即刻送达一、问题的引出最近在一些程序中有时会看到结构体中成员有如下的定义场景://定义场景1struct Str{ int a; ...... int b[];};//定义场景2struct Str{ int a; ...... int b[0];};可以看到在结构体成员中的最后一个成员被定义成了不定长度的数组b[],或者定义成了零长度数组b[0]。查阅资料得知,C99中结构体的最后一个元素允许是未知大小的数组,这就叫作柔性数组,这是一种"不完整类型",即对一个对象来说,缺乏一个完整的长度来进行描述。根据编译器类型,柔性数组可以支持b[]或...
选择关注/置顶/星标公众号,精彩内容即刻送达说到显示面板,大家几乎就会想到LCD和OLED,前者是一项已经相当普及的技术,广泛应用在各种显示设备上。后者则是近几年才逐渐普及的新显示技术,也被称为下一代显示技术。除此之外,还有QLED、MicroLED也被称为下一代显示技术。那么OLED、QLED和MicroLED究竟有什么区别,究竟谁才是下一代的显示技术?会烧屏的OLEDOLED又称有机发光二极管,是指有机半导体材料和发光材料在电场驱动下,通过载流子注入和复合导致发光的现象。原理我们不多说,来说说OLED对比传统的LCD有哪些优势。首先是OLED最大的一个优势...
如何自己设计一个基于openocd调试架构的芯片下载算法,作为一个嵌入式er, 如果做MCU的开发是必须要了解的,因为各个芯片公司都有自己的芯片,而flash驱动各家有不同,所以往往需要自家的工程师去支持,今天就来介绍下基于OpenOCD的flash编程算法的设计方法~~本文以riscv的flash算法为例,来说明flash编程算法在openocd中的实现,代码git路径:https://gitee.com/riscv-mcu/riscv-openocd.gitopenocd 源码中flash编程算法的实现是在src/flash下,openocd把编程算法称作flash dirver, 如下driver.c就是各个芯片的flash driver的汇总。在driver.c中例...
最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上调试器)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。OpenOCD的功能需要调试仿真器来辅助完成,调试仿真器是一个提供调试目标电信号的小型硬件单元。常用的有JLINK、STLink等一些开发板直接集成了调试仿真器.基于openOCD的调试架构如下图所示:PC端可以是GDB编译调试端或者是一个集成的IDE开发环境,它包含了一个OpenOCD...