- 博客(7)
- 收藏
- 关注
原创 内存工具Asan原理与使用
默认情况下分为53个class,每个class对应着分配不同大小的内存块class idsizediffc000+0c0116+16cn116*n1+16c16256+16c17320+64cn2c52131072+16384在申请256字节以下的内存时,粒度比较小,每16个字节都有一个对应的class,比如要申请10字节,实际会申请32(16个字节为内存块信息 + 10字节用户内存 + 6 字节对齐)字节对应class2。
2024-08-10 16:05:10
1564
1
原创 libevent HTTP server源码详解 以及TCP server 编写
最近在项目中设备需要作为http服务端,这里采用了libevent,来分析一下其源码,先提供示例程序int main(int argc, char **argv){ struct evhttp *http_server = NULL; short http_port = 8081; char *http_addr = "0.0.0.0"; event_init(); //事件初始化 http_server = evhttp_start(http...
2021-06-30 15:22:23
846
原创 Linux源码解析——可执行文件从生成到加载
首先我们拿一个很简单的程序test1.c为例#include"test1.h"//#include<stdio.h>int del(){ return 0;}int main(void){ int a = DIV; const char* p =(char*)del; // printf("del 0x%lx\n",(u_int64_t)p); while(1); return 0;} 将这么一个程序编译成可执...
2021-04-13 18:30:14
428
原创 ISO14443A读卡流程
RFID有很多种协议,我们这里要讲的是ISO/IEC14443A。 读卡流程我们可以从两个角度进行分析,一个是读卡器(PCD),另一个是卡片(PICC) 上述是卡片状态变化图(参考《射频卡协议ISO14443》)POWER OFF : 卡片缺少载波能量,简单的说卡片没有进入到天线发射的范围内。在有足够多能量后,卡片就会进入...
2020-04-14 16:59:24
9572
1
原创 Arm Linux 内存管理(一)————开启MMU
首先我们根据vmlinux.lds可以找到内核入口函数为stext,我们就直接从stext开始,主要干了几件事情1.safe_svcmode_maskall r9 //设置CPU运行模式为SVC,并关中断 2.bl __vet_atags //验证atags或者dtb是否有效 3.bl __create_page_tables ...
2020-04-08 16:00:03
1692
原创 Linux驱动 I2C总线
这里以rk3288为例子,使用的是linux4.14,根据设备树节点i2c与rk3x_i2c_driver,match之后,就会调用对应的probe(rk3x_i2c_probe),这里主要就是注册一个adapt(i2c_add_adapter),也就是i2c控制器,或者说是i2c主设备,既然是主设备,就需要提供读写的能力,以及SCL的时钟:1.i2c->adap....
2020-03-31 16:35:46
497
原创 基于Freertos Heap4的Realloc的编写
由于发现FreeRTOS(v9.0.0)中并没有对realloc进行支持,所以就自己写了pvPortRealloc函数。 首先先谈谈Heap4内存管理机制,由xStart为头结点,pxEnd为尾节点构成的一条链表。用来描述ucheap数组中尚未分配的地址块。这些地址块按照地址从小到大插入到链表中。 当使用pvPortMalloc 申请N个字节数据时,首先会...
2018-10-26 16:13:40
3894
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人