历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2018年10月10日 | 单片机裸机开发经验

发布者:huanran 来源: eefocus关键字:单片机  裸机  开发经验 手机看文章 扫描二维码
随时随地手机看文章

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

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

一开始我看天嵌的裸奔三部曲,有一个体会——越看越迷茫。尤其是简单地修改了天嵌的程序,实现了显示几个自定义图片的时候。这里也算是给天嵌提一个建议吧。一般来讲,新手看到这里的感觉就是特迷茫:难道这就是学裸机程序吗?修改几行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,然后将裸机。我都不知道他是不是先拉屎后脱裤子。这种东西最好别看。看完他的视频再看什么教程都没法学了。这个和吃完大便之后就再没食欲吃烤鸭是一个道理。

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


关键字:单片机  裸机  开发经验 引用地址:单片机裸机开发经验

上一篇:高手教你如何编写高效率稳定的单片机代码
下一篇:浅谈单片机上操作系统的利弊

推荐阅读

首先要了解一个基本的概念:STM32单片机的一个地址(如:0x20000000)是一个字节,即8bit。 STM32的位带操作简单的说就是把一个地址A的8个位,分别单独的重新定义8个地址, 操作一个地址等同于操作一个位,形象的理解即为取别名。 位带区中的地址除了可以同RAM一样使用外,还带有自己的“位带别名”。 将每个位拓展为32位的字,既成了位带别名。 如:0x2...
如果说三年之前,车企们对智能网联的态度属于“浅尝辄止”的话,那么三年之后,这种态度已经变成了“全面押注”。2016年10月,英特尔、东软和一汽红旗跨界合作,从智能座舱切入,完成了软件定义汽车的第一步。 迎“变”而上,近几年红旗创新之路都有英特尔相伴。从2016年智能座舱、红旗HS5车型正式面向市场销售到长沙“红旗EV”Robotaxi车队,如今的英特尔...
2020年10月2日-ABB收购了三角洲机器人的领先提供商Codian Robotics BV,该公司主要用于高精度拾放应用。Codian Robotics的产品包括卫生设计生产线,非常适合对卫生敏感的行业,包括食品,饮料和药品。通过此次交易,ABB正在加速其在增量机器人领域中的参与度。Codian Robotics位于荷兰的Ede,在全球拥有20名员工。该公司将继续直接为客户服务。此次收...
据中国台湾经济日报报道,光学镜头厂大立光今天举行法人说明会,CEO林恩平表示,光学技术已有新突破,明年导入8P等高端镜头的手机客户变多,将升级至1亿乃至2亿像素。针对第4季度展望,林恩平表示,目前看到9月、10月及11月的需求都差不多,客户供应链长短料的问题依旧存在;高端镜头供应链也出了一些问题,导入要到明年,预期第4季度产品组合与第3季度差...

史海拾趣

问答坊 | AI 解惑

gprs模块和ARM系统之间的通信程序

求一份gprs模块和ARM系统之间的通信程序 自己不会写啊,苦恼…

查看全部问答∨

单片机C语言编程与实例

单片机C语言编程与实例,不错的一本书…

查看全部问答∨

反激式变压器开关电源(part1) 开关电源原理与设计(连载18)

1-7.反激式变压器开关电源 反激式变压器开关电源工作原理比较简单,输出电压控制范围比较大,因此,在一般电器设备中应用最广泛。 1-7-1.反激式变压器开关电源工作原理 所谓反激式变压器开关电源,是指当变压器的初级线圈正好被直流电压激励时 ...…

查看全部问答∨

wince时钟中断TICK在那里设置?

我想调整WINCE下进程的切换周期,请问时钟RTC对应的TICK在哪里修改?…

查看全部问答∨

请教一下关于在CE下设计进程管理器的问题~

如题~~小弟希望做一个在CE下运行的进程管理器 ~~能够直接在CE下查看当前进程运行情况~而不需要通过远程工具~ 请问大概要用到什么库和函数呢?求教设计思路~~谢谢~~…

查看全部问答∨

从注册表哪里可以获取ndis微端口驱动联网时的IP地址?

或者从哪里可以获取ndis微端口驱动联网时的IP地址? 谢谢!…

查看全部问答∨

LED与其它光源的详细比较 有详细数据说话!!

replyreload += \',\' + 685119;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答∨

单片机学习

请问各位大侠,在学430之前有没有学习像51这样的单片机入门呢?求各位的指点,大家都来说说自己的经历和想法吧,共同学习…

查看全部问答∨

如果LED驱动设计电压242V,使用环境电压在250V,这种过压是否有可靠的保护电路?

这种超压太常见了,现在有的保护元件大多是瞬太的,有没有一种低成本高可靠的超压保护电路?Q:455317638…

查看全部问答∨

角度问题:陀螺仪还是加速度传感器?

周六去了一趟中发,勉强凑够了能测量角度的东西。测量角度无论是用陀螺仪还是加速度传感器都存在精度和响应速率的问题。所以我尝试用另一种方式来测量(电路板)的角度,就是它了:    Nikon?三相编码器,1000线/圈,实际体积比较大。这 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved