嵌入式软件开发
文章平均质量分 81
嵌入式软件,嵌入式操作系统,嵌入式驱动开发
AI+程序员在路上
技术分享,互学共进~
展开
-
C语言编程之字节对齐
一.什么是字节对齐现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放,这就是对齐。原创 2024-11-04 21:15:07 · 295 阅读 · 0 评论 -
嵌入式软件优秀编程习惯
嵌入式软件优秀编程习惯原创 2024-11-01 19:54:49 · 520 阅读 · 0 评论 -
非常简洁的C语言知识汇总!
C语言知识汇总--极简原创 2024-10-14 19:54:45 · 91 阅读 · 0 评论 -
JSON介绍及cJSON库应用
JSON介绍及cJSON库应用JSON是JavaScript Object Notation的简称,中文含义为“JavaScript 对象表示法”,它是一种数据交换的文本格式,而不是一种编程语言。二.cJSON1.CJSON是什么?CJSON 是一个轻量级的、用于处理 JSON 数据的 C 语言库。它提供了简单而直观的 API,使得在 C 程序中处理 JSON 数据变得相对容易。在本文中,我们将介绍 CJSON 的基本使用,包括如何创建 JSON 对象、解析 JSON 字符串、访问 JSON 数据原创 2024-09-25 20:35:10 · 909 阅读 · 0 评论 -
五种嵌入式中常见网络协议栈
五种嵌入式中常见网络协议栈LwIP(Lightweight IP)是一个由瑞典计算机科学院(Swedish Institute of Computer Science)开发的轻量级TCP/IP协议栈,专为资源有限的嵌入式系统而设计。它以其小巧且功能完善的特性,在物联网、嵌入式系统等领域得到了广泛应用。原创 2024-09-18 20:51:41 · 1583 阅读 · 0 评论 -
数字证书、数字签名及其关系
数字证书、数字签名及其关系数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。简单地说,数字证书是一段包含用户身份信息、用户公钥信息以及份验证机构数字签名的数据。数字签名是一种用于保证数字信息完整性、真实性和不可抵赖性的技术。它利用公钥加密技术,通过私钥对信息的摘要进行加密生成签名,接收方则使用公钥进行解密和验证。原创 2024-09-05 20:05:42 · 1444 阅读 · 0 评论 -
信息加解密技术
信息加解密技术对称加密加密和解密使用相同的密钥。常见的对称加密算法包括AES、DES、3DES和IDEA。对称加密的优点是加密和解密速度快,适合大量数据的加密处理。缺点是密钥管理和分发复杂,不适合在网络环境中大规模使用。非对称加密加密和解密使用不同的密钥,一个称为公钥(public key),另一个称为私钥(private key)。公钥可以公开,私钥必须保密。常见的非对称加密算法包括RSA、ECC(椭圆曲线密码)和DSA(数字签名算法)。原创 2024-09-05 20:03:38 · 775 阅读 · 0 评论 -
Linux下IO多路复用—select,poll,epoll
Linux下IO多路复用—select,poll,epollIO多路复用是一种操作系统的技术,用于在单个线程或进程中管理多个输入输出操作。它的主要目的是通过将多个IO操作合并到一个系统调用中来提高系统的性能和资源利用率,避免了传统的多线程或多进程模型中因为阻塞IO而导致的资源浪费和低效率问题。在IO多路复用中,通常使用的系统调用有 select()、poll()、epoll() 等,它们允许程序等待多个文件描述符(sockets、文件句柄等)中的任何一个变为可读或可写,然后再进行实际的IO操作。原创 2024-08-29 19:30:20 · 1536 阅读 · 0 评论 -
Linux下UDP编程
Linux下UDP编程socket(套接字)本质上是一个抽象的概念,它是一组用于网络通信的 API,提供了一种统一的接口,使得应用程序可以通过网络进行通信。在不同的操作系统中,socket 的实现方式可能不同,但它们都遵循相同的规范和协议,可以实现跨平台的网络通信。原创 2024-08-28 19:47:14 · 2084 阅读 · 0 评论 -
Linux下TCP编程
Linux下TCP编程1.Linux下socket编程需要用到的相关函数:API参数介绍: https://pubs.opengroup.org/onlinepubs/007908799/xns/syssocket.h.html原创 2024-08-28 19:44:35 · 1288 阅读 · 0 评论 -
Stm32串口中断中用printf打印遇到的问题及分析
Stm32串口中断中用printf打印遇到的问题及分析不要在单片机中断函数中加入printf函数,如果加入会导致不可预知的错误,解决方法就是把printf函数放到中断函数外面即可。 做嵌入式软件及驱动开发要切记一条铁律:中断服务程序里,不能调用printf, malloc 函数。原创 2024-08-26 19:59:02 · 691 阅读 · 0 评论 -
递归算法及应用
递归算法及应用递归就是程序调用自身的编程技巧。递归通常把一个大型复杂的问题层层转化为一个与原问题相似,规模较小的问题来求解。递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复的计算,大大减少程序的代码量。递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。原创 2024-08-26 19:56:49 · 986 阅读 · 0 评论 -
Linux下获取文件或目录的状态信息
Linux下获取文件或目录的状态信息 在Linux下进行文件、目录编程时经常需要获取指定文件的属性信息,比如: 文件类型、大小、创建日期、修改日期等属性信息。获取这些属性信息非常有用,比如: 打开一个设备文件时,为了防止未知错误,可以提前判断打开的设备文件是否是正确的类型。 拷贝文件时、读取文件时,mmap映射文件时,可以根据文件本身的大小,判断文件是否读写完毕。二.获取方法1.Linux下有3种函数可以快速得到文件、目录的属性信息:stat 、fstat、lstat原创 2024-08-22 20:00:03 · 625 阅读 · 0 评论 -
哈希算法及算法库
哈希算法及算法库哈希算法,又称为散列函数或摘要算法,是计算机科学中一种重要的算法,它通过将任意长度的输入数据转换成固定长度的输出值(即哈希值或摘要),来实现数据的压缩和唯一性标识。哈希算法在数据安全、信息检索、数据完整性验证等多个领域有着广泛的应用。原创 2024-08-22 19:58:09 · 659 阅读 · 0 评论 -
C语言实现队列
C语言实现队列队列,是一种先进先出(first in first out 简称FIFO)的数据结构,是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,在队列中,进行插入的一端称为队尾,进行删除的一端称为队头。队列也可以分为顺序队列(基于数组实现)和链队列(基于链表实现)。原创 2024-08-10 10:47:26 · 1141 阅读 · 0 评论 -
C语言获取文件MD5值
C语言获取文件MD5值D5(Message Digest Algorithm 5)是一种常用的哈希函数算法。将任意长度的数据作为输入,并生成一个唯一的、固定长度(通常是128位)的哈希值,称为MD5值。MD5算法以其高度可靠性和广泛应用而闻名。MD5算法主要具备以下特点:(1)不可逆性:给定MD5值无法通过逆运算得到原始数据。(2)唯一性:不同的输入数据会生成不同的MD5值。(3)高效性:对于给定的数据,计算其MD5值是非常快速的。原创 2024-08-10 10:45:33 · 1148 阅读 · 0 评论 -
C语言中异或的应用
C语言中异或的应用在C语言中,异或(XOR)是一种二进制运算,它对两个数字的对应位进行比较,如果这两个位不同,则结果为1;如果这两个位相同,则结果为0。异或运算符在C语言中是^。1.异或运算有几个有趣的性质:交换律:a ^ b = b ^ a结合律:(a ^ b) ^ c = a ^ (b ^ c)任何数与0异或都等于其本身:a ^ 0 = a任何数与自身异或都等于0:a ^ a = 0异或运算对同一个数进行两次,结果仍为原数:a ^ b ^ b = a(因为b ^ b = 0,然后a ^原创 2024-08-09 19:54:14 · 1064 阅读 · 0 评论 -
C/C++中void与void*详解
C/C++中void与void*详解一.void关键字的使用规则1.如果函数没有返回值,那么应声明为void类型;2.如果函数无参数,那么应声明其参数为void;3.如果函数的参数可以是任意类型指针,那么应声明其参数为void * ;4.void不能代表一个真实的变量;void体现了一种抽象;原创 2024-08-09 19:52:21 · 1603 阅读 · 0 评论 -
VS2022中获取及使用文件路径的两个问题
编程中常常需要获取当前路径,或者保存文件到一个路径中,但是经常会遇到两个问题:1.路径中的"\"与"/",在有些环境中他们是有区别的2.获取当前路径中函数返回WCHAR和char,区别及应用原创 2024-08-05 21:01:13 · 1289 阅读 · 0 评论 -
嵌入式常见的五种校验算法(c语言)
嵌入式常见的五种校验算法(c语言) 为了在串口通信或者固件升级时防止数据传输错误导致出现问题,一般要引入校验算法,嵌入式常见简易校验算法(c语言)主要有:奇偶校验发,校验和,异或校验,CRC校验,md5,每种校验方法都有自己的特点,在不同场景可以选择合适的算法进行应用。原创 2024-07-26 20:00:33 · 1094 阅读 · 0 评论 -
C++常见问题
C++面试常见的15个问题1.C++有哪些性质2.引用与指针区别?3.new、delete、malloc、free关系4.子类析构时要调用父类的析构函数吗?5.多态,虚函数,纯虚函数6.重载和重写7.C++是类型安全的?8.main函数执行以前会执行什么代码?9.const与#define相比,有何优点?10.简述数组与指针的区别?11.队列和栈有什么区别?12.动态多态有什么作用?13.基类的构造函数不能定义为虚函数?14.基类的析构函数需要定义为虚函数?15.命名空间优势原创 2024-07-24 20:08:12 · 652 阅读 · 0 评论 -
C语言动态分配内存(malloc,calloc,realloc,free)
C语言动态分配内存(malloc,calloc,realloc,free)内存的五大分区:(1)堆区(heap)——由程序员分配和释放, 若程序员不释放,程序结束时一般由操作系统回收。注意它与数据结构中的堆是两回事(2)栈区(stack)——由编译器自动分配释放 ,存放函数的参数值,局部变量等。其操作方式类似于数据结构中的栈(3)静态全局区(4)文字常量区——常量、字符串就是放在这里的。 程序结束后由系统释放(5)(程序)代码区——用于存放函数体的(二进制)代码原创 2024-07-24 20:01:11 · 740 阅读 · 0 评论 -
C语言联合及枚举
C语言联合及枚举一.联合体1.联合体类型的声明像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型,但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体,给联合体其中一个成员赋值,其他成员的值也跟着变化。二.枚举类型 1.枚举类型的声明枚举顾名思义就是一一列举,把可能的取值一一列举。原创 2024-07-22 15:58:12 · 510 阅读 · 0 评论 -
C语言结构体及位域
C语言结构体及位域1.定义和声明结构体是由不同数据类型数据构成的组合型的数据结构,是用户自定义的数据类型。 2.结构体类型的声明格式:struct 结构体名{ 成员列表};二.位域1.什么是位域及位域作用当我们在一个程序中要用到很多,开关量,这些变量只需要存储0和1,这时候我们就不需要那么多的内存空间,我们只需要每个变量的1位就可以存储原创 2024-07-22 15:55:31 · 858 阅读 · 0 评论 -
C语言实现链表
C语言实现链表链表结构,支持动态增加节点,释放节点,比较适合存储动态数据的应用场景,而且链表的空间是存储在堆上面的,可以动态分配,释放。链表特点:(1)数组的空间是连续的,可以直接通过[]下标访问。(2)链表的节点是不连续的,需要通过每个节点的指针,来找到上一个节点或者下一个节点的地址。原创 2024-07-20 08:41:47 · 1223 阅读 · 0 评论 -
C语言的函数指针与指针函数
C语言的函数指针与指针函数 在C语言中,函数指针和指针函数是两个容易混淆但截然不同的概念。理解它们的区别对于深入理解C语言中的指针和函数非常关键。原创 2024-07-19 09:32:27 · 1025 阅读 · 0 评论 -
100多个嵌入式软件开源项目集锦
100多个嵌入式软件开源项目集锦原创 2024-07-12 09:38:51 · 1162 阅读 · 0 评论 -
POSIX互斥锁和条件变量
POSIX互斥锁和条件变量互斥锁和条件变量都是进程同步机制,通常,互斥锁是用来对资源加锁,条件变量用来等待资源,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号);由于是多线程,为了防止竞争,所以条件量一般和锁一起使用。原创 2024-07-09 16:50:42 · 804 阅读 · 0 评论 -
POSIX线程(pthread库)介绍及使用方法
POSIX线程(pthread库)介绍及使用方法OSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准,该标准定义了创建和操纵线程的一整套API。关于pthread.h支持的平台,以下是一些主要的说明:支持的平台类Unix系统:Linux:Linux系统广泛支持Pthreads,它是Linux下多线程编程的基础。通过pthread库,开发者可以在Linux环境下创建、管理和同步多个线程。Unix:传统的Unix系统也支持Pthreads原创 2024-07-06 14:53:58 · 1453 阅读 · 0 评论 -
STM32基本定时器、通用定时器、高级定时器区别
一.STM32基本定时器、通用定时器、高级定时器区别STM32系列微控制器中的定时器资源分为基本定时器(Basic Timer)、通用定时器(General Purpose Timer)和高级定时器(Advanced Timer)三类,它们在功能和复杂性上有所不同。基本定时器主要用于实现简单的定时功能,没有外部IO接口,是内部资源。通用定时器除了基本的定时功能外,还支持输入捕获、输出比较、PWM生成等多种功能。高级定时器包含基本定时器和通用定时器的所有功能,并增加了更高级的功能。原创 2024-07-03 19:53:57 · 1579 阅读 · 0 评论 -
C语言中宏定义控制日志输出及log库介绍
1.使用宏定义控制日志输出使用条件编译指令#if和宏定义来控制调试信息的输出:#define LOG_DEBUG 1#if LOG_DEBUG #define DBUG_PRINTF printf#else #define DBUG_PRINTF(...)#endif二.C语言轻量级log库1.log.c2.EasyLogger原创 2024-07-01 20:08:56 · 1084 阅读 · 0 评论 -
嵌入式以太网硬件构成与MAC、PHY芯片功能介绍
以太网电路主要有以下几种情况:·CPU内部集成了MAC和PHY,难度较高;·CPU内部集成MAC,PHY采用独立芯片(主流方案);·CPU不集成MAC和PHY,MAC和PHY采用独立芯片或者集成芯片(高端采用)PHY整合了大量模拟硬件,而MAC是典型的全数字器件,芯片面积及模拟/数字混合架构的原因,是将MAC集成进微控制器而将PHY留在片外的原因。更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合;所以常用的CPU内部集成MAC,PHY采用独立的芯片方案原创 2024-07-01 20:03:47 · 1537 阅读 · 0 评论 -
keil软件的一些使用技巧
keil软件的一些使用技巧头文件包含的技巧keil编译stm32有hal库的工程为何编译很慢解决快速注释与快速消注释原创 2024-06-29 11:52:06 · 736 阅读 · 1 评论 -
电机应用相关名词介绍
电机应用相关名词介绍额外转速(也称为额定转速)是指电机在额定电压、额定电流和额定负载的条件下运行时,电机的旋转速度。转差率又称“滑差率”,转速的表示方法之一,计算公式为S = (Ns - N) / N(r/min),其中Ns为同步转速,N为实际转速。电机堵转是指电机在启动或运行过程中,由于某种原因造成电机无法正常运转,即电机的转速降至零或接近于零,但仍保持电流流过的状态。例如,在50Hz的交流电源下,同步转速与电源频率之间的关系更为直接。定义:电机扭矩即电动机的输出扭矩原创 2024-06-27 20:00:24 · 537 阅读 · 0 评论 -
STM32单片机实现串口IAP升级
STM32单片机实现串口IAP升级1.要实现串口IAP升级,首先要编写一个bootloader程序,然后再写支持IAP的app程序;2.keil下bootloader的程序rom和ram设置3.app程序要用bin文件注:本文以STM32H743举例,其他stm32单片机IAP升级原理类似。原创 2024-06-27 19:55:48 · 2172 阅读 · 0 评论 -
STM32烧写hex及bin文件的五种方法
STM32烧写hex及bin文件的五种方法1.STVP是ST早期的一款下载编程工具,支持早期的ST早期的芯片(比如ST7系列),也支持STM8、 STM32。2.ST-LINK Utility3.STM32CubeProg 这款工具,是 ST 继前面两款工具之后新推出的一款工具,是目前主推的一款下载编程工具。4.CoFlash 软件的最新版本是 CoFlash V1.5.1,发布时间为 2019 年 4 月 4 日;5.keil直接烧写hex文件原创 2024-06-23 11:48:25 · 3565 阅读 · 0 评论 -
Keil MDK生成LIB库以及使用LIB库
Keil MDK生成LIB库以及使用LIB库一.keil下lib静态库的使用具有以下优点:1.封装源代码,对外不开放,提高保密性。2.将标准功能函数封装成库,提高代码的复用性。3.使用库开发,简化开发流程,提高开发效率。4.系统调用库函数,提高执行效率。原创 2024-06-22 09:55:01 · 2265 阅读 · 0 评论 -
STM32三种调试工具CMSIS-DAP、J-Link和ST-Link
STM32三种调试工具CMSIS-DAP、J-Link和ST-LinkMSIS-DAP、J-Link和ST-Link均是嵌入式处理器的开发调试工具。CMSIS-DAP是一种轻量级调试接口,旨在实现开源的开发调试。它的优点是使用方便、通用性好、成本低,还支持固件的在线升级。J-Link是一款由德国公司SEGGER Microcontroller开发的高性能调试工具。但是价格较高。ST-Link是由意法半导体公司开发的专为ST微控制器设计的工具。ST-Link使用简便,价格也比较亲民原创 2024-06-22 09:43:59 · 2658 阅读 · 0 评论 -
如何用 STM32CubeMX 创建项目并导入 Keil5
如何用 STM32CubeMX 创建项目并导入 Keil5STM32CubeMX在“Project”菜单中,你需要设定项目的名称和存储位置。同时,在“Project Settings”部分,你可以选择目标编译器/IDE。对于此教程,我们选择“MDK-ARM”,即Keil5。打开Keil uVision5,选择“Project” -> “Open Project”导航至你的项目文件(通常是一个带有.uvprojx扩展名的文件)。打开后,Keil5将加载项目结构和配置,你可以看到已经生成的源代码文件。原创 2024-06-21 09:34:43 · 1675 阅读 · 0 评论 -
STM32多种开发环境及生成hex及bin文件介绍
STM32多种开发环境及生成hex及bin文件介绍keil5 STM32CubeIDE EWARM如果不考虑商业应用keil的比较好,如果考虑商业付费用STM32CubeIDE更好一些,毕竟是免费的。原创 2024-06-21 09:32:05 · 1197 阅读 · 0 评论