摘要: 为什么我会对字符串常量这么感兴趣,源于下面这个代码://blue.c#includevoid main(){void copy_string(char from[],char to[]);char *a="I am a teacher.";char *b="You are a student.";printf("string a=%s\nstring b=%s\n",a,b);printf("copy string a to string b:\n");copy_string(a,b);printf("\ 阅读全文
posted @ 2013-06-27 19:42 一维 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 信号量有一种情况是不能使用的,例如需要保护的临界资源有可能被中断程序访问的情况。试想一下这种情况,假如在中断程序中访问一个被信号量保护的资源,如果该资源已经被占用,那么该中断程序就会陷入睡眠,而中断是不能睡眠的。这时候只能使用下面的自旋锁函数对: void spin_lock_irq(spinlock_t *lock); void spin_unlock_irq(spinlock_t *lock); 阅读全文
posted @ 2013-06-21 11:30 一维 阅读(480) 评论(0) 推荐(0) 编辑
摘要: 之前一想到自旋锁我的眉头就紧皱,可能之前看书都是囫囵吞枣,半懂半不懂的,现在想明白了,才知道自旋锁原来是这么惬意的。 现在从简单的开始谈起,如果你想用自旋锁来保护你的临界区,你可以用下面的函数对 spin_lock(&my_lock); ............................... spin_unlock(&my_lock); 其实自旋锁的具体实现是依据不同的系统而定的,在多处理器和可抢占式系统中,spin_lock的实现分两步,第一步是关闭可抢占,第二步是如果没有获得锁时将执行一段自旋的代码直到活动锁. 而在单处理器可抢占式系统中,spin_lock的实现. 阅读全文
posted @ 2013-03-19 18:45 一维 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 2013年了,我的大三的上半学期也即将过去,一直以来我对我自己的学习历程都没有总结过,现在想回首一下,但是在此之前,我想极力谴责一下一款万恶的游戏----《英雄联盟》,该游戏在过去一年里面剥夺了我许多本可以拿来学习的时间,而且也即将剥夺更多(因为我现在仍然在玩),除此之外就是万恶的睡眠,我是那种宁愿逃课也不愿早上10点之前起床的好学生。。。好了,废话少说,咱们开始总结吧。。。 我是在2010年的10月份开始接触编程的,那时我是大一,一个懵懂的大一新生(现在也很笨),第一门学的编程语言是c语言,看的是谭浩强的《c程序设计》,那时候对编程抱有浓厚的兴趣,即使一开始什么也看不懂,但是坚持下来以... 阅读全文
posted @ 2013-01-01 13:31 一维 阅读(324) 评论(1) 推荐(0) 编辑
摘要: 任务0的PCB块是由INIT_TASK结构初始化的,初始化在sched_init()函数中进行,该结构中便已定义了一个ldt代码段描述符和一个ldt数据段描述符 任务1的PCB块是复制自任务0的,然后再修改一部分的值。。其中ldt结构代码段和数据段的基地址在copy_mem()函数中修改,改为nr*0x4000000. 为了TSS结构能够寻得该任务的ldt段。ldt段的全局描述符选择符必须放在tss.ldt中,而任务1的段限长和任务0一样都是640k并不修改,copy_page_tables函数是一个很复杂的函数,他以nr*0x4000000地址为开头建立了若干个页面,任务0的段限长有多大,即 阅读全文
posted @ 2012-12-17 21:30 一维 阅读(776) 评论(1) 推荐(0) 编辑
摘要: // 块设备结构。struct blk_dev_struct{ void (*request_fn) (void);// 请求操作的函数指针。 struct request *current_request;// 请求信息结构。};extern struct blk_dev_struct blk_dev[NR_BLK_DEV];块设备有7个,即NR_BLK_DEV=7;其中blk_dev[3].request_fn=do_hd_request();这是在硬盘初始化函数hd_init()函数中赋值的request结构如下所示// 下面是请求队列中项的结构。其中如果dev=-1,则表示该项没有被使 阅读全文
posted @ 2012-11-19 22:01 一维 阅读(768) 评论(0) 推荐(0) 编辑
摘要: 以下内容有一部分摘自百度百科,一部分摘自《UNIX环境高级编程》 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸,如果他的父进程没安装SIG... 阅读全文
posted @ 2012-10-28 19:24 一维 阅读(4143) 评论(0) 推荐(0) 编辑
摘要: 内存泄漏这词哥学c语言也听的多了,当时半懂半不懂,现在终于知道是啥回事了,下面的内容节选于《linux设备驱动》中文第三版一书。。if (!dptr->data[s_pos]) {dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL);if (!dptr->data[s_pos])goto out;}假设有 2 个进程( 我们会称它们为"A"和"B" ) 独立地试图写入同一个 schull 设备的相同偏移. 每个进程同时到达上面片段的第一行的 if 测试. 如果被测试的指针是 NULL,每个进程 阅读全文
posted @ 2012-09-27 10:26 一维 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 驱动模块中有一个file结构体。该结构体中有一个 loff_t 字段 用来维护当前读写位置。此回就拿loff_t这个字段来开刀。下面展示一个字符设备的驱动代码,来自《Linux设备驱动开发详解》-宋宝华一书 1 #include <linux/module.h> 2 #include <linux/slab.h> 3 #include <linux/types.h> 4 #include <linux/fs.h> 5 #include <linux/errno.h> 6 #include <linux/mm.h> 7 #i 阅读全文
posted @ 2012-09-25 18:38 一维 阅读(24998) 评论(2) 推荐(2) 编辑
摘要: 不少人说我对于电子这个行业没什么天分,但是我热爱电子学。我始终记住这么一句话:电子学迷人的地方就是能够采用次等元件实现高质量的电路。我对电子学的热爱不亚于编程,如果说编程更加需要缜密的思维,那么电子设计就需要创造性的思维,我不是说编程不需要创造性思维,而是电子设计的创造性思维更加具有破坏性。 入正题。首先单片机px口的内部上拉都是弱上拉,何谓弱上拉,简单的来说,弱上拉即是上拉电阻很大,那么电阻大,在电源不变的情况下,电流就小嘛,所谓弱指的是电流弱。其实弱上拉是制造工艺确定的,单片机内部的上拉电阻是用mos管做的,那么就不可能把阻值做的很小,很可能是并联了几个mos管才使阻值大得不那么明显,既. 阅读全文
posted @ 2012-05-10 21:59 一维 阅读(772) 评论(0) 推荐(0) 编辑