自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 【转载】如何理解TCP是面向字节流协议

我们可以自定义一个消息结构,由包头和数据组成,其中包头包是固定大小的,而且包头里有一个字段来说明紧随其后的数据有多大。比如这个消息结构体,首先 4 个字节大小的变量来表示数据长度,真正的数据则在后面。当接收方接收到包头的大小(比如 4 个字节)后,就解析包头的内容,于是就可以知道数据的长度,然后接下来就继续读取数据,直到读满数据的长度,就可以组装成一个完整到用户消息来处理了。4 小结。

2024-05-21 15:45:03 383 1

原创 【转载】STM32H7 RAM和CACHE数据一致性话题

那就是DMA更新了可缓存存储器比如SRAM1的数据后,CPU再去读SRAM1,此时也会发生数据不一致的问题。2、回写【WRITE BACK】:在写数据时,只是把数据写进D-CACHE而未写入二级存储器,并将缓存行里的数据标识为DIRTY,直到执行CACHE的清除操作才将D-CACHE里的内容写进二级存储器。当串口接收完一帧数据并进入超时中断后,由于DCache的存在,为防止DMA未及时写入到相应内存中,又为了防止后续读取串口数据存在和实际数据不一致的隐患,需要在读取前串口数据进行数据一致性处理。

2024-05-09 09:03:34 849 1

原创 单片机程序常用通用优化方向

3.指令和数据ram分区中,方式有①attribute at编译器关键字 ②keil target 改IRAM,配合文件右键更新dialog③上一步本质是修改.sct文件,即gcc下的.ld文件。高速分区对ST的M4内核,是CCM-RAM分区,对M7是ITCM、DTCM,只有一般RAM分区的就算了,程序运行速度和放ROM中没啥区别。1.cache命中率。2.队列传值改传指针。

2024-05-06 14:27:59 59

原创 STM32中Flash不同读保护等级level0-3对应处理方式

而通过自制的swd(stlink不行)编写出访问flash时序,发送读取flash某个地址一个字的请求,读成功后flash被上锁。所以循环读取一个字,可以将整片flash的程序读出。level2:完全禁止了SWD的调试能力,level 2状态下的芯片无法解除这个等级。此时可以通过去除外壳,将选项字所在flash暴露在物理干扰(光照、辐射等)下,共32位的选项字,只要使1位改变,就可以从level2降级为level1。MCU是GD/STM两平台通用的,全系列支持level1,但只有部分型号支持level2。

2024-05-06 14:15:41 166

原创 LWIP中“pbuf_free: p->ref > 0“ failed 问题分析

但如果删除某个pbuf链表的首节点时,链表中第二个节点的pbuf中ref字段不为0,则表示该节点还在其他地方被引用,那么第二个节点不与第一个节点存储同一个数据包,那么就不会删除第二个节点。(4):获取当前pbuf的类型,根据不一样的类型进行不一样的释放操作,如果是从内存池中申请的pbuf,则调用memp_free()函数进行释放,如PBUF_POOL、PBUF_ROM和PBUF_REF类型的pbuf,如果是从内存堆中申请的,就调用mem_free()函数进行释放内存,如PBUF_RAM类型的pbuf。

2024-05-01 23:05:42 584 1

原创 网络编程中bind使用INADDR_ANY个人理解

举个例子,假设一个主机有inter1,inter2,inter3三个接口,如果一个socket绑定了INADDR_ANY的地址和8000 的端口,那么,从客户端过来的一个UDP包到达该主机,不管客户端connect的是inter1,inter2,inter3中的哪个地址,都会被该socket接收到。上面是接收的情况,那么,发送数据报给客户端的时候,到底是用哪个接口发送呢?这么做的目的是,即表示所有发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的 数据,都由这个服务端进程进行处理。

2024-05-01 15:50:22 12 1

原创 【转载】Keil 生成的 object 文件名带后缀 _1

的引入的这个机制,笔者曾碰到过莫名奇妙的问题,问题过于玄学不好描述,下次再碰到再研究一番。尽量一开始就避免导入多个同名文件。链接:https://www.jianshu.com/p/d8234f09ea22。商业转载请联系作者获得授权,非商业转载请注明出处。之后引入允许多个同名文件存在的机制,编译为。可能因为引入开源项目出现同名文件的情况很多。若仅从工程中剔除多余的同名文件,还是会重命名。之后编译时会输出相关的重命名警告,类似如下。工程中存在两个及以上的同名文件。文件时会在文件名自动添加后缀。

2024-04-30 12:02:10 135 1

原创 CMSIS RTOS V1与V2接口对比

上方函数为V2,下方是V1,none为无。

2024-04-30 09:38:16 522 1

原创 解决STM32H743利用CUBEMX生成工程,连接下载器“CAN not access”问题

问题原因在于自己刚刚接触H7系列芯片,CubeMX与HAL库也不太熟悉,所以本篇文章只是记录分享解决过程,对问题原因和为什么问题能解决,依然一头雾水。

2024-04-19 10:35:57 205 3

原创 GD32F4 利用查询Systick实现毫秒、微秒级延时

Systick是ARM内核自带的系统滴答定时器,利用查询Systick的方法实现延时,可以节省定时器资源,同时不会影响到Systick的运行。

2024-03-30 13:17:30 334 1

原创 基于GD32F4平台的多/单通道ADC采样+DMA中断

基于GD32F4平台的多/单通道ADC采样板级支持包,GD其他系列平台需要修改部分标准库函数。特点:接口清晰,配置方便,支持1~16任意通道数量,自由决定采样顺序,采用DMA中断通知用户采样完成。

2024-03-30 13:00:18 540

原创 VM虚拟机下的Keil断网环境配置

Keil MDK在虚拟机环境下断网使用可规避诸多风险,在完成本文档的步骤后,可以在虚拟机中完成MCU的开发,编译、烧录、调试功能均可正常使用。

2023-11-10 13:02:22 659 3

原创 入职前复习的部分嵌入式软硬件知识

p是地址 *p是该地址的值 【*是取值符(即对该地址取值)&是取址符】int *P=&a在定义时表示指针变量,其实是两个语句,int*p;p=&a,意为“P是XX的指针”,与计算时*表达的含义不同,切记,指针是点,数组是线,char str[] 是字符数组s是变量,char *p是字符指针,p是常量,字符串不可更改。之间定义,为声明时定义,还可以在声明后定义(结构体变量指的是整体,与成员区分)485:相比232多了电平转换芯片,A电平大于B为1,小于为0(差分,即两根线表示一个信号)

2023-10-28 20:26:02 59 4

原创 算法图解笔记--排序算法

分别定义最小值函数和排序函数'''先定义一个找最小值的函数'''def findmin(list): smallvalue=list[0]#储存最小值(暂定为第一个元素) smallvalue_index=0#储存最小值索引(暂定为第一个元素的索引) for i in range(1,len(list)):#遍历从1到列表元素个数的列表 if list[i]<smallvalue:#若暂时的最小值大于第i位元素 smallvalue=

2021-01-13 03:33:24 210 1

原创 算法图解笔记1.2 1.3运行时间与大O表示法

运行时间计算机中log表示log2二分查找所用时间为对数时间O(log n)顺次查找为线性时间O(n)大O表示法大O表示法没有单位,它的n是操作数,它指出算法运行时间的增速

2021-01-13 02:26:06 175

原创 算法图解笔记1.2 二分查找

算法图解笔记1.2 二分查找1.定义一个二分法函数```def binary_search(list,item):###定义一个函数,输入值为一个按顺序排列的有序列表,和一个要找的值 low=0#初始左侧范围 high=len(list)-1#初始右侧范围 while low<=high:#循环语句,当范围未缩小到仅剩一个值时,执行循环语句 mid=(high+low)//2#二分法核心,每次猜序列中央的索引值 //为向下取整 gues

2021-01-12 23:27:20 114

空空如也

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

TA关注的人

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