自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (9)
  • 收藏
  • 关注

原创 Float与Hex互转 、 MCGSpro里面的float

Hex字符串转float(原理及实现-MCGS脚本实现)1、计算机存储float数据的方法计算机存储一个单精度浮点型数据的方法遵循IEEE-754格式标准:单精度浮点型占据4个字节,用二进制表示占据了32个bit,一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位), 共计:32位 双字 示意如下:S E1E2E3E4 E5E6E7E8 M1M2M3 …M 23如果 S == 1;这个数是负数,s = -1;否则这个数是正数,s=1。

2024-03-19 14:25:58 632 1

原创 stm32 I2C结构体解析

/ (1)选择IIC的寻址模式是7位或者是10位地址,这需要根据实际连接到IIC总线上设备的地址进行选择,这个成员的配置也影响到IIC_OwnAddress成员,只有这里设置成10位模式时,IIC_OwnAddress1才支持10位地址。// (1)选择IIC的使用方式,有IIC模式(IIC_Mode_IIC)和SMBus主、从模式 (IIC_Mode_SMBusHost、IIC_Mode_SMBusDevice)//2:uint16_t I2C_Mode;

2024-03-16 08:46:41 456

原创 电阻标识法

E-96计数法最后的字母代表乘数,如A表示10的0次方,B表示10的1次方,等,具体对应关系见下表。色环电阻表示法,一般有4色环或5色环。黑、棕、红、橙、黄、绿、蓝、紫、白分别代表数字0到9。45对应的代码为287,X对应的代码为10的-1次方,45X=287×0.1Ω,即28.7Ω。5色环:第一、第二、第三环代表具体读数,第四环代表10的几次方,最后一环代表误差。4色环:第一、第二环代表具体读数,第三环代表10的几次方,最后一环代表误差。四位数字标记法,前三位代表具体数值,最后一位代表10的几次方,

2024-01-05 11:29:48 468

原创 贴片电容和薄膜电容的区别

贴片电容具有体积小、使用方便、寿命长等特点,适用于数字化产品、车载电子等领域。薄膜电容具有精度高、稳定可靠、耐高温等特点,适用于高频、精密电路等领域。薄膜电容则适用于高频和精密电路,如收音机、电视、计算机、摄像机、汽车电路等。贴片电容体积小、可靠性高、使用方便,但容量小、稳定性较差。贴片电容和薄膜电容在应用和性能上存在一定的差别,用户需要根据自身需要选购合适的电容器。四、贴片电容和薄膜电容的特点和适用场合。三、贴片电容和薄膜电容的优缺点。一、贴片电容和薄膜电容的定义。二、贴片电容和薄膜电容的应用。

2023-12-29 14:28:31 537

原创 关于linux的filp->private_data解释

首先给出filp的结构体:struct filestruct file {  union {   struct list_head fu_list; //文件对象链表指针linux/include/linux/list.h   struct rcu_head fu_rcuhead; //RCU(Read-Copy Update)是Linux 2.6内核中新的锁机制   } f_u;  struct path f_path; //包含dentry和mnt两个成员,

2022-03-18 21:20:44 3829 2

原创 以Linux认识的方式写Linux驱动之字符设备驱动

首先我们需要知道的是Linux内核干了什么我们不关心,我们开发驱动程序,只关心怎么才能让Linux认识我们的驱动,当然,对应的驱动也有对应的应用程序,否则,开发这个驱动也没有任何意义了,综上,我们只需要让Linux认识我们的驱动并且与我们驱动相对应的应用程序也让Linux认识即可。那工作量就下来了,因为毕竟Linux 怎么工作的非常麻烦,而且短时间也不可能搞透,但现在我们只需关心:Linux认识的驱动和对应驱动的应用程序这两件事即可。关于字符设备驱动字如图,这是字符驱动模块的框架,我们套用该

2022-03-17 16:38:36 271

原创 U-BOOT必知必备的一些知识(常用部分)

1.首先u-boot的是干啥的?启动linux系统的,要想启动linux系统,必须初始化跑linux的DDR(一般linux镜像存储在外置存储flash位置)2.u-boot从哪里获取?uboot官网有,但是支持少,可以从soc厂商定制版的uboot,然后修改他们的uboot适应自己的板子3.u-boot有源码了怎么编译建议直接在u-boot顶层makefile里面修改arch和cross_compile这两个变量来使用编译器编译4.u-boot命令重点必知必背ping命令:

2022-03-07 19:18:26 556

原创 makefile if filter wildcard $(CURDIR) 语法

#if 函数的语法是:#$(if <condition>,<then-part> )#或#$(if <condition>,<then-part>,<else-part> )#<condition>参数是if的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,于是,<then-part>会被计算,否则<else-part>会被计算##if函数的返回值是,# 如果<con.

2022-02-17 15:20:58 592

原创 实验:测试linux的makefile文件之间的依赖关系

#这里做的测试,测试的是依赖关系,和依赖之间工作的先后次序mytest:mytest2 @echo 'mytest'mytest1: @echo 'mytest1'mytest2:mytest1 @echo 'mytest2:'上面代码是给出makefile文件依赖关系的代码:运行结果如下:...

2022-02-16 17:38:57 527

原创 Makefile中:= ?= += = linux实验

= 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值给出makefile代码:a1 := 32b1 ?= 12c1 = 1d1 += 2mytest1: @echo 'a1=' $(a1) @echo 'b1=' $(b1) @echo 'c1=' $(c1) @echo 'd1=' $(d1)a1 := 64b1 ?= 24c1 = 2d1 += 8mytest: @echo 'a1=' $(a1)

2022-02-16 17:32:46 347

原创 makefile filter函数 linux

$(filter PATTERN…,TEXT)函数名称:过滤函数—filter。函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字符“%”。存在多个模式时,模式表达式之间使用空格分割。返回值:空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。函数说明:“filter”函数可以用来去除一个变量中的某些字符串,我们下边的例子中就是用到了此函数。示例:sources := fo...

2022-02-16 16:40:27 684

原创 GNU 汇编语法 .bss .text .data .rodata linux 伪操作 B BL BX MOV MRS MSR LDR STR PUSH POP STM LDM FD LDMIA

.text 表示代码段。.data 初始化的数据段。.bss 未初始化的数据段。.rodata 只读数据段。也可以自己使用.section 来定义一个段,每个段以段名开始,以下一段名或者文件结 尾结束比如:.section .testsection @定义一个 testsetcion 段伪操作:.global _start _start:ldr r0, =0x12 @r0=0x12上面代码中.global 是伪操作,表示_start 是一个全局标号,类似 C

2022-01-12 15:12:43 859

原创 轻松理解链表、物联网、uC/OS链表、FREERTOS链表

先给出链表所用结构体定义:/* 节点结构体定义 */struct xLIST_ITEM{ TickType_t xItemValue; /* 辅助值,用于帮助节点做顺序排列 */ struct xLIST_ITEM * pxNext; /* 指向链表下一个节点 */ struct xLIST_ITEM * pxPrevious; /* 指向链表前一个节点 */ void * pvOwner; /* 指向拥有该节点的内核对

2021-12-07 16:04:27 3125

转载 结构体的自身引用和链表

结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。1. 自引用结构体1.1 不使用typedef时错误的方式:struct tag_1{ struct tag_1 A; int value;}; 这种声明是错误的,因为这种声明实际上是一个无限循环,成员A是一个结构体,A的内部还会有成员是结构体,依次下去,...

2021-12-06 21:26:20 546

转载 uC/OS任务信号量

在实际任务间的通信中,一个或多个任务发送一个信号量或者消息给另一个任务是比常见的,而一个任务给多个任务发送信号量和消息相对比较少。前面所讲的信号量和消息队列均是单独的内核对象,是独立于任务存在的。这两章要讲述的任务信号量和任务消息队列是任务特有的属性,紧紧依赖于一个特定任务。  任务信号量和任务消息队列分别与多值信号量和消息队列非常相似,不同之处是,前者仅发布给一个特定任务,而后者可以发布给多个任务。因此,前者的操作相对比较简单,而且省时。如果任务信号量和任务消息队列可以满足设计需求,那么尽量不要使用

2021-12-03 14:39:07 292

原创 ARM汇编指令:STRH指令、STRB指令、STR指令、LDR指令、LDRH指令、LDRB指令、LDM指令

STRH指令STRH指令的格式为:STR{条件}H源寄存器,<存储器地址>STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。指令示例:STRHR0,[R1];将寄存器R0中的半字数据写入以R1为地址的存储器中。STRHR0,[R1,#8];将寄存器R0中的半字数据写入以R1+8为地址的存储器中。STRB指令STRB指令的格式为:STR{条件}B源寄存器,<存储器地...

2021-12-02 14:39:54 14072

转载 STM32的寄存器、uC/OS 寄存器必备基础知识、ARM、Cortex-M4、Cortex-M3、中断寄存器

ARMCortex处理器的寄存器——数据处理与控制寄存器大部分能够访问通用寄存器的指令都可以访问R0-R12。其中:低位寄存器(R0~R7)能够被所有访问通用寄存器的指令访问;高位寄存器(R8~R12)能够被所有32位通用寄存器指令访问,而不能被所有的16位指令访问。寄存器R13被用作堆栈指针(SP) ,用于访问堆栈。寄存器R14为子程序连接寄存器(LR)寄存器R15是程序计数寄存器(PC),指向当前的程序地址。ARMCortex-M4F处理器的寄存器——特殊功能寄存器程序状态字...

2021-12-01 11:58:55 1214

原创 uC/OS 时间戳和时间戳的使用

关于时间戳,首先要明白一点:时间戳是一个计数器,且记录的是内核的HCLK运行的个数。看代码时间戳(time stamp)即TS.时间戳的初始化代码在函数void CPU_Init (void);#define DEF_DISABLED 0u#define DEF_ENABLED 1u#if ((CPU_CFG_TS_32_E.

2021-12-01 09:51:19 3949 1

原创 uC/OS之typedef void (*OS_TASK_PTR)(void *p_arg)的使用

typedef void (*OS_TASK_PTR)(void *p_arg);在uC/OS里的使用在创建任务线程的时候使用声明:void OSTaskCreate (OS_TCB *p_tcb, CPU_CHAR *p_name, OS_TASK_PTR p_task){……}使用: OSTaskCreate(&AppTaskStartTCB, ...

2021-11-23 15:17:49 1141

原创 关于stm32三级流水线\指令周期\时钟周期\SDRAM

3级流水线是什么意思?先给出一级流水线顾名思义:一个完整的产品(这里指的是一个完整的指令)生产所要用到的步骤,三级并非三个步骤完成,三级的意思是,同时进行三个产品的一步(前提是产品的每一步之间不冲突)。一个流水线的三步(按照时间顺序执行),也可以说是一个指令从开始执行到执行完毕的过程。⑴ 取指从存储器装载一条指令⑵ 译码识别将要被执行的指令⑶ 执行处理指令并将结果写会寄存器显然,ARM的三级流水线的意思就很明确了,也就是同时完成三条指令的一步,也就是说ARM正在执行第1条指令的同

2021-10-15 12:19:27 2470

原创 LWIP之TCP协议之序号和确认序号

从wireshark里面提取出一次访问百度的全过程直接从图上说把:如图三次握手第一行SYN意思是主机(客户端:192.168.1.91)给百度(服务器:110.242.68.3)说,在吗百度(SYN=1)!第二行SYN,ACK意思是百度跟主机说:我在(ACK=1),你在吗(SYN=1)?第三行ACK意思是主机跟百度说,我也在(ACK=1);好了,三次握手完成啦;再继续往下看,如上图:上图第一行代码主机给百度发送了517bytes的数据...

2021-08-06 15:21:03 218

原创 LWIP之NAT技术(网络地址转换)

NAT(network address translation):网络地址转换,其实顾名思义也可以理解这东西什么意思,显然网络地址转换,就是转换网络地址的呗,那为啥要转换网络地址啊,实际IP地址可以供我们使用的也就四十亿,想想世界上那么多国家,那么多人口,坑定IP地址不够用牙,所以说要做出一种技术,这种技术就是将实际的IP只是分配成很多个虚拟的IP地址,这样一个IP地址可供使用的就多了吖,没错,这种技术就是NAT技术。咱们现在上网用的光猫,也可以叫做路由器,不过这个路由器里面有你使用的真正的IP地址,跟你用

2021-07-20 19:17:25 1239

原创 LWIP之(*)()函数原型:typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp)的解释和LWIP之数据传输流程

先来看个重定义:typedef int(*CallBack)(char *p)重定义的解释:1.*CallBack:CallBack是一个指针2.(*CallBack)():指向一个函数3.(*CallBack)(char *p):这个函数有一个参数,类型为char*4.int(*CallBack)(char *p):这个函数有一个返回值,类型为int最终:CallBack是一个指针,指向具有一个char*类型参数,且返回一个int型数据的函数前面有个typedef,所以现在Ca.

2021-07-16 10:24:17 1487 1

原创 LWIP之核心部:网卡数据传入LWIP内核流程精确分析

信号量说白了就是管任务的大佬,把一个个的任务看作是人,那么信号量就是一高管呢,厉害了大兄弟;所谓二值信号量,就是高管让俩人(任务)同时干活呗,

2021-07-15 16:58:31 512

原创 深入理解C语言之union(共用体)和结构体struct

共用体(Union),定义格式为:union 共用体名{ 成员列表}; //共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。结构体和共用体的区别:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。结构体占用的内存讲解:内存对齐的规则1.起始地址为该变量类型所占内存的整数倍,若不足则不足部分用数据填充至所占内存的整数倍。2.该...

2021-07-13 18:54:42 2337 2

原创 continue和break的区别

break 语句很重要,用得非常多,初学者一定要掌握。continue 语句虽然没有 break 语句用得多,但也经常用到,而且不可或缺,需要用到 continue 的时候其他语句是无法替代的。前面已经介绍过 break 语句,它不仅可以跳出“循环体”,还可以跳出 switch。但事实上,break 也只能用于这两种情况。break 语句不能用于循环语句和 switch 语句之外的任何其他语句中。不管是 for 循环,还是 while 循环,或者是 do…while 循环,都可以用 break 跳出来,

2021-07-12 21:44:40 7845

原创 LWIP之循环超时事件:typedef void (* lwip_cyclic_timer_handler)(void);函数解释

typedef void (* lwip_cyclic_timer_handler)(void);/** This struct contains information about a stack-internal timer function that has to be called at a defined interval */struct lwip_cyclic_timer { u32_t interval_ms; lwip_cyclic_timer_handler handl.

2021-07-12 18:10:19 220

原创 LWIP之文件夹必知

src:source源文件api文件夹:Netconn API(IPC机制---线程间通讯机制---信号量和邮箱机制) 和Socket API (套接字---最容易的网络编程)相关的源文件---操作系统中使用---(RAW/CALLBACKAPI 内核回调型API,是在裸机系统中使用)apps文件夹:显然app就是应用程序,即应用程序源文件core文件夹:内核文件夹include文件夹:LWIP所有模块的头文件netif文件夹:显然这里是存放移植网卡有关的一些文件啦下面继续详细.

2021-07-05 19:13:28 229 1

原创 FREERTOS之定时器

定时器,顾名思义,定时完成某项任务freertos中的定时器需要注意的地方:定时器是有历史的,也就是说,在某一时刻要插入所要延时的时间,那要加上该时刻所在的系统时间,

2021-06-10 17:31:01 995

原创 二值信号量和互斥量在FreeRTOS中的代码中的区分

互斥量的创建: /* 创建MuxSem */ MuxSem_Handle = xSemaphoreCreateMutex(); if(NULL != MuxSem_Handle) printf("MuxSem_Handle互斥量创建成功!\r\n"); xReturn = xSemaphoreGive( MuxSem_Handle );//互斥量创建二值信号量: /* 创建Test_Queue */ BinarySem_Handle = xSemaphor.

2021-04-24 10:34:26 299

原创 FreeRTOS之互斥量

互斥量本名互斥信号量:特殊的二值信号量区别于信号量:1、互斥量所有权:互斥量类似于令牌的功能……保护资源的令牌……任务想要访问资,持有令牌的才可以访问这个资源,否则不行!2、互斥量本身的意思:用互斥的数学属性比较容易理解:不会同时发生,也就是你(任务1)用的时候我(任务2)不能用,我(任务2)用的时候你(任务1)不能用,对应的也就是开锁和闭锁的状态,即互斥量被任务持有,那么该互斥量也就闭锁,任务释放互斥量,也就是开锁状态;3、互斥量的递归访问:很容易理解,我(任务2)用着这个互斥量呢,我还想

2021-04-22 11:15:07 484

原创 关于解决VScode插件comment translate不能立刻翻译的问题

安装好commenttranslate 插件之后正常显示效果应该是如下图才对但笔者在安装插件之后没办法实现,各种百度查试了很多方法,都没有解决,最后重新装了个Vscode才解决了问题,具体问题为:之前装的Vscode安装的时候提示了如下图后来发现请注意User installer坑就在这里:看Vscode安装包文件名为VSCodeUserSetup-x64-x.xx.x;然而你需要正常的安装包呀:VScode文件名为VSCodeSetup-x64-x.xx.x这样的安装包...

2021-03-27 18:18:35 8161 16

原创 解决VScode编码里注释文字乱码的问题

用VScode打开代码之后,在右下角找到如图所示点击UTF-8选择

2021-03-27 18:08:24 859

原创 FreeRTOS之消息队列

消息队列:任务之间通信的时候用的任务能从队列中读取消息,这些消息可以是其他任务写进来的,如果这些消息为空时,可以设置阻塞时间来等消息的到来再读走,还可以当超过指定时间没有读到消息的时候把任务从阻塞态转为就绪态。给出FreeRTOS的消息队列的源代码和使用代码,来分析分析首先使用他#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGene

2021-03-10 21:24:30 265

原创 FreeRTOS之任务管理

任务管理必然跟任务所处的状态有关系,下表为任务的四个状态,主要关注点在挂起态,下面给出FREERTOS源码中挂起API函数代码:#if ( INCLUDE_vTaskSuspend == 1 ) void vTaskSuspend( TaskHandle_t xTaskToSuspend ) { TCB_t *pxTCB; taskENTER_CRITICAL(); { /* If null is passed in here then it is the run.

2021-03-10 15:43:33 433

原创 FreeRTOS之空闲任务和阻塞延时

空闲任务的创建:参考我之前的文章:FreeRTOS之创建任务(静态创建为例)无非老三样:空闲任务栈、空闲任务控制块、空闲任务函数然后创建任务就是把老三样合为一个:创建空闲任务代码如下void vApplicationGetIdleTaskMemory( TCB_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer,

2021-03-10 01:53:22 585

转载 stm32优先级

STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下/* Preemption Priority Group -------------------------------------------------*/#define NVIC_PriorityGroup_0...

2021-03-09 15:54:58 1637

原创 FreeRTOS之临界段的保护

临界段含义:一段在执行的过程中不可被中断的代码段FREEROTS的临界段比较容易临界段的保护无非是利用开关中断来实现的有四种:1、不带返回值的关中断函数:不可嵌套---这样的函数不能再中断中调用2、带返回值的关中断函数:可嵌套---这样的函数可以在中断中调用3、不带中断保护的开中断函数:和不带返回值的关中断函数成对使用4、带中断保护的开中断函数:和带返回值的关中断函数成对使用上面这四种函数的组合就可以实现临界段的保护。临界段代码的应用两种场合:1、中断:临界段可以嵌套

2021-03-08 22:45:04 412

原创 内联函数inline和_forceinline

C++内联函数:内联函数在函数声明前面加上关键字inline 就可以了,实质是为了提高函数的执行效率在VC++中可以用_forceinline 代替inline 关键字.例:inline int Max (int a, int b){if(a >b)return a;return b;}增加了 inline 关键字的函数称为“内联函数”。内联函数和普通函数的区别在于:当编译器处理调用内联函数的语句时,不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处

2021-03-08 22:34:19 2028

原创 FreeRTOS之调度器

首先看调度器这三个字啥意思呢?调度器的主要作用是在就绪队列中选择优先级最高的任务运行,如果优先级最高的任务不止一个,则选择队头的任务运行(某度查到的)一句话理解他:好多作业都没写呢,先写那个好呢?嗯,不错,你想先写那个作业就写那个作业,你说了算,没错,你就是调度器下面我们用两个任务的切换来是看看调度器到底是怎么干活的!假设两任务分别为:Task1TCB和Task2TCB言归正传,上代码:void vTaskStartScheduler( void ){ /* 手动指定第一

2021-03-08 17:16:24 1019

芯片STM32F030中使用I2C那点事.rar

配置STM32F030和用IO口来模拟I2C通讯的那点事,iic源代码,IO模拟代码,交互代码,配置代码等

2021-04-22

DM00091010_ENV4.pdf

STM32F030技术文档

2021-04-22

TVOC原始数据+算法.xlsx

TVOC测定算法相关

2021-04-22

AltiumDesigner导出Gerber教程.pdf

AD

2021-04-22

I2C总线协议及工作原理.pdf

I2C

2021-04-22

蓝牙专用专业英语及单词短语.docx

蓝牙专用

2021-04-22

两个点H文件相互包含时的一种避免在编译的时候conflict的方法.docx

C语言

2021-04-22

防止一个头文件被include两次.docx

C语言必备知识点

2021-04-22

I2P和TOR比较分析.docx

I2P和TOR、大蒜路由

2021-04-22

空空如也

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

TA关注的人

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