- 博客(51)
- 资源 (2)
- 收藏
- 关注
原创 linux内核源代码的C语言代码
看内核代码时,有些语言成分或者说编程技巧平常没见过更没用过,这里先记下一些:1. 关于保留字前后都加上“__”,比如__inline__,其实等价于inline。C语言支持一些属性描述符,而gcc同样支持不少这样的描述符,这些描述符的使用等于在C语言中增加了一些新的保留字,此时,原来的C语言中这些词可能并不是保留字,一旦老的代码中刚好有变量名与此描述符一样,就会冲突。为了解决这个问题,
2014-06-10 21:38:44
3922
原创 start_kernel()分析(一)
从某种意义上,函数start_kernel就好像一般可执行程序中的主函数main,系统进入这个函数之前已经进行了一些最低限度的初始化,再往前研究就涉及很多硬件相关及编程语言了,这里是较高层次的初始化,基本是C代码,一直想搞清楚内核的初始化流程,好对整个linux内核有更深理解。分析程序习惯性的找main函数,那么就从这个start_kernel看看。 这个函数在init/main.c:a
2014-06-09 22:14:32
10146
原创 砍树
题目图论中的树,是无向无环连通图。n个节点的树,有(n-1)条边。给定一棵树,每个节点都有一个权值。我们允许从这棵树中删掉一条边,把这棵树分成两棵树。每棵小树各自包含的节点的权值和定义为其自身的权值,我们的目标是,使得这两棵小树的权值差距尽可能小。(权值差的绝对值尽可能小。)输入格式多组数据,每组数据第一行是一个正整数n,表示树节点的个数(2第二行是n个空格分隔
2014-06-05 19:04:03
1260
1
原创 AB串
题目:给定n个A和2n个B,用这些字符拼成一个字符串,要求这个串的所有前缀和后缀B的个数始终不少于A。(一个字符串的前缀是只从开头到某个位置为止的子串,后缀是只从某个位置到结尾的子串)。输入格式多组数据,每组数据只有一行,包含一个正整数n。(n输出格式每组数据输出一行,最终结果对99991取余数的结果。分析:简单的想法是建
2014-06-05 18:59:48
2031
转载 linux进程调度
一:Linux进程的四大要素1:一段供进程执行的程序,该程序可以被多个进程执行。2:独立的内核堆栈。3:进程控制快(task_struct:有了这个数据结构,进程才能成为内核调度的一个基本单位接受内核的调度。同时,这个结构还记录着进程所占用的各项资源。4:独立的存储空间:即拥有专有的用户空间,除了前面的内核空间还有用户空间。线程:只有前三条,没有第四条。内核线程:完全没有用
2014-06-04 21:45:34
670
转载 设备模型
对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度,从而有了一种俯视的感觉,就像凤姐俯视知音和故事会,韩峰同志俯视女下属。顾名而思义就知道设备模型是关于设备的模型,既不是任小强们的房模,也不是张导的炮模。对咱们写驱动的和不写驱动的人来说,设备的概念就是总线和与其相连的各种设备了。电脑城的IT工作者都会知道设备是通
2014-06-04 21:42:47
747
原创 GPIO模拟SPI
上次用gpio模拟i2c理解i2c协议,同样的,我用gpio模拟spi来理解spi协议。我用的是4线spi,四线分别是片选、时钟、命令/数据、数据。数据在时钟上升沿传递,数据表示的是数据还是命令由命令/数据线决定。开始条件:void spi_start(void){ gpio_config(GPIO_CS, GPIO_OUTPUT); udelay(SPI_SPEED
2014-05-24 11:04:56
3831
原创 最小向量乘积
题目详情:两个N维向量的点积定义为,对应维度上的数的乘积之和。两个三维向量[1, 3, −5]和[4, −2, −1]的点积是1 * 4 + 3 * (-2) + (-5) * (-1) = 3现在允许我们对两个向量里的维度重新排列,让点积尽可能小。例如上述两个向量,我们可以调整维[3,1,-5]和[-2,-1,4],点积是-27。输入格式:多组
2014-05-22 22:44:45
1215
原创 打牌
题目:一群人想打斗地主和升级。已知他们已经1个、2个、3个或者4个人成为一桌了,现在要把他们全部变成3人一桌或者4人一桌,问至少移动几个人?(要保证所有人都能进行游戏) 输入格式: 多组数据,每组数据一行,包含4个整数a,b,c,d 0实验
2014-05-15 22:54:46
1077
3
原创 交替字符串
题目:如果字符串str3能够由str1和str2中的字符按顺序交替形成,那么称str3为str1和str2的交替字符串。例如str1="abc",str2="def",那么"adbecf", "abcdef", "abdecf", "abcdef", "adefbc"等等都为str1和str2的交替字符串。更形式化的,str3的生成算法如下: str3="" while str1不为空 o
2014-05-12 22:48:22
716
原创 绝对值最大
题目详情:给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0例如:A={1, 4, -3},则:|A[0] + A[0]| = |1 + 1| = 2.|A[0] + A[1]| = |1 + 4| = 5.|A[0] + A[2]| = |1 + (-3)| = 2.|A[1] + A[1]| = |4 + 4
2014-05-11 23:40:06
1041
原创 2的补码
题目详情在计算机中,整数是以2的补码的形式给出的。给出整数A和B,假设计算机是32位机,求从A到B之间的所有二进制数中,一共用了多少个1。输入格式:多组数据,每组数据一行,由两个整数A,B, -2147483648输出格式:每组输出一行,从A到B使用的1的个数。
2014-05-11 21:50:16
1764
原创 I2C驱动实例解析
简单的说,i2c驱动也就三步吧,注册i2c设备,注册i2c设备驱动,创建sysfs文件供上层调用。1. 注册i2c设备。先定义一个i2c_board_infostatic struct i2c_board_info __initdata xxxx_i2c_info[] = { { I2C_BOARD_INFO("XXX
2014-05-05 21:52:19
4363
原创 GPIO模拟I2C
之前在学习I2C驱动,想了想应该先深刻理解下I2C协议。个人觉得理解I2C协议最好的方法就是实践,而最好的实践方式就是用GPIO来模拟I2C协议进行试验,直观深刻。先看下I2C时序图:根据时序图,用两个gpio分别模拟sda和scl即可。在这之前自然需要先对gpio进行输入输出的配置。这里只从写数据角度来描述这一过程。读数据同理即知。先配置gpio,包括sda、scl、供电gp
2014-05-04 22:34:19
6729
原创 1.16 24点游戏
问题:输入:4个数字输出:结果为24的表达式解法一:穷举法#includechar mark[4]={'+','-','*','/'};float cal(float x,float y,int mark){ switch(mark) { case 0:return x+y; case 1:return x-y; case 2:
2013-09-15 21:12:00
997
原创 2.18 数组分割
问题:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。解法:假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] | 1S(k, k) = {A[1]+A[2]+…+A[k]}S(k,
2013-09-14 15:01:21
1459
原创 2.17 数组循环移位
问题:如标题,要求时间复杂度为O(N)。解法:右移k位,前k位逆序,后N-k位逆序,再整个逆序即可。#include #include void reverse(int* array, int b, int e){ int temp = 0; for(; b < e; b++,e--) { temp = array[e];
2013-09-14 13:47:42
770
原创 2.16 求数组中最长递增子序列
问题:如标题,求数组中最长递增子序列。解法一:动态规划#include #include #includeint LIS(int* array, int num){ int* temp = (int *)malloc(num*sizeof(int)); int i = 0; int j = 0; int max = 0; f
2013-09-11 23:36:44
802
原创 2.14 子数组之和的最大值
问题:求数组的子数组之和的最大值解法一:遍历#include #include int MaxSum(int* A, int n){ int maximum = -100; int sum = 0; int i = 0, j = 0, k = 0; for (i = 0; i < n; i++) { for(j
2013-09-08 22:48:38
721
原创 2.10 寻找数组中的最大值和最小值
问题:如标题,寻找数组中的最大值和最小值。解法一:看成两个独立问题,扫描数组,找出最大最小值,需要比较2 * N次。解法二:数组分为两部分,如相邻两个数分在一组,分别进行同组比较,大的放在奇数位,小的放在偶数位,比较奇数位上的数求得最大值,比较偶数位上的数求得最小值。需要比较1.5 * N次。#include #include void getMaxA
2013-09-04 23:03:46
872
原创 2.5 寻找最大的K个数
问题:如题,寻找最大的K个数解法一:全部排序,取最大的K个数。解法二:利用快速排序,取最大K个数。void partition(int input_array[], int number){ //取中间数做比较 int i = (input_array[0] + input_array[number / 2] + input_array[n
2013-09-03 23:07:02
632
原创 3.11 程序改错
问题:二分查找的错误代码:int bisearch(char** arr, int b, int e, char* v){ int minIndex = b, maxIndex = e, midIndex; while(minIndex < maxIndex) { midIndex = (minIndex + maxIndex) / 2;
2013-09-02 00:22:25
1087
原创 3.4 从无头单链表中删除节点
问题:假设有一个没有头指针的单链表,一个指针指向此单链表中间的一个节点,删除该节点。解决:void deleteRandomNode(Node* pCurrent){ Assert(pCurrent != NULL); Node* pNext = pCurrent->next; if(pNext !=NULL) { pCurre
2013-09-01 11:05:06
735
原创 3.3 计算字符串的相似度
问题:给定任意两个字符串,修改、增加、删除方式让他们变得相同,最少步骤。解决:递归解决,一步操作后,将下面三种情况变成相同字符串1. A[2, ... , end] 和 B[1, ... , end]2. A[1, ... , end] 和 B[2, ... , end]3. A[2, ... , end] 和 B[2, ... , end]代码如下:#in
2013-08-31 23:32:49
753
原创 3.1 字符串移位包含问题
问题:给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。解法1:最直接的方法对s1进行循环移位,再进行字符串包含判断,遍历所有可能性。代码如下:#include #include #include int isSubString(){ char src[] = "AABBCD"; char des[] = "CDA
2013-08-31 21:32:44
757
原创 动作被父view拦截导致viewpager滑动不顺畅
viewpager放在scrollview中时,滑动viewpager里的内容会不顺畅,原因是稍微有点上下的动作就会被scrollview截去了,为了解决这个问题,重写了scrollview里的方法,顺利解决。也就是重写onInterceptTouchEvent方法,定义方法判断viewpager上的滑动的动作不会被scrollview截去。下面是重写scrollview的源码:publi
2012-11-14 22:39:00
5704
2
原创 DownloadManager使用技巧
最近在一个项目中需要下载服务器数据,本来是自己写个线程,后来发现2.3后有个Downloadmanager类可以用,这个类功能实在强大,进度条有,下载完了也会发出广播,还能得到有关下载任务的任何信息,实在方便,这里介绍下我用到的一些功能吧。首先,要下载东西的话,把下载地址给downloadmanager就可以了,如下DownloadManager downloadManager = (Down
2012-11-14 22:32:39
6672
原创 Android应用市场之APK自动安装
关于APK自动安装,需要获得root权限,尝试了多种方法,这里介绍一种自己亲自实现了的方法:使用pm install XXX.apk的方法,得到apk后,对其重新签名再安装到手机中,即可完成自动静默安装。具体步骤如下:1. 代码中执行public void execCommand(){ new Thread(){ public void ru
2012-11-14 22:19:02
9101
原创 Android环境配置及模拟器启动不了
昨天重新配置了JDK,Android开发环境,现在记录下来:1.安装jdk-6u33-windows-i586.exe。根据安装路径,配置环境变量比如:新建classpath变量,值如下:D:\jdk1.6.0_33\lib;D:\jdk1.6.0_33\jre\lib;D:\jre6\lib添加Path的成员:D:\jdk1.6.0_33\bin;D:\jdk1.6.0_
2012-09-30 10:51:04
5411
原创 Notepad学习笔记三
NoteEdit.javapackage com.example.notepad;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.RandomAccessFile
2012-09-06 21:02:39
1074
原创 NotePad学习笔记二
根据学习笔记一完成一些代码,贴出来看看:Notepad.javapackage com.example.notepad;import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;import android.app.Activity;import android.app.Ale
2012-09-06 20:59:28
928
原创 Notepad学习笔记(一)
最近在Android2.3上写一个Notepad,在此分享一下完成过程吧。首先是一个主界面,一个EditText就够了,但我这里使用了自定义的控件,是为了能美化编辑框,使之每行有划分线,自己定义一个View,重写OnDraw方法即可。然后在主Activity中添加菜单,这里先仅仅添加“New”,“Open”, “Save”三个菜单键,当然添加菜单也有两种方式,一个是java代码里定义,一个
2012-09-05 19:56:36
957
转载 Git初印象
第一章 基本原理查了一下百度百科和维基百科。 git 是一个版本控制系统。 官方的解释是: 版本控制(Revision control)是一种软件工程技巧, 籍以在开发的 过程中,确保由不同人所编辑的同一档案都得到更新。 按我的白话文解释就是:一群志同道合的人身处祖国各地,希望来合作开发一个 项目,假设这个项目是使用 c 语言写的(当然用任何语言都可以的) 。那么大家 怎么合作呢?用信件?效率
2012-09-02 17:36:47
1562
原创 Android学习入门
学习Android编程前当然先要配置好编程环境,作为新手,推荐使用eclipse下完成,安装好JDK,eclipse,配置好环境变量,装上插件ADT,再装载上android SDK,就ok了,具体步骤网上到处是,这里就不赘述了。 新建一个工程,直接run一下,就有大家熟悉的hello world了。分析一下,基本代码文件中需要我们写的有mainactivity.java,string.
2012-09-02 17:13:22
1664
原创 《编程珠玑》第二章——“啊哈!算法”
三个问题:1.给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数——为什么?)。在具有足够内存的情况下,如何解决该问题?如果有几个外部临时文件可用,但是仅有几百字节的内存,又该如何解决该问题?内存足够的情况下,可以采用位图法。即设一位图 至少需要 2^32/8=537MB 内存,初始化位图,每位设置为0。.不断从文件中读入数
2012-06-07 20:38:43
1545
原创 看《数学之美》
读了两天吴军老师的《数学之美》,收获颇丰:数学之美 一 统计语言模型数学之美 二 谈谈中文分词数学之美 三 隐含马尔可夫模型在语言处理中的应用数学之美 四 怎样度量信息?数学之美 五 简单之美:布尔代数和搜索引擎的索引数学之美 六 图论和网络爬虫 (Web Crawlers)数学之美 七 信息论在信息处理中的应用数学之美 八 贾里尼克的故事和现代语言处理
2012-06-06 14:34:14
1742
原创 新浪微博应用开发入门
如今新浪微博的第三方应用开发如火如荼,但能帮助新手入门的资料却很少,我也是菜鸟,在此把摸索出来的入门步骤拿出来分享,希望大家共同学习,不吝指正。 在此我们先不介绍原理之类的,直接介绍上手步骤,至于原理,大家做一遍慢慢学习就都知道了,我们边做边学。步骤一:新浪微博应用开发平台申请应用“站内应用” 创建自己的应用记录应用基本信息Ap
2012-05-11 09:16:22
3235
原创 正则表达式在字符串处理中的应用
正则表达式就是描述字符串排列模式的一种自定义规则,就是通过构建具有特定规则的模式,与输入的字符串信息比较。在进行分割,匹配,查找,替换等工作。学习正则表达式一. 正则表达式的模式如何编写(1)定界符号 / /除了字母,数字和反斜线\以外的任何字符都可以为定界符号| |/ / { }! !(2)原子注意:原子是正则表达式的最基本组成单位,而且
2012-04-28 19:44:39
630
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人