共 1,395 篇文章
共 6,621 篇文章及评论
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Archives
帖子来自 zhi_qiu_yi_ye 
从 MFC 到嵌入式 Linux,如何一步一步学编程
作者: zhi_qiu_yi_ye (1 篇文章) 日期: 三月 24, 2011 在 4:02 下午
评论 (18)
相信很多人和我一样直到大一才有自己的电脑,这篇文章就是我从最初学c++到MFC一直到现在学嵌入式Linux的经历,相信对初学者很有帮助,行家绕路。 我是电子技术专业的,学习计算机技术完全是兴趣所致。大一刚来就开了大学计算机基础课和c++,记得当初我什么也不懂,不知道什么是excel,不知道什么是ppt,照着书上一步一步的弄,感觉很神奇,c++虽然不知道什么东西,但感觉挺有意思。没事的时候经常去机房捣鼓电脑,第一次学会用迅雷,第一次学会下电影,印象最深刻的当然是第一次cs。我玩的第一个游戏就是cs,后来就一直FPS。大一下买了人生中第一台电脑,兴奋不已。首先看各种电脑使用技巧的书,看电脑报。经常看到书中说操作注册表,就借了本注册表的书看,当时的感觉就是不知所云。而后又捣鼓上了命令行,还有批处理,顿时感觉自己很高端。之后又去学操作系统安装,自己下了镜像刻了盘安装,第一次成功时非常兴奋,因为当时班上很多人都不会。后来又学会了Ghost,学会了硬盘分区,学会了数据恢复,当然都是最基本的用法。电脑熟悉的差不多,该投身编程了,可是两个学期的c++课上完,我还是不知道怎么编出我们平时使用的软件,一直面对着一个黑洞洞的DOS窗口,学什么汉诺塔、八皇后,还有类、对象、链表、堆栈等等,相信大家都记得。没办法,只能靠自己了。后来知道编窗口程序用MFC,正值暑假来临,于是下了孙鑫的那一套视频教程,借了几本书回家了。孙鑫的那套视频教程对入门MFC很有帮助,虽然看的时候很无聊,我还是坚持看了大部分。做了几个小例子。 转眼到了大二,正值人生的迷茫期,大二上基本在游戏中度过,省略。但有一本书不得不说,绝影的《疯狂的程序员》,期末考试期间我看完了这本书,真是醍醐灌顶,对我帮助很大,推荐大家看看绝哥的这本书。 大二下重拾MFC,我选择了图像部分,最直观,最有意思。微软的那一套GDI真够人学的,我觉的MSDN上很多东西说的糊里糊涂。不过对于没有编过程序的我来说,非常有意思,各种图片的操作,能产生很多意想不到的效果。比如什么透明效果,灰度效果,动画效果,这让我很着迷,后来还借了本c++游戏设计的书,照着上面做了个游戏框架(书上说是游戏引擎,我觉的太夸张了),这段时间非常充实,也非常开心,可以说学的一马平川,毫无阻碍。接触MFC的大半年中,我一直在思考,MFC是什么,c++是什么,visual c++是什么,win32又是什么,汇编又是什么,难道编程就是在这个类那个类里添加代码,那么这些类又是哪儿来的,程序是如何执行的,从哪儿开始在哪儿结束。很少有书介绍win32编程,最多就是个Hello World,给人的第一印象就是又臭又长,实现的功能还那么简单。我找了很多书,看了很多贴子,有几本书很有用,推荐大家看看,一个是《windows核心编程》,讲操作系统机制的,还有《windows程序设计》,不仅教了设计方法,还介绍了MFC框架,我看了之后才明白win32和MFC是一样的,MFC只是对win32编程方法的一种c++封装,他封装了各种API,用类的方式呈现,所以编程就是在各种类里加加代码。以前一直有个迷惑的问题,学GDI的时候,有的书用API,有的书用MFC类,所以我一直分不清CDC,HDC,CPaintDC,CClientDC等等。知道MFC是一种类封装方法后,我毅然决定从此不用MFC,只用最基本的win32编程,抓住问题的本质。 后来我用win32的方法做了几个自己用的工具,期间我一直没用MSDN,而是用PlatForm SDK,纯API合集。抛开了MFC那繁杂的框架,虽然自己写的代码多了,但我有一种通透的感觉,这才是真正的编程,什么都是自己写的,从入口到结束你都了解的一清二楚。记得帮朋友写了一个工具,给他源代码时就一个几百行的cpp文件,他问我从哪儿开始看,在哪儿添加代码,怎么没有类等等,我那个cpp里显示一个窗口后就进入了消息循环,后面就几个消息回调函数,很简单。在我的讲解下他才知道这就是所谓的纯win32编程,他问我怎样才能看的懂,我说你还有很长的路要走,呵呵。 我是电子系的,有一段时间抛弃win32编程去学单片机了。刚开始很不习惯,以前写代码都是几百行几百行一个文件,现在这些例子都是几行几行的,还得我耗时间做,真让人蛋疼。我觉得用c语言这样写很二,于是我决定用汇编写,现在我还觉得这个决定太正确了。大二学过一门叫《微机原理与接口》的书,讲的是x86的汇编和计算机的基本结构,虽然当时我觉得这本书太过时了,还8086,现在都酷睿了,后面我还会提到,这本书非常有用。既然决定学51的汇编,就要学他的指令和架构。51虽然简单,但学习他的架构对后来的学习帮助很大。他的指令和运行时数据有不同的寻址空间,相对于现在的计算机就是程序就在硬盘里读,临时数据放在内存里,而现在冯式计算机都是把程序调入内存执行,代码和数据都在内存里。51的指令和数据有不同的寻址空间,是指那些临时数据在内存里,像代码中已经初始化的字符串等数据还是在指令寻址空间的,并通过几个特殊的指令读取这些数据,指令空间是只读的。51的SFR(特殊功能寄存器)映射在内存空间中,这就像计算机的内存映射I/O,S3C2410也是这样,不过51的A累加器和R0~R7也都映射在内存中就和计算机不一样了。学习51的架构对学习计算机体系结构有很大的帮助,因为他简单,而且他的很多东西和计算机差不多。51的汇编绝对比x86的汇编学起来简单,因为他没有段寄存器,你只要知道他有不同的寻址空间,几种寻址方式的不同,还有内存寻址空间的分布,哪些是临时寄存器,哪些是SFR,哪些是位寻址区等等,你就可以很快上手。 初通51之后,我又转而去学FPGA,相信很多大学生都是,纯属跟风,当时我还不知道他是干什么的。平台是学校提供的,因为我参加了一个校内比赛。当时为做出作品,我花了很长时间写代码,又花了更长时间调试,FPGA很麻烦,所有的东西都要你自己动手,每个信号的时序都要把握好。最后我写了2千多行的代码,调试了N久也没完成作品。不过学FPGA很有好处,它让你知道计算机世界是怎么构成的,所有的数字电路都是由最简单的与非逻辑和寄存器构成的,例如CPU,他也是个数字逻辑电路,如果给你时间,你完全可以自己写一个出来,但质量是另外一件事。 (未完待续)
