当前位置:首页 > 单片机 > 单片机
[导读] 在论坛里见到好多朋友学习裸机的时候都有一个习惯——做裸机开发时,过度依赖天嵌的裸机测试程序。怎么说呢,我觉得这样不是很好。尤其是对于一个新手。也许是学习单片机出身的原因,我有一个毛病,就是对

 在论坛里见到好多朋友学习裸机的时候都有一个习惯——做裸机开发时,过度依赖天嵌的裸机测试程序。怎么说呢,我觉得这样不是很好。尤其是对于一个新手。

也许是学习单片机出身的原因,我有一个毛病,就是对别人的代码不放心、凡事非得扣到底层。

一开始我看天嵌的裸奔三部曲,有一个体会——越看越迷茫。尤其是简单地修改了天嵌的程序,实现了显示几个自定义图片的时候。这里也算是给天嵌提一个建议吧。一般来讲,新手看到这里的感觉就是特迷茫:难道这就是学裸机程序吗?修改几行C代码?天嵌手册里说这样会迅速建立成就感,可是我丝毫没有。反而感到的是强烈的不安。毕竟天嵌的裸机程序对于一个新手来说太庞大,甚至会搞不清文件之间的关系。我们现在做的就是简单地修改几行现成的代码,然后看看效果。我就在想,此时我只会修改几行代码。底层硬件、ARM是如何启动的、启动代码2440init.s是如何支持ARM启动并跳转到C函数里的?这些东西都被天嵌的裸奔三部曲教程透明掉了,这些我都不会,我们只是做了做应用层的修改。而那些被透明掉的知识,现在完全都是依赖于天嵌的测试程序的。试想,一旦一天老板让我做一个新的东西,新的硬件配置,没有了天嵌裸机程序里的底层知识,我们将如之奈何?基本就废了吧。

也许是由于原先是搞单片机的缘故,所以总喜欢扣底层,做Linux或者WinCE上层应用的朋友也许会觉得我在这里瞎折腾,做无用功。但是,对于从单片机转过来的人来说,我说的这些是最重要的——他们要搞清楚ARM是如何工作的,如何用程序去控制硬件,如何靠自己的力气搭建出来一个裸机程序。和做上层的人不一样,做底层的人就喜欢扣这些东西,因为这些东西如果搞不懂,那搞其上层来就会觉得发飘,或者说总是不知道地下发生了什么导致心里没底。最要命的是以后做Linux设备驱动的时候。由于对底层的认识不够,必将导致非常吃力!

这些天狂啃了一顿启动代码2440init.s。忽然意识到,裸机应该换一个方法学。

第一步、狂啃启动代码。

啃过之后你就会发现,原来大家在三星原版基础上改的,然后互相抄,有的甚至都抄错了。这可能是个痛苦的过程,你要找各种版本的2440init.s,但却是必经的。一旦走过,你会发现你对ARM底层就有了和以前不是一个深度的理解。以后做起开发来底气也就足了。这个过程里,你会遇到很多汇编的基础,杜春雷的那本《ARM体系结构编程》就是本很不错的材料。但是千万记住,你拿它当字典用就行,千万别运气下决心要从头到尾看完。不然你真不知道你是怎么死的。以前还有人说一定要通读三星手册,我觉得这跟杀人没什么两样。学习一定要有目的性。当学习启动代码遇到问题时,再去查汇编语法和三星手册时,学习时最快的,记得最牢的。如果漫无目的地通读。。。。就算最后你活下来了,你也不知道之前你都看了些什么。。。。

第二步、跟着启动代码跳转到C程序来。

这个过程就像搞单片机一样了。自己写自己的第一个跑马灯程序、蜂鸣器程序、按键中断程序、定时器、LCD etc etc etc etc etc。最后你再把自己写的所有的东西组合起来,构建成一个属于自己的裸机测试程序。经历过这个过程,你就会发现,原来ARM不是不可战胜的。原来,你已经一步一步踏实的走过来了。这个时候,你回头再看一眼天嵌的逻辑测试程序,你就会淡然一笑,哦,这个啊,我自己已经写出来了。

至此,所谓“成就感”才建立起来。至此,你才可以丝毫不依赖别人地做出自己的东西。至此,你才学到了真正的东西。

因此,在这里我诚恳地向天嵌提出建议。如果写裸奔教程,请从最底层写起。贵公司对启动代码的介绍少之又少。而完全是在对上层做文章。我想,对于一个ARM新手,不管他之前学没学过单片机,你让他过度依赖测试程序的框架做开发,他真的会因为底层基础不好而发飘,导致以后的全部开发都过度依赖现有的测试程序。从本质上讲,他还是没有学懂裸机。在没搞懂启动过程的前提下,就去学习裸机电子钟之类的东西,结果只有一个字——飘。

我知道天嵌写教程也要考虑篇幅,也不能面面俱到。面面俱到那真的是强人所难。但是不知道贵公司是否可以考虑换一个思路,换一种引导的方式,哪怕只是写一个启动代码的详细注释,已经如何建立一个启动代码+LED跑马灯程序,都足以给用户一个清晰的方向。以后的教程甚至不写,用户也会沿着思路,学会自己搭建起属于自己的东西,而不是搭建起建立再现有代码基础之上的东西。这样用户学到的东西才真正会变成自己的。

最后,想说选本好的教材,这很重要。不好的教材只能让你多走弯路。

我觉得阿南的那本《ARM Linux入门与实践》就很不错,我不是在做广告,真的不错。那里多一句废话不写,净捞干的。比如汇编部分,他只介绍了学习启动代码所必须掌握的一些指令和伪指令。其他没用的一概不写,不像有些书,就会抄DataSheet。

韦东山的《嵌入式Linux应用开发完全手册》对于裸机部分写得其实不是很好,他总喜欢在Linux下搞。而且中断那里写得非常不好。我们大多数人还是在ADS下搞的,于是我们一般还都是用启动代码来启动开发板的(搞裸机也不能太裸不是,启动代码都自己重新写就基本可以直接累死了),启动代码里的非常漂亮的两级向量表中断处理机制韦东山完全没用到。而且那本书每一章里知识高度浓缩,新手看了容易上头。而且,凡是号称什么什么全书的,往往不可能写得很全。嵌入式技术是一个庞大的体系,怎么可能一本书写全呢?如果号称全,则必然不精。

还有,有谁还看中嵌的视频的就别看了。首先我说,他们已经倒闭了,因为骗钱倒闭的。他们的质量很差,视频质量也很差。老师就是在念程序或者念DataSheet。讲启动代码的时候老师屁都不会,之前他们讲过汇编语法,讲到bootloader的时候,bootloader再干什么一点儿没讲,反而又领着学生复习汇编基本语法,这都忍了,可老师硬说bic指令是跳转指令。 还有,体系乱套。先讲Linux,然后将裸机。我都不知道他是不是先拉屎后脱裤子。这种东西最好别看。看完他的视频再看什么教程都没法学了。这个和吃完大便之后就再没食欲吃烤鸭是一个道理。

帖子有的地方有点儿攻击性,有点儿偏激。再次往误伤的同胞海涵。如果您觉得我扯了半天都是废话,您就当这是一阵风飘过,或者这是我半夜的梦话。。。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭