- 博客(153)
- 资源 (5)
- 收藏
- 关注
原创 单片机实现 printf 打印输出,和电脑端一样用
在学C语言时 printf 很好用,到了单片机时却不能用,那因为 printf 在库中驱动是答应到显示屏的,所用我们把驱动重新定向打印到串口就可以在单片机中用了,这样我们就可以通过串口打印到串口助手软件显示区了! 和电脑端一样用!串口初始化代码部分,以STM32为例,其他单片机也一样,只是修改成对应的单片机寄存器即可,整个逻辑是一样的若只是实现printf打印到串口,串口不用开中断,也不用单独写串口接收发送函数,只要需要配置好串口四要素,再启动串口,并在下面核心代码去修改 串口状态接收标志 和 串口数据
2020-07-08 09:20:41
3141
原创 I2C总线原理与24C02,图文并茂,模拟 I2C代码,经过百万套大货验证
源码1:24C02/04/08/16/32/64/128/256 通用 驱动代码 函数源码2:I2C 源码 (利用开漏输出,SDA不用切换输入输出模式了)源码3:I2C 源码 程序 函数注:源码2 和 3 都是I2C源码,都可以与源码1配合使用...
2020-07-08 08:42:59
516
原创 市电传输 示意图 交流电回路原理
通过电力系统可以理解整个电的网络回路原理, 就可以明白 我们有些设备 为啥要把 地线给去掉(示波器、烙铁),或用变压器隔离。我们零线为啥会带电,会电人。
2020-07-04 13:09:59
2260
原创 return, break, continue, goto 区别 和 作用 含实验代码验证
return:在此位置 直接结束本函数 , 本函数 后面程序不执行。(只能函数中用)break:在此位置 跳出本层循环体 或 跳出switch语句(无论层次多深),转去执行 循环体 或 switch语句外 后面程序continue:在此位置 结束本次循环,即不在执行本次循环后面的程序,转去执行下一轮循环,不跳出循环体。(只能循环体中用)goto:在此位置 无条件转移 到 标号位置 。不主张使用,容易造成程序流程混乱,理解和调试程序困难(好多世界500强企业,在企业编程规范中明确 不准 用)实验代码:
2020-07-04 10:24:23
290
原创 字符串 转 数字 源码 函数 2
`#include <stdio.h>/**@brief 字符串转数字 函数@param [in] *str 字符串指针@return 转换数值@note/double StringToNumber(char str){char* p = str;char maskNegative = 0; //负数标记char mulIntegral = 10; //整数倍数double mulDecimal = 1; //小数倍数double result = 0
2020-07-02 18:49:30
300
原创 单片机(STM32/...)定时器实现精准微秒延时的3种经典方法详解(附完整代码)
本文介绍了基于STM32单片机TIM2定时器的三种微秒级延时实现方案。方案1适用于定时器持续运行且重载值任意的场景,通过累计计数差值实现延时;方案2要求定时器计数满必须是特定值(0xFF/0xFFFF/0xFFFFFFFF),利用无符号数溢出特性简化计算;方案3在需要时启动定时器,延时结束后停止,适合低功耗场景。三种方案均支持递增/递减计数模式,通过宏定义可灵活适配不同MCU和定时器。最后还提供了基于微秒延时的毫秒级延时函数实现。
2025-12-12 20:15:20
173
原创 嵌入式代码分层架构:软件项目文件夹创建工具.bat
本文介绍了一个嵌入式软件项目文件夹创建工具,主要用于自动生成分层架构的代码目录结构。该工具采用分层设计模式,包含应用层(APP)、服务层(SRV)、设备驱动层(DRV)、硬件抽象层(HAL)和通用基础服务层(Common)等标准层级,每个层级都有明确定义的职责和依赖关系。工具运行后会创建完整的项目目录树,包括各层级的子文件夹(如算法服务、协议服务、总线驱动等)以及文档目录。该工具适用于嵌入式系统开发,特别是基于STM32等MCU的项目,能帮助开发者快速建立规范的代码组织结构。
2025-11-26 22:25:27
101
原创 开源分享:嵌入式开发通用基础库 base.h
本文档是嵌入式系统基础定义头文件base.h,提供跨平台开发所需的核心组件。主要内容包括:1)数据类型定义(8/16/32/64位整数、浮点、布尔和状态枚举);2)volatile/const访问限定符宏(__I/__O/__IO);3)位操作、字节处理、数学运算等实用宏;4)寄存器访问、内存操作、数组计算等工具函数;5)编译时断言机制。文档强调平台兼容性注意事项,要求核心组件不得删除修改,并提供详细版本变更记录。适用于无外部依赖的嵌入式开发场景,需注意指针操作、位域处理等特殊情况的正确使用方法。
2025-11-26 22:02:15
79
原创 用 Doxygen 自动生成代码文档手册(软件下载,配置,语法,示例)
Doxygen是一款开源的代码文档生成工具,支持多种编程语言,可从特定格式的源代码注释中提取信息,生成结构化文档(HTML、PDF等)。本文详细介绍了Doxygen的安装配置、核心语法和实际应用,包括: 安装指南:Windows/Linux环境下的安装步骤 配置详解:Project/Build/Input等关键配置项说明 注释语法:函数、类、变量等不同场景的注释规范 表格绘制:Markdown和HTML两种表格实现方式 示例代码:包含首页、C文件和头文件的完整注释模板 文档强调规范注释的重要性,并提供了丰富
2025-11-14 23:40:05
731
原创 中断服务程序(ISR)与主循环共享变量时,访问冲突(数据竞争)如何解决
摘要: 在单片机开发中,共享变量因中断与主循环并发访问易引发数据不一致。解决方案需保证操作的原子性:1) volatile声明避免编译器优化;2) 禁用中断临时保护关键操作;3) 硬件原子指令(如LDREX/STREX)处理多字节变量;4) 标志位分离减少直接共享;5) 校验重试确保数据有效性。核心原则:通过volatile强制内存访问,并采用原子手段(禁用中断/硬件支持/逻辑隔离)保障操作完整性。需根据实时性要求、变量类型选择合适方法,避免隐蔽Bug。
2025-10-27 22:37:04
977
原创 嵌入式开发中为啥常用do{}while(0)进行宏定义
文章摘要: do{}while(0)宏定义方式在嵌入式系统中广泛应用,主要解决五大技术问题:1)避免语法歧义和逻辑错误;2)统一编码风格;3)支持局部变量定义;4)消除空宏警告;5)确保行为一致性。该方式能保持代码块结构完整,支持变量作用域隔离,且被现代编译器优化后不产生额外代码。作为行业标准实践,它被Linux内核、FreeRTOS等主流系统采用,提供了可靠、可维护的宏定义解决方案。
2025-10-24 23:23:41
203
原创 从“凭经验”到“有章法”:单片机裸机系统设计思想彻底厘清(轮询、时间片、前后台.....)
本文系统梳理了单片机裸机开发的架构分类与应用场景。从实现机制(轮询、中断驱动)和设计思想(状态机、事件驱动)两个维度,分析了前后台系统、时间片轮询等主流裸机架构的特点、优缺点及典型应用。通过代码示例展示了不同架构的实现方式,并指出实际开发中常采用混合架构(如前后台+状态机)以适应项目需求。文章强调应根据任务复杂度、实时性要求和硬件资源选择合适架构,为裸机开发提供了系统化的设计思路。
2025-10-19 23:04:34
579
原创 批处理 统计多个文件数量大小
4,将创建的《文件统计.bat》移到要统计的文件夹下,并单击《文件统计.bat》即可。1.新建一个.txt文件,命名为 文件统计。3.保存文件,并修改扩展名为.bat。
2023-03-07 19:04:02
4977
原创 研发与测试分工与联系
需求分析:研发人员和测试人员一起对产品需求进行分析,确定测试范围和测试目标。缺陷管理:测试人员将发现的问题提交给研发人员进行修复,并跟踪问题的解决进度。验证:研发人员修复问题后,测试人员进行验证,确认问题是否已解决。测试执行:测试人员根据测试用例执行测试,发现并记录问题。交付:研发人员和测试人员一起确定产品是否可以交付给客户。编写测试用例:测试人员根据需求分析结果,编写测试用例。研发实现:研发人员根据需求文档和测试用例进行开发。
2023-03-06 15:33:00
447
原创 C++学习笔记04-友元函数与友元类
若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。2.友元函数不能直接访问类的成员,只能访问对象成员,因此在写友元函数之前,先确定一个对象。
2022-12-23 11:43:55
704
原创 C++学习笔记03-类的默认成员函数
=若不定义构造函数则是随机值,但对定义类型会初始化构造函数 ==如果定义了一个空类,其实不是空类,任何一个类都会有默认成员函数。自己定义了就用定义,不定义就用默认生成的。==重载构造函数 与 构造函数 合并 ==拷贝构造函数:使用同类对象初始化创建对象。复制重载函数:把一个对象赋值给另一对象。构造函数:完成初始化工作。析构函数:完成清理工作。
2022-11-13 22:44:05
543
原创 C++学习笔记01-入门基础
命名空间使用 namespace 关键字,:: 是作用域。例如:下 v 变量是不同空间内的。return 0;}结果:10020。
2022-11-13 22:43:08
574
原创 C++学习笔记02-面向对象及类的引入
前面说了 类的本质 是结构体。把上面 struct 换成 class 就是类的了。public ://共有的 char Name [ 20 ];//属性 int Age;//属性 void SetStudetInfo(const char * name , int age) //方法 {} };Studet s;s . SetStudetInfo("李三" , 20);return 0;}类的定义//成员函数 //成员变量 };类 :是 属性 和 方法的 结合。
2022-11-13 22:40:21
409
原创 QT下载安装
在Qt5.8.0以后的版本中,Windows平台下的Qt已经没有了独立的64位安装包,它们都以组件的形式被集成在了同一个exe里。显示的是x86(32位),但后续安装64位的编译器,即可编译64位程序。MinGW 是 Minimalist GNU for Windows 的缩写,MinGW是 Windows 平台上使用的 GNU 工具集导入库的集合。② 用于 UWP 编译的模块。⑦ Qt Data Visualization 是三维数据图表模块,用于数据的三维显示,如散点的三维空间分布、三维曲面等。
2022-10-30 21:01:17
4973
原创 嵌入式工程师面试知识总结
a) 一个整型数?b) 一个指向整型数的指针?c) 一个指向指针的的指针,它指向的指针是指向一个整型数?d) 一个有10个整型数的数组?e) 一个有10个指针的数组,该指针是指向一个整型数的?f) 一个指向有10个整型数数组的指针?g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数?h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数?答:a) int a;b) int *a;...
2022-08-14 13:25:50
7409
1
原创 面试准备流程与经验
自我介绍是最好展示自己的一种方式,也是面试官对你了解一个有效方式,在面试成功与否中占据了一定的比重!自我介绍主要考察:判断求职者 归纳总结的能力;判断求职者 结构化表达的能力;分析求职者 思考复盘的能力;找出面试者关心重点。自我介绍核心目的就是 告诉面试官“我是谁,我来自哪里,我是什么样的人,我要去哪里”!在内容中表达出专业力、发展潜力、稳定性问题!就是基本信息。姓名、教育背景等。也就履历。以前公司情况、任职。若是非管理: 做了哪些项目或产品,运用了啥技术和方法,取得哪些成绩和收获了啥。..........
2022-08-05 16:36:12
918
1
原创 工程师能力模型与技能要求
合理的能力架构能让较少能力元素(知识、技能、方法等)发挥出较大的作用,不合理的能力架构会浪费人的能力,让所学无所用。工程师的能力也有一个架构存在,每个的能力架构都不一样,有的人能力架构比较合理,有的人则不那么合理,层与层之间存在一定的关系,上一层必须以下一层为基础,而上一层又反过来影响下一层。能够多个纬度得理解业务,并正确有效的架构设计,并且产品化,能够指导整个行业发展。整个过程是迭代式学习的,可以来回跳跃学习,不懂的再回到下层来补。能够把整个业务有效的和单个模块结合。实现简单的提交,保证数据能进去。...
2022-07-22 15:49:06
1241
转载 Boss直聘怎么写出优秀的简历?
https://www.jianshu.com/p/a110e85372a5https://www.zhihu.com/question/388976296
2022-07-21 20:21:50
2959
原创 个人装修笔记
纯色 > 直木纹 > 橡木纹理哑光 > 亮光柜体18mm背板9mm 注:1、实木板环保最高最贵2、多层板要用ENF级别选择有CMA认证的机构 板材、五金、胶水、电线、离子粉等都决定了质量,一家装修公司要输出稳定的品质必需要有核心供应链 这是产品落地的唯一标准 这是产品落地的核心。如何识别呢?去他实际施工工地看个3-5个,心里就有谱了。 全屋定制十大品牌排行榜-定制家具品牌-全屋定制品牌排行-买购品牌网全屋定制有哪些品牌 全屋定制十大品牌排行榜→买购网品牌榜:2021
2022-06-27 10:27:19
1933
原创 电视机尺寸与观看距离
电视机尺寸是指电视机屏幕对角线的长度,以英寸为单位(1英寸=2.54厘米)。而且目前来看大多数液晶电视的标准屏幕比已经变成了宽的是16:9。根据勾股定理,对角线的长度是√337(根号337)开放得出。屏幕高度与对角线的比值就是9÷√337。 一般在业界看来,实际收看距离是屏幕宽度的2倍左右。3倍时临场感好,若小于这个距离看会比较累,而5倍距离外收看无震撼力。 设电视机最小尺寸为A(英寸),电视机最大尺寸为B(英寸),观看距离为L(厘米)。现在,我们就可以建立起这么一个等式。2.5
2022-06-25 16:29:34
32772
原创 嵌入式工程师面试题集汇总
请自我介绍?为什么不留在xx公司(为啥离职)?你5-10年职业规划是怎样的?你还写代码吗?从工程师到管理再到工程师你是怎样想的或能承受吗把你的以前工作简单介绍一下?介绍你在xxx公司(或实习单位)负责的内容或职责?前一家公司写过代码?介绍最成功的一个项目?或让你有成就感的项目?介绍最有挑战性的一个项目?讲一下xxx量产项目?介绍xx项目(简历中提到的项目)?分别介绍这几个项目该项目如何分工的?这个项目的需求是什么?你在该项目中做啥?都是你一个人做的?该项目中遇到了什么困难?如何解决
2022-06-24 16:16:50
5697
5
原创 嵌入式工程师面试题-RTOS_Linux
操作系统任务优先级?有哪些信号量?操作系统低功耗?你用了操作系统的项目任务分了哪几块?优先级是怎样的?BLE、wifi串口是单独任务处理吗?任务参数是通过啥传递的?描述实时系统的基本特性什么是不可剥夺型内核?什么是可剥夺型内核?什么情况下用可剥夺型内核?什么是【可重入型】函数?可剥夺型内核是否可以直接使用【可重入型】函数?一个应用程序为什么一定要使用空闲任务?volatile 概念作用volatil
2022-06-24 16:13:52
5875
原创 硬件工程师面试题集
MCU____________DSP____________EPROM__________PWM____________1、与非门表达式_______2、三极管工作状态_______、、。3、稳压管是利用二极管______特性。
2022-06-24 15:18:34
11009
11
原创 嵌入式工程师面试题集-MCU_STM32
1.Cortex-M处理器采用的架构是( D )(A)v4T (B)v5TE (C)v6 (D)v72.NVIC可用来表示优先权等级的位数可配置为是( D )(A)2 (B)4 (C)6 (D)83.Cortex-M系列正式发布的版本是( A )(A)Cortex-M3 (B)Cortex-M4 (C)Cortex-M6 (D)Cortex-M84.Cortex-M3的提供的流水线是( B )(A)2级 (B)3级 (C)5级 (D)8级5.Cortex-M3的提供的单周期乘法位数是( C )(A
2022-06-24 14:59:11
14002
原创 嵌入式工程师 面试题 集-C语言
答:预编译就是预处理 , 是做些代码文本的替换工作。# 开头的指令 , 编译前的预备工作。C提供的预处理功能主要有以下三种:1 )宏定义。2 )文件包含。3 )条件编译。何时需要预编译:1 )总是使用不经常改动的大型代码体。2 )程序由多个模块组成,所有模块使用一组标准的包含文件和相同的编译选项。答:前者从标准库路径寻找file.h;后者从当前工作路径寻找file.h。答:防止该头文件被重复引用。答:5.预处理器标识#error的目的是什么?答:只要遇到 #error 就会跳出一个编
2022-06-24 14:55:20
12348
6
原创 中断与其他函数共享变量、临界资源的保护
volatile(英译:易变的)是一个特征修饰符关键字,防止编译器对修饰的变量相关代码进行优化,每次使用都重新读取变量的值,而不是使用寄存器里的备份。volatile字面意思不太好理解,其实它是提醒编译器这个变量是易变的,不要去优化它!对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)。
2022-06-21 20:57:56
2596
原创 人工智能和新能源行业有哪些
人工智能共涉及九大板块,具体包括:1、核心技术板块(AI芯片、IC、计算机视觉、机器学习、自然语言处理、机器人技术、生物识别技术、人脸识别技术、语音识别、大数据处理等)2、智能终端板块(VR/AR、人工智能服务平台、家居智能终端、3G/4G智能终端、金融智能终端、移动智能终端、智能终端软件、智能硬件、软件开发平台、应用系统等)3、智慧教育板块(教育机器人、智慧教育系统、智慧学校、人工智能培训等)4、智能机器人板块(服务机器人、农业机器人、娱乐机器人、排险救灾机器人、医用机器人、空间机器人、水下机器人
2022-06-21 19:40:59
5220
原创 任务、线程、进程 区别
在多数通用(分时)操作系统(如Linux,Windows)中,常听说线程、进程名词。而在多数实时操作系统(RTOS)(如uCOS,FreeRTOS)中,常听说是任务。它们到底有啥区别和联系呢!看下文。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程
2022-06-17 14:41:24
1951
《电机总结》.pdf
2020-07-04
W25Q64(带书签版)(有笔记).pdf
2020-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅