自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 [语音识别]为什么矩形窗会造成泄漏?以及什么是泄漏?

语音识别特征提取时为什么要加窗

2022-08-06 21:51:04 662

原创 浅析错误:software IO TLB: coherent allocation failed for device

问题背景:i2c controller 在 probe 的时候,使用 dma_alloc_coherent 申请一块可持续使用的 dma 传输 buffer。平台使用 DRAM 大小为 6GB,未出现错误。平台 DRAM 大小从 6GB 扩展到 8GB,dma_alloc_coherent 报错:"software IO TLB: coherent allocation failed for device"。调查结果:简单的原因是,当设定dma_set_mask(&pdev-&g..

2021-05-10 15:08:54 939

原创 *(unsigned int *)(a) = (v)

问:*(unsigned int *)(a) = (v) 的作用是什么?答:地址a之后的sizeof(unsigned int)个字节的内存赋值为v。更改指针类型,就是更改指针所能操作的内存单位长度,(unsigned int *)(a)意思就是只能操作a指向的4个字节的长度内存。...

2021-02-24 14:55:36 3800 1

原创 关于 device tree

1.status = "okay",没有status 属性会解析,如果有,必须是"okay" 或者 "ok"才会解析。参考__of_device_is_available函数

2021-01-16 10:40:41 142

原创 系统调用的过程

1.用户层可调用的系统调用接口函数中内嵌了一段汇编代码,调用了0x80号中断,并将一些参数保存在eax等寄存器中2.CPU去IDT表格中查找0x80号中断对应的中断处理程序system_call(硬件行为),system_all所在的内存段的CPL置为0,而DPL置为33.CPU检查当前代码段的CPL和system_call的DPL,由于当前代码段CPL=3且system_call的DPL也特意被设置为了3,所以可以调用。4.在系统调用函数system_call中,先从eax寄存器中获取到了系统调用号

2020-09-15 14:24:35 797

原创 最原始基本的CPU函数调用过程概念

assume cs:codecode segment start: mov ax,1 mov cx,3 call s mov bx,ax mov ax,4c00h int 21h s: add ax,ax loop s retcode endsend start1.CPU将call s 指令的机器码读入,IP 指向 call s之后的指令 mov bx,ax,然后CPU执行call s指令,将当前IP值(指令 mov bx,ax的地址)压栈,并.

2020-09-11 16:25:04 407

原创 内存只是磁盘中虚拟内存空间的的缓存

问题是什么,你才能找答案:程序放入内存,形成进程,分配段,形成段表,分配页,形成页表。(思考问题:1.磁盘在整个过程起到什么作用)先分段:程序的bss等段,映射到0~4G的虚拟内存段中(建段表)。在分页:虚拟内存的每个段映射到物理内存的页框(建页表)。使用内存。...

2020-05-12 16:03:07 350

原创 【计算机科学速成课】[40集全/精校] - Crash Course Computer Science

【计算机科学速成课】[40集全/精校] - Crash Course Computer Science好的事物永远不会消失,这个视频对理解计算机底层很有帮助。

2020-04-06 11:41:46 948

转载 解析C程序的内部机制(转)

1.几条汇编指令_bl_add_sub_ldm_stm⑥ADD/SUB 加法/减法举例1:add r0,r1,#4 效果为r0=r1+4;举例2:sub r0,r1,#4 效果为r0=r1-4;举例3:sub r0,r1,r2效果为r0=r1-r2;⑦BL (Brarch and L...

2020-04-04 21:12:38 307

转载 C语言在ARM中函数调用时,栈是如何变化的?(转)

做系统分析的话你肯定遇到过一些crash, oops等棘手问题,一般大家都会用 gdb, objdump 或者 addr2line等工具分析 pc 位置来定位出错的地方。但是这些分析工具背后的本质原理就不见得理解深刻了,而且有的时候面对一系列 backtrace 或者 stack 日志处于懵逼的状态。今天和大家一起看下面对 crash 日志的时候,如何利用 stack 来分析其变化的来龙去脉。...

2020-04-04 20:58:29 647

转载 Linux内核地址空间的内存分布及分配(转)

虚拟地址空间0~3G用于应用层虚拟地址空间3~4G用于内核层内核又将3~4G的虚拟地址空间,划分为如下几个部分:896MB又可以细分为ZONE_DMA和ZONE_NORMAL区域。低端内存(ZONE_DMA):3G-3G+16M 用于DMA __pa线性映射普通内存(ZONE_NORMAL):3G+16M-3G+896M __pa线性映射 (若物理内存<896M,则...

2020-02-11 16:44:59 539

原创 物理内存低于4g如何内存管理(使用分页机制):

每个进程都拥有4G(2的32次方)的虚拟地址空间。在实际编程过程中,指针中存放的地址也都是32位的线性地址(虚拟地址),经过页目录、页表等分页机制变换以后可以得到真正的物理地址,而这个物理地址也是32位的。对于32位的CPU来说没有任何问题,因为它的地址总线是32位的,寻址空间也就是2的32次方(4G)。那么问题就出来了:CPU的寻址空间是2的32次方(4G),程序要访问的物理地址(线性地址经过分...

2020-02-11 16:33:25 362

原创 ioremap的使用

void __iomem *base_gpio;base_gpio = ioremap(0x11000000, 0xf); //从0x11000000映射 0xf 个字节readl(base_gpio); //读寄存器的值writel(0xff, base_gpio); //往0x11000000写0xffiounmap(base_gpio); //释放映射...

2019-11-19 14:07:13 586

原创 BUG: scheduling while atomic 分析 and 为什么中断不能睡眠

遇到一个BUG: scheduling while atomic: kworker/0:2/370/0x00000002;看了这篇文章BUG: scheduling while atomic 分析,是因为在原子操作上下文或者中断上下文进行了调度引起的。先看下为什么会打印出这句:schedule() -> __schedule() -> schedule_debug()s...

2019-07-17 17:14:28 3851

原创 linux 驱动设备和 dts 匹配过程

linux 设备驱动文件在与 dts 中的设备板级硬件信息匹配的关键字是 compatible 属性。即比较驱动文件中 of_device_id 结构体元素的 .compatible 成员变量和 dts 文件中 node 中 compatible 属性两个字符串。Rationale:linux 启动从 lk jump 到 kernel 之后    函数调用的深度比较深所以图比较长,...

2019-01-07 23:13:08 8053

转载 Linux 总线、设备、驱动模型的探究

文章转载自:https://mp.weixin.qq.com/s?__biz=MzIxMjE1MzU4OA%3D%3D&amp;mid=2648918733&amp;idx=1&amp;sn=27e9c64b03c6dab26400f9613c514769&amp;scene=45#wechat_redirect设备驱动模型的需求总线、设备和驱动模型,如果把它们之间的关系比喻成生活中的例子...

2019-01-06 20:27:14 655

原创 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记

先讲一对时态:现在完成时和过去时。这个我以前一直用不好,特别是口语,速度快了不过脑子就讲错了。以前我就记有没有“了”,如果有就用完成时,没有就用过去时。然而大错特错,比如我昨晚看过那个电影了和我看过那个电影了,都有“了”,这特么就蒙蔽了。其实关键点在于你所表达的动作是时间段还是具体的时间点,如果有具体的时间点就用过去时,时间段的话就用完成时。比如“我昨晚看过那个电影了”和“我看过那个电影了”...

2018-11-05 20:57:40 4017

转载 C++线程池原理及创建

本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。为什么需要线程池       目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服...

2018-09-18 21:47:07 499

原创 一种 c++ 线程池模型

这个库据说是从腾讯系公司流传的,不得而知。每天写业务逻辑,没有对逻辑之外的架构进行深入理解,闲下来还是得整理,不然怎么成为架构师呢?下面是类图:(类图和流程图画在了一起有点乱)CWorkThread 是继承自 CThreadBase 的线程类,在这个类里面 treadcallback 线程回调里只要实现业务逻辑即可。 模型严格意义上不是个线程池,实际在用的时候是当做多线程处理多个客...

2018-09-18 15:56:10 548

原创 适合理工直男的钟平老师逻辑英语学习笔记

一切的一切都只是套路!             ——鲁迅核心公式:En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1)Ch: (状语1) (定语1)主 (状语2)谓 (定语2)(宾) (状语1)主谓宾的位置是不变的,变化的是将修饰主语和宾语的定语提到前面,将修饰谓语的状语提到谓语之前。状语1是指一些被分开的状语,比如 at last week,b...

2018-08-21 23:06:41 32978 4

原创 pymongo 密码登陆问题

之前开发环境 mongodb 是不加密的,但是为了安全现在加了密。加密之后, python 脚本验证就出了错,老是报 pymongo.errors.OperationFailure: command SON([('authenticate', 1), ('user', u'root'), ('nonce', u'd241d9ac68d60c23'), ('key', u'faf58ba5fa...

2018-07-30 19:31:52 4995

原创 linux 不常用命令收集

查看每个目录所占磁盘空间 du -sh ./解释:du 命令用来查看目录或文件所占用磁盘空间的大小选项:       -h:以人类可读的方式显示  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和...

2018-07-28 15:19:52 164

原创 同步 IO 、异步 IO、阻塞、非阻塞的区别

同步对应异步,阻塞对应非阻塞,两对概念的根本区别在于:所修饰的对象不同。阻塞和非阻塞是指进程访问的数据尚未准备就绪,进程是否要等待,还是直接返回。同步异步是指访问数据的机制。同步是指主动请求并等待 IO 操作完毕的方式,当数据就绪后在读写的时候必须阻塞。异步则是在主动请求数据后开始其他任务随后等待 IO 操作完毕的通知,进程在进行数据读写时不阻塞。拿书上举的例子来说明。你在逛商...

2018-07-22 23:07:56 204

原创 Go语言 defer 和 recover

1.defer 是在函数返回的时候执行的代码段。不管是有无 return 还是 panic,都会执行 defer 里的代码段。2.recover 用于在 defer 代码段里捕捉 panic。当发生 panic 的时候,会执行 defer 代码段,其中如果有 recover,就会捕捉到 panic, 进而用于用户自定义处理,选择如何处理该 panic,可以不理会进而让进程不停止运行,或者让他 pa...

2018-07-15 21:50:58 1409

原创 Go for循环 协程间传递参数的一个问题

map1 := make(map[int]int)for i:=0; i&lt;3; i++{ map1[i] = i+1}fmt.Println(map1)for k, v := range map1{ go func(key, value int){ fmt.Println("one way :", key, " : ", value) }(k, v) go fun...

2018-06-30 21:47:54 7315

原创 Go map的实际类型

map1 := map[int]int{ 2 : 0, }fmt.Println(map1)Test(map1)fmt.Println(map1)map2 := make(map[int]int, 1)map2[1] = 0fmt.Println(map2)Test(map2)fmt.Println(map2)输出:map[2:0]map[1:1 2:0]map[1:0...

2018-06-30 21:21:02 279

原创 Go 语言中切片和数组的区别

func ChangeArray(s [3]string) { s[1] = "bob"}func ChangeSlice(s []string) { s[1] = "bob"}func main() { name := [3]string{"eighty", "don", "jean"} ChangeArray(name) name_s := []string{"eigh.

2018-06-26 22:43:30 369

原创 swig c++ python

最近帮运营用 python 做实时提取玩家数据的脚本。鉴于已有后台的 lua 和 c++ 的 api 相互调用是使用 swig,python 也就直接使用 swig 了。swig 的官网和中文官网:swig 官网 swig 中文网上写的比较好的博客也有:好的博客先说下代码流程://test.cpp#include &lt;iostream&gt;#include "test.h"using ...

2018-04-15 18:40:00 633

原创 C++ 拷贝构造函数

仅当准备用按值传递的方式传递类对象时,才需要拷贝构造函数。就是说按值传递的时候,会调用到拷贝构造函数。验证:#include &lt;iostream&gt;using namespace std;class HowMany{static int countObject;public:HowMany(){ countObject++; cout&lt;...

2018-03-25 23:39:56 140

原创 服务器 Reactor 模式

并发性不是太高服务器程序使用这个模式基本就可以满足。 主线程只负责监听文件描述上是否有事件,如果有就立即将该事件通知到工作线程。读写数据、接受新的连接以及处理客户端的消息都在工作线程。 工作流: 1)主线程往 epoll 内核事件表中注册 socket 上的读就绪事件 2)主线程调用 epoll_wait 等待 socket 上有数据可读 3)当 socket 上有数据可读时, ep...

2018-03-19 21:37:47 386

原创 TCP 状态转移示意

2018-03-16 15:12:54 203

原创 gdb 调试日志

如果用 c++ 作为服务端的编程语言的话,gdb 调试还是要掌握的,可以说是非常方便。gdb 调试的教程网上非常多,而且肥肠详细,只写一下自己遇到的难找的问题。假如 运行程序是 test ,异常的 core 文件是 core.2018gdb testcore core.2018一般情况下整个工程包括多文件,设置指定文件的断点b test.c:2017就是在 test.c 的第2017行设置断点调试...

2018-03-06 17:27:32 2065

原创 关于检测客户端是否断开连接

做了五个月的游戏服务端,发现游戏的后端比其他的要求更高。游戏服务端在运行过程中需要保证连接的实时性,所以要判断客户端连接的实时性,在博客里搜索大概就是三种方案:1.setsockopt 设置 SO_KEEPALIVEint flag = 1;setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,&amp;flag,sizeof(flag));但这个...

2018-03-06 15:08:17 1528 2

原创 [ Linux ][ C++ ] 多用户连接 c/s 模型

看了 socket 编程基本知识之后,一般简单的例子是创建一个客户端一个服务器端,用来接收回复消息。但一般都是一对一的 C/S 模型,那么想要多个客户端去连接,该怎么做呢?

2017-09-17 18:28:42 414

转载 Linux中select IO复用机制

Linux中select IO复用机制

2017-09-14 23:56:34 2121

原创 mtk led子系统概略

前几天老大让我改一下 led 灯的效果,从闪烁模式改成呼吸模式。

2017-09-14 23:51:44 1109

原创 马尔可夫模型日记——如何模拟真正的概率系统

马尔可夫模型,概率

2017-07-16 21:52:27 1670

转载 python 3 下的scrapy安装问题,及运行中的问题

Python3 Scrapy 安装方法scrapy写爬虫是出现no module named win32api错误

2017-06-28 19:21:26 264

原创 linux notify 通知在TP中的应用

通过对tp中代码的分析来解读一下notifier 内核通知链如何应用。

2017-06-07 21:15:02 1158

原创 windows下scrapy 的安装

windows 下安装 Scrapy

2017-06-06 22:42:05 2441

空空如也

空空如也

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

TA关注的人

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