自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(160)
  • 资源 (5)
  • 收藏
  • 关注

原创 一文搞懂设备树基础语法

目录1、设备树的引入设备树语法1、设备树的引入首先需要了解Linux系统平台总线设备驱动模型的框架在这篇博客中我概述了如何快速通过平台总线设备驱动模型来编写驱动程序。在这个模型中,我们提供了通用的硬件驱动程序,对于不同的单板,我们只需要提供对应的board_xxx.c提供对应的硬件资源即可。那么出现一个问题,对于同一款芯片我们有成千上万的单板,因此就会存在成千上万的单板程序在内核当中。另外一个问题是,当你需要在单板中更改硬件资源,就需要重新编译对应的单板文件。总结起来:#mermaid-svg-8Qx

2021-07-05 21:12:02 2259 2

原创 数据结构和算法系列第2篇---栈的基本操作

目录前言一、栈的相关定义二、栈的顺序存储结构及实现三、栈的链式存储结构及实现栈的链式存储结构---进栈操作栈的链式存储结构---出栈操作实战运用1、回文链表2、有效的括号前言在软件应用中,栈这种后进先出数据结构的应用非常普遍。因此栈也成为了广大程序猿必须要掌握并且能够熟练运用的一种数据结构。一、栈的相关定义允许插入和删除的一端称为栈顶,另一端为栈底。栈又称为后进先出的线性表。简称LIFO结构二、栈的顺序存储结构及实现栈的结构定义typedef int SElementType;typedef

2021-07-05 14:02:56 260

原创 数字电路基础

特定外形符号经常使用。

2023-10-19 22:17:52 216

原创 链接脚本ld

链接脚本实质上是一个规则文件,程序员用来指示链接器工作的,当我们编写了多个C文件,调用了大量库,如何编译成一个可执行文件呢?这是链接脚本文件就会发挥他的作用了:将多个目标文件(xx.o)、库文件(xx.a)、动态库(.so)等等链接成一个可执行文件。ilm (rxa!FLASH (wxa!MEMORY表示对内存分布的定义,拿sram (rxa!w) : ORIGIN = 0x1c000000, LENGTH = 256K来说:sram是内存块的名字rxa!

2023-08-31 23:58:50 281

原创 整数0 强制转化为指针

>的优先级高于&。因此 &((type*)0)->member)的解释为先进行:(type*)0)->member 取得member成员的运算,然后再进行取地址& 运算int a;char b;}Msg;return 0;

2023-07-29 17:18:32 630

原创 一文搞懂Bootloader跳转到APP 的方法和原理

快速了解单片机bootloader 跳转到APP的方法和一些原理

2023-05-11 23:07:22 2828 2

原创 链接脚本ld

一般而言,程序编译经历下图四个阶段,链接是编译的最后一步,无论是在PC上编译代码,还是在PC上使用嵌入式gcc工具交叉编译嵌入式代码,编译过程都是如下几步。

2023-04-09 21:31:14 658

原创 一文搞懂C语言中位域

允许在一个结构体中以位为单位来指定其成员长度,这种以位为单位的结构体成员称为“位段”或者“位域”

2023-03-31 23:32:13 323

原创 复制构造函数

复制构造函数的理解总结

2022-11-28 21:00:41 539

原创 C++ 返回对象

函数返回const 对象、引用、非const 对象

2022-11-28 20:17:40 1238

原创 c++ 对象和类

c++ 对象和类的基础概念总结

2022-11-26 23:32:08 654

原创 嵌入式C宏定义特殊字符的用法

1 '#'运算符作为预处理运算符,可以把记号转化为字符串举例:#include <stdio.h>#define INT_TO_STR(n) #n#define VERSION(major, minor) "V"INT_TO_STR(major)"."INT_TO_STR(minor)#define ENUM_TO_STR(e) (#e)typedef enum{ USER_BUTTON_0 = 0, USER_BUTTON_1, USER_BUT

2022-05-30 11:28:35 213

原创 Python使用总结 第一篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、python文件首行 #!user/bin/python3的作用二、枚举1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:工作内容涉及到关于python的使用,现在将涉及到的知识点做总结。提示:以下是本篇文章正文内容,下面案例可供参考一、python文件首行 #!user/bin/python3的作用表示用/usr/bin/python3 这个目录所代表的程序解释该python程序二、.

2022-05-03 14:38:14 883

原创 字符串 指针的使用误区

误区使用字符串误区,代码如下误区1:char *get_xx_version() { int file_handle = open("/xxx/xxx.txt",O_RDONLY); char *xxx = NULL; int err = read(file_handle,xxx,8); close(file_handle); log_ota("ver = %s\n",xxx); return xxx;}结果:ver = NULL原因:NUL

2022-04-23 17:19:20 306

原创 通讯协议制定总结

文章目录前言比较好的帖子转载前言在进行程序设计时,难免会涉及通讯协议的制定,本文通过对工作中用到的通讯协议进行总结,可以为后期制定通讯协议积累经验。制定通讯协议时,要有规范的输出,比如在首页或者第二页要有作者、制定日期、版本、备注这些信息。最主要的是交互模式、通讯逻辑的设计。举例来讲: 比如一问一答、每条命令都需要接收方给出ACK应答确认消息,超时时间设置200ms,连续3次后超时报警。再比如Ymodem协议格式如下图所示帧格式一般取两个字节作为帧头,比如0x5a,0xa5比较好的帖子

2021-09-18 14:44:50 710

原创 总结串口常见收发数据的处理方法

文章目录前言1、普通的发送和接收1.1 普通串口初始化1.2 普通串口接收1.2 普通串口发送2、串口空闲中断+DMA2.1 初始化2.2 串口接收前言工作中经常会遇到需要进行串口进行数据收发的环节。在此总结下串口在接收数据时,常见的一些处理方法,框架、逻辑,目的是以后在做类似的串口数据收发时,能够有所启发。1、普通的发送和接收1.1 普通串口初始化串口初始化函数代码如下:oid UART_Init(void){ GPIO_InitTypeDef GPIO_InitStructure;

2021-09-18 11:29:54 5400

原创 嵌入式小结~持续更新

360公司嵌入式软件工程师电话技术面试总结:首相让做个人的技术栈介绍?个人感觉真实展现就可以。其次项目环节问答:OTA项目介绍1、是在NAND flash上还是在NOR flash上实现的?首先需要我们理解这两种FLASH的区别?目前Flash主要有两种NOR Flash和NADN Flash 。接口差别:NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以直接和CPU相连,CPU可以直接通过地址总线对NOR Flash进行访问,可以很容易地存取其内部的每一个字节。NAND

2021-09-07 16:02:04 851

原创 带你玩转M1卡

文章目录本文参考来源前言M1卡指标工作原理存储结构块0~块2的存取控制表块3的存取控制表存取控制判断举例M1卡常见问题及处理建议:本文参考来源巨人的肩膀前言M1卡全称为NXP Mifare1系列,常用的有S50及S70两种型号。M1卡指标分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位每个扇区有独立的一组密码及访问控制。具有防冲突机制,支持多卡操作(实际使用意义不大)无电源,自带天线,内含加密控制逻辑和通讯逻辑电路。数据保存期为10年,可改写10万次,读无限次。工作频率

2021-09-03 17:44:50 1647

原创 FreeRTOS系列---事件标志组

文章目录前言事件组、事件位事件组和事件位的数据类型创建事件标志组事件组EventGroup_t 定义如下函数xEventGroupCreate()函数xEventGroupCreateStatic()设置事件位函数xEventGroupClearBits()函数 xEventGroupClearBitsFromISR()函数 xEventGroupSetBits()函数xEventGroupSetBitsFromISR()获取事件标志组值函数xEventGroupGetBits()函数xEventGroup

2021-09-02 15:11:02 470

原创 FreeRTOS系列第9篇---软件定时器

文章目录简介编写回调函数注意事项定时器服务任务定时器相关配置1、configUSE_TIMERS2、configTIMER_TASK_PRIORITY3、configTIMER_QUEUE_LENGTH4、configTIMER_TASK_STACK_DEPTH单次定时器和周期定时器创建软件定时器函数 xTiemrCreate()函数 xTimerCreateStatic()开启软件定时器函数 xTimerStart()简介软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调

2021-08-29 10:28:04 639

原创 面试过程中经常会问到的职业规划,该如何作答

前言在面试环节中,难免会被问到自己的规划,这里做出一些经验总结。面经★被问未来三年如何规划为了考察你的计划性和稳定性(关系到工作的效率和团队绩效,判断你的规划和公司岗位是否匹配,是否能够更好地发挥你的人才价值。面试不同岗位计划不同。(销售–赚钱的欲望,企图心,三年赚多少钱几年买房子;财务–踏实工作稳中求进,从专业知识进度谈多久考高级证书,注册会计师等)从四方面谈工作计划:1.个人专业(所学专业,多长时间–什么职位,达到什么能力,学习哪些新知识,给出明确时间和达成目标体现有计划性)2.个人性格

2021-08-12 16:32:24 376

原创 FreeRTOS系列第7篇---队列

文章目录1、前言2、队列简介2.1 数据存储2.2 多任务访问2.3 出队阻塞1、前言在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息就会涉及到“资源管理”的问题。FreeRTOS 对此提供了一个叫做“队列”的机制来完成任务与任务、任务与中断之间的消息传递。2、队列简介队列是为了任务与任务、任务与中断之间

2021-08-11 21:39:11 369

原创 const修饰指针详解

文章目录前言1、const int* p = &a;2、int *const p = &a;3、const int* const p = &a;前言在阅读一些系统的源码时,经常会看到const修饰符,同时在面试中,const也是经常考到的点,因此在此总结下const的作用,并且是必须要掌握的。当用 const 进行修饰时,根据 const 位置的不同有三种效果。原则是:修饰谁,谁的内容就不可变,其他的都可变。这三种情况,在实际编程中经常用到。1、const int* p

2021-08-11 14:00:24 315

原创 一文搞懂无刷电机和有刷电机

目录前言1、无刷电机1.1 无刷电机基本结构1.2 工作原理介绍2、有刷电机前言工作中会遇到无刷电机、有刷电机的使用。因此在此总结他们的区别和使用。1、无刷电机相比有刷电机,无刷电机更加耐用、更加静音,工作效率也会更高。它和有刷电机的最大区别是通过位置传感器来实现换向。通过霍尔元件的霍尔效应感知永磁体磁极的位置,根据这种感知适时切换线圈中电流方向,保证产生正确方向的磁力来驱动电机。1.1 无刷电机基本结构转子定子1.2 工作原理介绍在定子上有三组线圈,分别用ABC进行标识:当为

2021-08-06 16:36:33 6751

原创 FreeRTOS系列第6篇---内核控制函数

目录前言预览详解1、taskYIELD()2 临界段代码2.1 taskENTER_CRITICAL() 、taskEXIT_CRITICAL()2.2 taskENTER_CRITICAL_FROM_ISR() 、taskEXIT_CRITICAL_FROM_ISR()3、taskDISABLE_INTERRUPTS()、 taskENABLE_INTERRUPTS()4、vTaskStartScheduler()5 vTaskEndScheduler6 vTaskSuspendAll()前言Free

2021-08-02 21:17:02 396

原创 volatile与指针

目录前言使用环境前言volatile ˈ/välədl/ 在嵌入式工作中经常会使用到,因此掌握volatile的使用非常重要。使用环境多任务环境下任务之间共享标志。寄存器映射的硬件寄存器

2021-07-28 09:39:59 1720

原创 FreeRTOS系列第5篇---任务运行时间统计

目录前言使用相关宏的设置vTaskGetRunTimeStats函数使用前言FreeRTOS 可以通过函数 vTaskGetRunTimeStats()来统计每个任务使用 CPU 的时间,以及所使用的时间占总时间的比例。在调试代码的时候我们可以根据这个时间使用值来分析哪个任务的 CPU 占用率高,然后合理的分配或优化任务。使用相关宏的设置要使用此功能的话宏 configGENERATE_RUN_TIME_STATS 必须为 1,还需要在定义其他两个宏:portCONFIGURE_TIMER_

2021-07-27 16:04:57 1580

原创 FreeRTOS系列第4篇---列表和列表项

目录前言前言列表和列表项是FreeRTOS的一个数据结构,FreeRTOS大量使用了列表和列表项。

2021-07-26 14:05:41 338 3

原创 FreeRTOS系列第3篇---任务挂起和恢复

目录前言1、任务挂起和恢复API函数介绍2、函数vTaskSuspend()3、函数vTaskResume()4、函数xTaskResumeFromISR()前言工作中我们有时需要暂停某个任务的运行,过一段时间后恢复运行。挂起和删除的本质区别是:挂起任务堆栈和任务控制块的数据不会被删除。1、任务挂起和恢复API函数介绍函数描述vTaskSuspend()挂起一个任务vTaskResume()恢复一个任务的运行xTaskResumeFromISR()中断服务函数中

2021-07-21 14:31:33 925

原创 FreeRTOS系列第2篇---任务创建和删除

目录1、任务创建和删除API函数2、实验2.1 采用静态方法进行任务的创建和删除1、任务创建和删除API函数函数描述xTaskCreate使用动态方法创建一个任务xTaskCreateStatic使用静态方法创建一个任务xTaskDelete()删除一个任务xTaskCreate此函数用来创建一个任务,任务需要 RAM 来保存与任务有关的状态信息(任务控制块),任务也需要一定的 RAM 来作为任务堆栈。如果使用函数 xTaskCreate()来创建任务的

2021-07-20 14:13:49 281

原创 数据结构和算法系列第3篇---队列的基本操作

目录前言1、队列的定义2、队列顺序存储结构---循环队列2.1 定义2.2 数据结构3、队列链式存储结构3.1 定义3.2 数据结构前言数据结构和算法整体框架图:今天归纳总结的是线性表中的队列。1、队列的定义队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的线性表,简称FIFO,允许插入的一端称为队尾,允许删除的一端称为队头。2、队列顺序存储结构—循环队列因为线性表有顺序存储结构和链式存储结构,队列属于线性表中的一种,因此它同样具有这两种存储方式。2.1

2021-07-20 11:52:41 175

原创 电子产品量产工具---程序框架设计

目录1、程序框架1、程序框架一个好的程序框架 = 可以让程序员最大程度的去复用代码。设计方法:使用模块化的编程。减少程序之间的耦合性。简而言之就是对一个功能,将其封装成一个结构体。举例:我们使用FrameBuffer来操作LCD,对于LCD可以构造一个结构体,这个结构体里边有LCD初始化函数、输出函数(用来向LCD输出一帧图像)。以后如果硬件产生了变更,便可以构造另外一个结构体,这个结构体同样提供初始化函数、输出函数(用来输出一帧图像),不同的是该结构将数据通过网络输出到浏览器上,而之前的是结构

2021-07-19 22:26:30 559 1

原创 FreeRTOS系列第1篇---任务基础知识

目录1、任务特性2、任务状态3、任务优先级4、任务实现5、任务控制块6、任务堆栈1、任务特性任务数量没有限制。支持抢占。(在每个时钟节拍下可以保证系统运行的是出于就绪态的并且优先级最高的任务)支持优先级。每个任务都有堆栈。堆栈可以理解为RAM。如果使用抢占的话,必须仔细考虑重入的问题。在FreeRTOS系统移植过程中,如果处理不好堆栈的大小,则程序在编译过程中可能就会报错: 报错的原因是设置的堆区大小加上程序中其他内容所占用的总空间超过了硬件本身总的RAM大小。我们的硬件采用的是

2021-07-18 23:20:23 340 1

原创 C语言中的_FILE_, _LINE_的作用

1 FILE它是用来指定本行语句所在源文件的文件名,用法如下// 在test.c的一段代码,执行后,将输出打印test.c #include <stdio.h>int main (void){ printf(”%s“,_FILE_);}2 LINEC语言中的__LINE__用以指示本行语句在源文件中的位置信息,举例如下// 执行结果输出为4.1. #include <stdio.h>2. int main(void)3. {4. printf("%

2021-07-18 18:54:04 1205

原创 数据结构和算法系列第1篇---线性表

目录前言定义线性表常见操作线性表的顺序存储结构定义顺序存储结构代码线性表的链式存储结构头指针和头节点的异同链式存储结构代码常见操作代码,建议记忆读取插入删除前言介绍数据结构和算法中最基础的一种数据结构:线性表定义线性表:零个或者多个数据元素的有限序列。强调定义中两个关键的点:序列:元素之间是有序的,如果元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每一个元素都有且只有一个前驱和后继。有限:计算机中处理的对象是有限的。线性表常见操作初始化清空查找长度插入删除线

2021-07-14 16:48:31 68

原创 uthash用法总结

目录前言1、简单介绍C语言中的HashTable支持的操作复杂度非库文件2、用法结构体定义键值key的唯一性UT_hash_handle内存消耗结构体声明添加查询删除清空哈希表统计hash表中的已经存在的元素数遍历排序key为int类型的完整示例前言本文旨在总结介绍C开源hash项目。文章大部分内容均来自uthash的英文使用文档。官方源码uthash实现了常见的hash操作函数。使用uthash的代码时只需要包含头文件“uthash.h”即可。该套代码所有的实现都在uthash.h文件中,因此只需要

2021-07-13 16:15:21 2093 7

原创 GPIO和Pinctrl子系统的使用

目录前言Pinctrl子系统前言使用直接操作寄存器的方法编写驱动,非常低效。Linux 下针对引脚有 2 个重要的子系统:GPIO、Pinctrl。Pinctrl子系统无论是何种芯片都有类似下图的结构: 要想让 pinA、B 用于 GPIO,需要设置 IOMUX 让它们连接到 GPIO 模块;要想让 pinA、B 用于 I2C,需要设置 IOMUX 让它们连接到 I2C 模块。所以 GPIO、I2C 应该是并列的关系,它们能够使用之前,需要设置 IOMUX。有时候并不仅仅是设置 IOM

2021-07-09 15:08:50 1199 1

原创 嵌入式工程师面试小结

目录前言题目介绍1、如何使用define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)2、static的作用?3、堆和栈的区别,哪个运行的更快,优缺点是什么?4、volatile关键字的作用,举例说明5、进程间同步的方式有哪些6、I2C和SPI的区别前言一些题目虽然简单,甚至是老生常谈的,但是一些细节需要我们注意到,尽量作答完美,因为只有作答完美、考虑全面也才能代表您是真正理解了这个知识点。题目介绍1、如何使用define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)作答:#defi

2021-07-08 10:54:36 593 4

原创 别再说你不懂malloc()和calloc()的区别

1、参数个数上的区别malloc函数:malloc(size_t size)函数有一个参数,即要分配的内存空间的大小。calloc函数:calloc(size_t numElements,size_t sizeOfElement)有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。2、初始化内存空间上的区别:malloc函数:不能初始化所分配的内存空间,在动态分配完内存后,里边数据是随机的垃圾数据。calloc函数:能初始化所分配的内存空间,在动态分配完内存后

2021-07-07 09:25:48 1095

原创 Linux必备命令汇总

目录前言Linux命令的组成常用命令&概念汇总当前路径和上一级路径上一次的路径绝对路径和相对路径ls各项含义mkdirrmdirtouchmv前言如果想成为一名嵌入式Linux工程师,Linux常用的命令一定要烂熟于心。Linux命令的组成 常用命令&概念汇总当前路径和上一级路径使用 . 表示当前路径使用 … 表示上一级路径使用 …/…表示上上级路径,依此类推。上一次的路径使用 - 表示上一次的路径绝对路径和相对路径绝对路径:从根目录一级

2021-07-06 21:59:09 275 1

用于将bin文件转化为二进制数组的工具

通过该工具可以将bin文件转化为二进制数组。用途:需要将一个bin文件转化为二进制数组,并用于程序中,这个工具可以起到作用。比如简单的离线下载器的制作验证、IAP的实现等等。

2020-12-15

按键长按、短按、双击检测。

通过状态机的方式实现按键的短按、长按、双击检测,同时按键可以灵活增添删除。方便移植。。。。。。。。。。。。。。。。。。。。。。。。。。。

2020-09-07

stvp烧写读取程序软件安装包.zip

通过该软件可以将比如stm8、stm32系列芯片内部的程序读取出来、同时也可以通过该软件进行程序的烧写。

2020-09-07

uCOS-II移植准备目录.rar

用于ucosii系统移植。同时也可以帮助需要从新配置ucos系统的朋友。

2019-10-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除