Posts List

手机之后

 电视之后是个人电脑的兴起,而现在又被智能手机夺取了我们的视线。那之后又会是什么设备来让我们放下手机?前两天看了罗永浩和罗振宇的会谈,其中罗永浩有谈到当时为什么选择智能手机作为创业的方向。主要的原因是:他认为手机是当前最主要的计算平台,而当下一次平台革命时,他可以有资格(具有足够的人才和资金储备)直接进入游戏圈。还有谈到关于下一代计算平台,他认为可能是VR设备。

bmp图片的编码规则

 前些天看到一幅gif图片,大致是一个程序员通过绘图工具绘出一幅bmp图片,然后用文本文件打开,可以看出其实他是写的C++版的helloworld程序。当真正了解了bmp图片的编码规则时,就可以很清楚知道这是如何实现的。

早起的鸟儿到底有没有虫子吃?

 早起的鸟儿到底有没有虫子吃?大概只有鸟自己知道吧。最近在看一些英语相关的视频讲解,授课的老师谈起了拿破仑的一个观点:最悲哀的大概是那种愚蠢而又勤奋的人,在错误的道路上努力着,离自己的目标越来越远。

Linux中断上下部

 中断是一种处理异步事件的机制。中断源触发中断信号,内核检测到当前的中断事件需要处理,则暂停当前的运行进程,转而去处理中断事件。用于处理中断事件的函数称为中断处理程序,中断处理程序的入口地址一般存放在内存中的固定位置,这样方便内核查找各个中断所对应的中断处理程序。

Linux设备模型小结——模块与框架

 在Linux内核中,模块化的设计是非常普遍的。Linux内核的一大优点就是支持模块的动态加载与移除。这让驱动的开发和调试变得相当容易,并且在实际的使用中也是非常方便的。

Linux设备模型小结——总线

 最近一直在读Linux设备模型相关的内容,包括LKD和LDD相关的章节,也在读相关的内核源码(2.6.35)。从一开始的迷迷糊糊,到现在似乎看到了一些轮廓,因为这部分对于我来说有些抽象,决定写下目前的理解作为阶段总结。

vim练级攻略

 vim(vi improved)是一款功能强大并且高效的文本编辑与文本查看工具,算得上是Unix/Linux中的上古神器。vim特有的输入模式,可以通过全键盘操作完成各种编辑工作。现在的我算是一个初级的vim党,在Linux下完全使用vim;而在Windows下一般也会使用GVim作为编辑工具,阅读代码会使用SourceInsight+GVim。

三阶魔方盲解

 最近看了一段别人盲解三阶魔方的视频,学习了一番,目前可以使用盲解的方式进行还原,但距离真正盲解还有段距离。在未学习盲解之前,感觉三阶魔方那么多方块,盲解时,很难记清楚各种情况。但真正将其进行分解开,然后记忆,发现其实并没有想象中那么难。接下来就谈一下我自己的一些理解。

再见2016

 2016,很忙碌的一年,经历了很多,也改变了许多。

C语言可变参函数

 在C语言中,函数的参数是可变长的。虽然在一般的应用程序中不会去定义可变参数的函数,但是我们经常会使用标准库提供的可变参数函数。最典型的就是printf函数,它的声明如下:

Linux字符设备驱动实现——scull

 在Linux Device Driver这本书中讲述了一个scull驱动的实现,虽然这个例子是一个很简单的字符驱动程序,但对于初学者者来说,还是有些复杂。我将其修改了一下:将该设备模型改为在内存中固定大小且连续的区域(去掉原书中复杂的数据结构),可以对其进行打开、写入数据、读出数据等操作。接下来将描述该字符设备驱动的实现过程,以及如何使用该设备。

LKD学习笔记——内核同步

 由于Linux内核支持对称多处理器(SMP),并且支持内核抢占,这样可以让多个进程并发的执行。当然这也带来了一些影响,就是当多个进程可以对相同的数据进行访问和操作时,会产生一些意料之外的结果。例如,在火车站的售票系统中,多个窗口发售相同车次的车票。当只有最后一张票时,多个窗口同时查询数据库(类似多处理器),发现有一张票,若此时同时出售,就会出现一张票被出售多次的现象。通常称这为竞争条件,而火车票的剩余数则为临界区。那内核如何避免这种现象发生,即防止竞争条件,就是解决内核同步问题。

用C语言实现面向对象编程

 当对C与C++有一定的理解之后,很容易明白:C++是一门面向对象的语言,而C语言则是面向过程的语言。那什么是面向对象、什么是面向过程?其实面向对象与面向过程,只是一种将要模拟的事件抽象出来进行编程的思想。面向过程,主要关注的是事件如何发展;面向对象,主要关注事件中存在的事物以及如何操作这些事物来模拟事件。