自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (7)
  • 收藏
  • 关注

原创 前言,聊一聊想法

好久没有写博客了,距离上一次写博客已经有两年了。最近两年发生了好多事,自己的计划也是变了又变。两年前的想法是趁着大三学点技术搞嵌入式,一毕业就工作。可后来意外发现自己有保研的机会,于是就选择了继续读研。在大学后期又开始学深度学习,想搞深度学习。如今到深圳读研已经半年了,又遇到一些事情。身边做图像和NLP的都挺多的,再加上一些暂时不能说的小秘密,我准备搞深度强化学习。萌生继续写博客的想法是在今天上午...

2017-02-03 11:43:57 238

原创 关于游戏项目管理

1. 一个游戏是如何被开发出来的:从立项到Beta,游戏开发全流程解析2. 博客园 游戏开发流程(18篇)3. 实战游戏项目管理3.1 实战游戏项目管理——规划篇3.2 实战游戏项目管理——计划篇3.3 实战游戏项目管理-执行篇3.4 实战游戏项目管理-线上管理篇3.5 实战游戏项目管理-配置管理篇4. 游戏研发项目管理-浅谈5. 游戏开发入门(十二)游戏开发全总结6. 游...

2019-07-11 18:44:51 687

原创 Python批量修改word文档的格式,并转换成pdf

昨天女朋友告诉我她遇到了一个比较复杂的难题,需要对七十多篇文档统一改格式,改的很简单就是文件太多,然后保存为pdf,每个文档都有好多页,可能手动改得改一天。听了之后,我突然萌生了给写个程序帮她改的想法。说干就干。后面会把程序贴出来,并记录下遇到的问题。首先是导入模块:import win32comfrom win32com.client import Dispatchimport g...

2019-03-07 14:05:29 3524

原创 DM9000C的驱动移植

mini2440使用的网卡是DM9000,因此这个实验无法用mini2440来实现。所以这一节没有把改好的驱动程序编入内核,只是说明理论部分。首先思考一下,两个不同设备上如果用同一种网卡,用法如何不同呢?简单的来说有三点:基地址、位宽和中断引脚。因此,想要移植一个网卡驱动,一般来说,我们只需要在厂家提供的驱动里修改这三个参数就行。在入口函数里加上:iobase =(int)ioremap(0x200

2017-03-03 13:41:23 816

原创 网卡驱动程序的框架以及一个简单的虚拟网卡驱动程序

在Linux系统中的驱动程序分为三大类:字符设备、块设备和网络设备。网络设备采用socket编程,并不需要打开什么设备。网络设备驱动程序中分为很多层,最下面的一层是与硬件相关的,也是我们所关心的,其它层都是纯软件的概念,与协议相关。最下面的一层只需要实现两个功能:实现收和发送数据。网卡驱动程序框架:app: socket--------------------------------------

2017-02-28 22:16:52 402

原创 NOR FLASH驱动程序

NOR FLASH可以像内存一样读,但不能像内存一样写。NOR FLASH的烧写需要发送某些特定的序列。NAND FLASH和NOR FLASH的区别是什么呢?如下图 下面通过uboot体验一下对NOR FLASH的操作。先把开发板设为NOR启动,进入UBOOT。 每一款NOR FLASH的手册上都有命令的列表: 1. 读数据md.b 0 2. 读IDNOR手册上:往地址555H写A

2017-02-21 17:58:23 777

原创 NAND FLASH驱动程序

NAND FLASH是一个存储芯片,下面围绕NAND FLASH提出几个问题。问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址? 答1.在DATA0~DATA7上既传输数据,又传输地址,当ALE为高电平时传输的是地址。问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令,怎么传入命令? 答2.在DATA0~DATA7上既传输数据,又

2017-02-20 21:28:51 681

原创 块设备驱动程序的引入和简单应用

先说说为什么要引入块设备驱动程序。 以FLASH为例,如果对flash的读写采用字符设备驱动程序的那一套的话,会产生效率低下的问题。flash是以块为单位进行操作的,假如在flash一个块中,要完成对扇区0和扇区1的改写,如果按照字符设备的方式,需要完成以下步骤: ①读出整个块到buffer ②修改buffer的扇区0 ③擦除整个块 ④烧写整块 ⑤读出整个块到buffer ⑥修改buf

2017-02-18 13:39:12 434

原创 USB驱动程序

先提出一个现象:把USB设备接到PC 1. 右下角弹出”发现android phone” 2. 跳出一个对话框,提示你安装驱动程序问1. 既然还没有”驱动程序”,为何能知道是”android phone” 答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是”总线驱动程序”知道你是”android phone”,提示你安装的是”设备驱动程序”问2. USB设备种类非常多,

2017-02-16 17:51:45 740

原创 触摸屏驱动

触摸屏驱动是用输入子系统那一套实现的。 先介绍一下电阻触摸屏的原理。触摸屏巧妙的使用了欧姆定律,根据分压原理,根据电阻的大小再得到电压的大小,再通过adc输出数字量。如下图: 要注意,LCD和触摸屏是完全不同的东西,它们只是恰好大小相同,恰好放在一起。触摸屏得到的只是电压的大小,与LCD的坐标完全没有关系。至于触摸屏和LCD如何建立联系,稍后会介绍。可以先想像一下触摸屏的使用过程: ①按下

2017-02-11 21:55:27 309

原创 LCD驱动之编写代码

我使用的开发板是mini2440,所以有些步骤可能不同。首先先写出一个框架,包括入口函数、出口函数以及修饰。只写函数声明就可以了,代码稍后一步一步填上去。函数的大部分功能实现都在入口init函数中,可以确定构造这个函数需要完成: 1. 分配一个fb_info结构体 2. 设置 3. 硬件相关的操作 4. 注册首先是分配分配一个fb_info结构体s3c_lcd = framebuffer_a

2017-02-10 17:11:39 674

原创 LCD驱动程序之层次分析与硬件原理

内核中自带的LCD驱动程序在drivers/video/fbmem.c,它是一个抽象性的框架程序,并不是一个具体的驱动,它依赖于底层的某个驱动程序提供注册一个fb_info结构体。fb的意思是framebuffer.首先假设,应用程序调用了open(“/dev/fb0”, …),主设备号是29,次设备号是0,经过层层调用,会调用到file_operations里的open函数。在fb_open函数里

2017-02-08 20:18:04 534

原创 驱动分层/分离,总线驱动设备模型

先介绍一下驱动的分层/分离。如下图 input.c为应用程序提供了接口,是核心层,而在核心层下面的那一层由两方面组成,一个是纯软件的,里面是很稳定的代码,还有一个是与硬件相关的代码,一般只需要通过修改与硬件相关的代码而达到我们的目的。再介绍一个概念,总线-驱动-设备模型。如下图 bus、driver、device实际上都只是一个结构体。 左边的device是与硬件相关的代码,实现下面的功能

2017-02-08 16:53:28 392

原创 基于输入子系统框架的驱动程序的具体实现

进入正文之前,先说明一下,驱动的名字跟入口函数无关,只跟.c文件的名字有关。怎么写符合输入子系统框架的驱动程序? 1. 注册一个input_dev结构体 2. 设置 3. 注册 4. 硬件相关的代码,比如在中断服务程序里上报事件我们可以把上述四个步骤都写到入口函数中。 input_dev结构体是一个很重要的东西struct input_dev { void *private;

2017-02-07 22:23:54 201

原创 输入子系统的框架

先说一下为什么要引入输入子系统这个概念。以按键驱动程序为例,这个驱动程序无法用于别人写的现成的应用程序,比如QT,因为其他的应用程序肯定不会打开/dev/button,而是会可能打开现成的设备,比如/dev/tty,甚至不打开设备,直接使用scanf()就可以获取按键的输入。因此,按照以前的思路写出来的应用程序,只能自己用。若是想写出一个通用的驱动程序,将现成的应用程序无缝移植到你的单板上,那就需要

2017-02-07 16:39:01 249

原创 通过定时器完成防抖动的总结

由于按键是机械按键,里面的金属弹片在按下或松开的时候会发生抖动,在这样的条件下按下一次就有可能发生多次中断,为了解决这个问题,我们应该添加防抖动。我们可以用定时器实现防抖动。假如按下一次产生了多次中断,那么在第一次中断产生之后,调用中断处理函数,在这里面设置10ms之后执行某一个操作,下次中断再来,由于是同一个定时器,定时器的值会清空然后再设置10ms之后执行那个操作,以此类推,直到最后一个中断到来

2017-02-05 16:33:09 1188

原创 同步、互斥 阻塞与非阻塞

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。下面说一下如何实现同步。 先提出一个方法,也是很容易想到的,那就是增加一个信

2017-02-05 15:55:27 415

原创 异步通知机制的总结

异步通知机制可以达到这样一个效果:应用程序不用主动查询,而是当事件发生时,驱动程序主动给应用程序发信号,然后应用程序再进行处理。要实现这一个目的,需要解决以下几个问题: ①注册信号处理函数 ②谁发? ③发给谁? ④怎么发?先贴出应用程序:int fd;void my_signal_fun(int signum) { unsigned char key_values; r

2017-02-05 14:44:37 1224

原创 poll机制的总结

poll机制就是给定一段时间,在这一段时间内程序处于睡眠状态一直等待某一个资源,它会在两种情况下返回①时间到了②等到了资源。驱动程序的实现并不复杂,但原理有待分析。首先要在file_operation里添加.poll = forth_drv_poll,然后unsigned int forth_drv_poll(struct file *file,poll_table *wa

2017-02-04 17:24:43 7226

原创 中断方式获取按键值

先总结一下中断的处理过程:/首先要着重强调一点,irq_desc这个结构体很重要/在trap_init()中,完成对异常向量的复制,Linux中是复制到0xffff0000。当发生异常时,CPU会自动跳转到这里,再跳转到执行更复杂的代码,比如调用异常处理函数。 当执行中断处理函数时,会首先调用asm_do_IRQ(),同时会传入中断号irq,然后根据中断号调用irq_desc[irq],这是一个结

2017-02-04 15:38:36 1024

原创 按键驱动程序之查询方式的总结

按键驱动程序和led驱动程序相似,框架都是一样的。file_operations中定义 static struct file_operations second_drv_fops = { .owner = THIS_MODULE, .open = second_drv_open, .read = second_drv_read, };而这个程序

2017-02-03 16:56:53 540

原创 led驱动程序的总结

框架基本上已经搭好了,需要补充的就是硬件相关的操作了。想要操作GPIO,肯定要配置寄存器。看原理图可知,当输出低电平时,led会发光。led分别接在GPIOB的5、6、7pin上。所以需要配置的寄存器是gpbcon和gpbdat。因此定义:volatile unsigned int gpbcon =NULL;volatile unsigned long *gpbdat = NULL;与裸板程序不同,

2017-02-03 15:35:20 380

原创 一个简单的驱动程序的框架总结

在一个驱动程序中,首先要实现open和write,因此有: first_drv_open()和first_drv_write () 那如何告诉内核我有这两个函数呢,那就需要一个file_operations结构体 static struct file_operations first_drv_fops = { .owner = THIS_MODULE, .open

2017-02-03 14:50:40 1187

原创 回忆第一期

这是第一篇正式的内容。在第一期中,使用的是韦老师的uboot,内核,文件系统,于是我遇到的第一个问题就是如何烧写。韦老师的视频是基于jz2440讲解的,同时提供了mini2440和tq2440的代码,最后我在淘宝买了mini2440。买的时候想的很简单,觉得随便在网下就可以下载到mini2440的相关资料,也正是因为这个想法,使我浪费了大概一个星期的时间。韦老师的视频时间很早,大概是09年

2017-02-03 12:58:40 216

onnx-tensorflow-master.zip

Tensorflow转onnx, onnx官方github上有提供转换的方式,地址为https://github.com/onnx/tutorials/blob/master/tutorials/OnnxTensorflowExport.ipynb

2020-09-08

EasyPusher-Demo-v1.1.17.0829.zip

EasyPusher是EasyDarwin开源流媒体团队成员Gavin & Holo开发的一个推送流媒体音/视频流给开源流媒体服务器EasyDarwin的标准RTSP/RTP协议推送库

2020-09-08

cmder_mini.zip

Cmder则不会,并且Cmder可以分屏多开窗口,可以设置窗口颜色,字体大小,并且很多快捷键和谷歌浏览器操作类似,等等很多功能。

2020-09-08

keeweb-0.6.1.tar.gz

KeePass是一款密码管理工具.它能帮你记住电子邮件,主页FTP,上网,论坛等用户名和密码,而免去了你众多的烦恼,节省了时间.它把密码保存在高度加密的数据库中,不能让其他人和其他应用程序所识别

2020-09-08

EasyDarwin-master.zip

EasyDarwin是基于Darwin Streaming Server扩展、维护的开源流媒体服务器解决方案,高效易用,有直播、点播、服务器端录像、回放、RTP Over HTTP等多种功能

2020-09-08

live555-master.zip

Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。

2020-09-08

TriLib - Model loader package 1.9.0b - Hotfix.7z

Trilib1.9 Unity AssetsStore的最高版本,可以动态加载40+种模型资源,需要的可以下载

2020-09-05

空空如也

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

TA关注的人

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