- 博客(17)
- 资源 (5)
- 收藏
- 关注
原创 无锁多线程控制基本模型
介绍了无锁环境下编程的多线程控制模型,采用原子变量控制的无锁环境下每个线程均不会阻塞。常见的模型有 读-修改-写 和 状态机。
2022-10-04 20:54:36
582
原创 一个Json解析库的设计和实现
本文依照编译原理基本思想构建了一个Json解析库,包括词法分析、语法分析、树型优化和Json树生成等部分。具有参考意义。
2022-04-05 15:21:46
1405
原创 CRC查表法运算原理
CRC校验是依据多项式模2运算进行的,这里有两点:1. 一个二进制串总可以表示为多项式,例如:10101 表示为10111 表示为,依次类推更长数据的表示方法。2. 模2运算的基本规则如下:加法:0+0=0 1+0=1 0+1=1 1+1=0 不进位减法:0-0=0 0-1=1 1-0=1 1-1=0 不借位模2加减运算与二进制异或运算相同乘法:依据多项式模2加法算得除法:依据多项式模2减法算得多项式模2运算满足分配律和结合律:已知多项式 则...
2021-05-16 14:38:39
13717
8
原创 C++模板推断函数类型
借助模板特例化和偏特化可以完成函数返回类型、输入参数类型的推断。我们直接步入主题: 首先预热编译器对偏特化的类型匹配。C++模板库中,std::is_same可判断两个类型是否相同,这里我们可以借助偏特化自己实现一个is_same模板:template<typename T,typename U>class is_same{public: static constexpr bool value = false;};template<typenam...
2020-09-20 22:21:57
1490
原创 解析kernel 2.6.24使用NMI中断对Hard lock的处理
本文针对x86架构linux kernel检测hard lock的方法进行了分析。基于kernel2.6.24源码解析了从NMI中断触发到oops发生的处理流程。其使用时钟计数器判断是否发生hard lock。
2020-03-08 14:55:23
1845
1
原创 Linux kernel打印栈信息方法
在kernel代码的任意位置直接调用dump_stack方法即可。dump_stack已经包含在内核符号表中,并在include/linux/kernel.h中被声明。获取栈信息的原理是使用ebp逐层回溯。dump_stack函数在arch/x86/kernel/traps_32.c中定义(kernel 2.6.24)如下:/* * The architecture-inde...
2019-10-20 22:03:00
4309
原创 搭建Linux kernel调试环境-busybox构建最小根文件系统
调试Linux kernel时经常使用printk将信息打印到内核消息ring buffer中,为了方便查看内核相关Log,并减少不必要的干扰,有必要构建一个小型根文件系统,在该系统内进行模块加载、Log查看、状态监控等kernel调试。busybox是一个功能完备的Linux命令行工具集,又可作为init进程配置文件系统,在嵌入式系统中应用广泛。本文记录了使用busybox构建简易...
2019-09-11 01:46:12
2478
原创 使用VS Code调试Android C++代码
本文可以转载,请注明来源:https://blog.youkuaiyun.com/zhaojia92Android系统源码自带调试脚本gdbclient.py可调试HAL层和Native程序,该工具免除了手动配置gdb的麻烦。gdbclient.py底层调用adb与手机建立连接,调用linux gdb远程连接手机端的gdbserver进行调试;由于是在字符界面调试,有时会对查看和阅读上下文代码造成不便,a...
2019-08-20 00:29:20
13233
6
原创 Android HAL层/native C程序打印栈信息方法
在调试Android系统底层函数时,经常需要跟踪函数调用流程,特别在HAL层需要确定参数来源时。使用栈信息逆向跟踪可快速分析函数调用流程,结合使用addr2line工具、绘图工具可绘制函数关系图。本文记录在Android S 上打印C/C++函数栈信息的方法,并给出了CallStack使用建议,以作参考。
2019-08-01 00:50:09
7904
4
原创 Visual Studio Code安装和配置V2
随着VS Code功能不断完善,现今版本相比两年前易用性极大提升。之前写的一篇《Visual Studio Code安装和配置》已经过时。本文使用VS Code 1.35.0介绍基本使用方法。 基本环境:VS Code 1.35.0 编译器:MinGW_w64 (GCC8.1.0)一、配置插件 在Windows下安装VS Code比较简单,s...
2019-06-07 16:16:24
5324
1
原创 Linux kernel调试方法--使用qemu+eclipse
此文章为原创,可以转载,请注明来源:https://blog.youkuaiyun.com/zhaojia92 kernel是一个庞大的C工程,传统使用gdb+qemu工具调试,但gdb太过简陋,查看源码不方便。本着效率优先的原则,选择eclipse作为kernel的开发环境,可以更方便修改调试kernel代码。下面给出eclipse+qemu调试kernel代码的方法。一....
2019-02-17 16:33:26
2212
原创 CentOS7搭建ftp服务器实现匿名上传下载
CentOS7内搭建ftp服务器使用系统自带vsftpd服务。首先查看是否安装了vsftpd组件: vsftpd服务已经安装,其相关配置文件位于/etc/vsftpd目录下,其主要配置文件是vsftpd.conf。vsftpd.conf文件默认支持匿名登陆,默认登陆文件夹为/var/ftp/pub。修改vsftpd.conf可更改登陆方式。将vsftpd.conf修改为如下标红内容...
2018-03-10 22:16:16
16985
5
原创 Visual Studio Code安装和配置
Visual Studio Code编辑器在Windows上安装比较简单,直接setup.exe。安装好后首次启动配置插件,插件配置必须联网,从网上下载。如下图点击左侧扩展:首次安装会推荐一些常用插件。如果没有显示推荐的插件,点击左侧右上角的三个点按钮,会弹出列表,根据相应类别显示插件。想要安装插件,直接点击插进右侧的安装。VS Code自动下载并安装。安装位置在Windo
2016-12-24 21:55:41
83669
5
原创 STL源码剖析中rotate算法的说明
在《STL源码剖析》中,对于rotate算法没有很好地解释,__rotate_cycle是如何发挥作用的,其中很值得研究。SGI STL的rotate函数是将一个序列[first,last)的前半部分[first,middle)和后半部分[middle,last)进行调换。整个算法分为3种不同实现。对于书中所说的最后一种算法,本质就是序列的循环移位。
2016-12-24 20:24:44
960
原创 C++中函数传递数组的探索
一、传入数组 一个C函数可以把数组作为形参,在C++具体表现形式有三种:void func(int para[]);void func(int para[20]);void func(int *para);这三种形式虽然表现不同,在C++中都看成相同的,等价于void func(int *para)。在传递实参时,数组名被隐式转换成指向数组第一个元素的指
2016-03-04 21:44:12
3754
原创 内存中读取bmp图片转换为IplImage格式
bmp转换为IplImage格式较为简单,易于实现,不需要压缩算法。对于从内存中读取bmp文件,只要处理好文件头和信息头,就能够正确转换,代码量小。本文实现了从内存中读取bmp图片转换为IplImage格式的过程。经测试效果良好。
2016-01-09 19:14:06
3063
1
多核编程实战
2016-01-07
C++代码设计与重用
2015-09-03
BCD启动编辑器
2015-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人