自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LINUX之MMC子系统分析

MMC子系统从协议到源码分析

2024-07-23 12:26:58 999

原创 Linux之slub分配器分析

简要分析下这个图:kmem_cache是一个cache_chain的链表,描述了一个高速缓存,每个高速缓存包含了一个slabs的列表,这通常是一段连续的内存块。存在3种slab:slabs_full(完全分配的slab),slabs_partial(部分分配的slab),slabs_empty(空slab,或者没有对象被分配)。slab是slab分配器的最小单位,在实现上一个slab有一个或多个连续的物理页组成(通常只有一页)。

2024-03-15 14:01:20 1070 1

原创 linux MTD子系统分析

Nand Flash,每一个页,对应一个空闲区域(OOB),这个区域是基于Nand Flash的硬件特性,数据在读写的时候容易出错,为了保证数据的正确性,就产生了这样一个检测和纠错的区域,用来放置数据的校验值。OOB的读写操作,一般都是随着页的操作一起完成,也就是在读写页的时候,对应的OOB就产生了。

2024-02-27 19:40:33 1349

原创 Linux之伙伴系统分析

伙伴系统是内核中用来管理物理内存的一种算法,我们知道内存中有一些是被内核代码占用,还有一些是被特殊用途所保留,那么剩余的空闲内存都会交给内核内存管理系统来进行统一管理和分配。内核中会把内存按照页来组织分配,随着进程的对内存的申请和释放,系统的内存会不断的区域碎片化,到最后会发现,明明系统还有很多空闲内存,却无法分配出一块连续的内存,这对于系统来说并不是好事。而伙伴系统算法就是为了缓解这种碎片化。

2024-01-06 14:52:21 1388 1

原创 Linux FS文件夹下函数分析

一、从系统调用开始linux系统通过向内核发出系统调用(systemcall)实现了用户态进程和硬件设备之间的大部分接口。系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软中断完成。在/kernel/kernel_sdk/arch/arm/kernel/entry-common.S中可以找到关于swi中断的入口,具体源码不进行分析,总之该中断实现对“现场”进行保护最后进行返回,我们只关注其查找系统调用表并调用的过程。如

2023-11-30 11:18:59 1209 1

原创 linux之内存分析

MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。物理地址:(英语:physical address),也叫实地址(real address)、二进制地址(binary address),它是在地址总线上,以电子形式存在的,使得数据总线可以访问主存的某个特定存储单元的内存地址。虚拟地址:虚拟地址是相对于物理地址来说的。

2023-08-30 16:38:18 1239 1

原创 linux之kasan原理及解析

linux之kasan原理分析

2023-08-07 10:15:17 3679 1

原创 用VSCODE看linux内核代码

其实本质上是因为内核代码太多导致,二实际上我们在看内核代码时很多是不需要的。因此作为VSCODE 单推人,是时候解决如上问题了,思路就是make工具在make源码时会自动根据makefile找到需要的文件,所以只要能够修改make,只把需要的文件找出来,然后再搞个脚本,把需要的文件拷出来创建工作区,然后再看代码。就能解决上述各种问题如下为make源码下载地址。我这里使用的make4.4最新版源码进行修改。

2022-11-28 14:16:11 1773

原创 linux之Oops原理及解析

linux之Oops原理和分析

2022-09-01 20:28:24 8571

原创 EXT4文件系统磁盘分布和部分特性介绍

EXT4文件系统磁盘分布和部分特性介绍

2022-04-12 13:35:04 5471

原创 Linux之USB分析

一、USB概念概述USB1.0版本速度1.5Mbps(低速USB) USB1.1版本速度12Mbps(全速USB) USB2.0版本速度480Mbps(高速USB)。USB 分为主从两大体系,一般而言, PC 中的 USB 系统就是作主,而一般的 USB 鼠标, U 盘则是典型的 USB 从系统。下是简单的列出了 USB 设备类型,理想的情况 USB 系统要对这些设备作完整的支持,设备也必须符合 USB 规范中的要求。随着 USB 技术的发展, USB 系统中的一些不足也逐渐被承认, OTG

2022-03-11 16:04:10 18563 3

原创 UBI文件系统分析

UBI文件系统引言什么是UBIFS文件系统UBIFS是UBI file system的简称,用于裸的flash设备,作为jffs2的后继文件系统之一。UBIFS通过UBI子系统处理与MTD设备之间动作。UBIFS文件系统更适合MLCNAND FLASH。需要注意的是UBIFS并不是为SSD,MMC,SD,Compact Flash等之类的基于flash的存储设备,其是针对于裸flash设备。裸flash有以下特点:l 其包含的块被称为可擦除块,而对于SSD这类的设备,并无可擦除块的概念,取而代之

2021-09-02 11:15:15 4259

原创 基于单片机的差分升级

研究了几天发现不算困难。首先要了解一点就是,差分包的制作由 “差分算法” 计算 “diff” (差分后的数据) 然后根据 “压缩算法” 进行压缩,压缩后的数据文件即为 “patch” 即差分包。因为差分算法有开源的bsdiff,压缩算法也有开源的单片机就能用的,把这两个结合起来放单片机里就可以实现差分升级。由于上位机负责进行差分和压缩的操作,而上位机没有ram的限制,可以随意。因此只要解压缩和解差分在单片机中实现就可以了。如下图,对整个Flash分成3个区域。boot区:用于存放引导程序和解压,解差

2021-04-20 15:20:38 2675 8

原创 ucosiii输出CPU利用率和堆栈利用率

代码如下 需要开启统计任务并把OS_CFG_DBG_EN 置一效果如下:void CPUUsage (void){#if OS_CFG_DBG_EN > 0 CPU_STK_SIZE free; CPU_STK_SIZE used; OS_ERR err; CPU_SR cpu_sr = 0u; OS_TCB *p_tcb; CPU_CRITICAL_ENTER(); p_tcb = OSTaskDbgListPtr; CPU_CRITICAL_EXIT(); print

2020-12-21 15:35:16 1038 8

原创 基于内存池的动态内存分配(malloc)

源代码是原子哥的内存池动态内存分配,实际使用中发现分配速度不够快,因此优化了一下分配算法。在malloc.c中有两种分配的方式,屏蔽的那种在原子哥原有的基础上增加了内存块大小占用区直接跳过,这样遇到大块内存占用块可以一下子节约很多for循环的次数,很好理解,但是缺点是如果中间存在多个未利用区域也会浪费for循环的次数。第二种方式是先计算出需求的内存块大小,然后直接去找对应大小的块,往后推是否为全空。如果不全空,则在那个不空的基础上在向前偏移相应大小,依次计算,这种方法会比第一种更快的找出需求内存块。举

2020-12-21 14:33:20 626

原创 学习在单片机上使用C++(移植uCOSII)

移植uCOSII没什么难度,而且我使用的版本V2.92.08直接支持C++的扩展C声明,省了很多事。使用的开发板为复旦微(国产)FM33G048(M0+)实现的功能也很简单,点灯,和串口透传数据给NB模块Uart0接电脑波特率115200,然后通过Uart1转给NB模块(MN316,也是国产的,便宜),实现自动连接OneNet平台,并自动解析数据。新手代码写的可能不咋样,相互学习添加链接描述链接:https://pan.baidu.com/s/1zWxwJJgr8mZD0fFJTgsUHQ提取

2020-08-14 09:41:01 653

原创 Boot固化部分API函数

因为我现在使用的单片机使用了大量原厂提供的库函数和标准初始化例程,而这一部分例程很大程度上都是通用的,而且无论是在boot里还是APP1还是APP2都要调用这部分程序,那为什么不将这部分共用的程序都放在同一片FLASH里,通过某种方式统一调用呢?而实现这种方法的方式其实非常简单就是使用函数指针,只要函数指针指能够向对应API所在Flash的地址,就能实现相应的功能。具体方法如下:在boot中的某个位置固定好函数映射的地址表,然后再APP中调用/*boot中使用*/#if ThisBoot==1/*

2020-08-12 10:16:04 401

原创 学习在单片机上使用C++

编程环境为Keil,使用的单片机为FM33G048(m0+)工程需要如下配置,不要勾选MicroLIB建立好工程后,将全部的库函数改成xxx.cpp(其实不改应该也没事,库函数调用的xxx.h里已添加下列关键字)#ifdef __cplusplusextern "C" {#endif/*代码部分*/#ifdef __cplusplus}#endif然后将全部中断拿出来建立 it.cpp和it.h,并在it.h中按照上面的代码方式声明一下#ifndef __FM33G0XX_

2020-08-12 09:45:25 1828

单片机可用的差分升级及其算法(含上位机差分软件).7z

单片机可用的差分升级及其算法,在WinFormsApp1/bin/Debug/netcoreapp3.1是上位机软件,提供源码,可以自行修改,内部有协议

2021-04-26

几种能用于小ram单片机的压缩算法.7z

能用于小ram单片机的压缩算法,都用vscode跑通了,其中gzip需要ram太大没在单片机上运行,其他几种都运行过,都好用

2021-04-26

bsdiff差分算法最新版.7z

bsdiff差分算法最新版,能够实现在下位机中差分升级的开源算法,在git上也能下载到。

2021-04-26

FR6972_BootLoader_v1.05(远程升级).7z

自己写的基于MSP430FR6972的bootloader,支持远程升级。使用的编译环境为IAR6.5,通讯协议就不发了,反正看程序都能看出个大概,仅供参考。

2020-08-14

UCOS的相关学习资料和在官网下载的ucosii最新版的支持M0和M3核的代码

/*UCOS的相关学习资料和在官网下载的ucosii最新版的支持M0和M3核的代码。学习资料包括几个例程,和详细的移植方法以及对应的ucos学习资料*/

2020-08-14

空空如也

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

TA关注的人

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