单片机裸机开发经验

发布者:huanran最新更新时间:2018-10-10 来源: 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,然后将裸机。我都不知道他是不是先拉屎后脱裤子。这种东西最好别看。看完他的视频再看什么教程都没法学了。这个和吃完大便之后就再没食欲吃烤鸭是一个道理。

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


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

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

推荐阅读最新更新时间:2024-03-16 16:15

51单片机C语言学习4
第四课 数据类型   先来简单说说C语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定时器1,可以写做 Timer1 ,如果程序中有 TIMER1 ,那么这两个是完全不同定义的标识符。标识符由字符串,数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如 1Timer 是错误的,编译时便会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。在C51编译器中,只支持标识符的前32位为
[单片机]
DSP56800开发软件包SDK使用经验点滴
Motorola的SDK(Soft wareDevelopment Kit)是从DSP56800的Metrowerks CodeWarrior开发工具中发展而来的,SDK是一个API(Application Prograrmming Inter—face)、库、服务、规则的集合体。它为DSP56800系列芯片的开发应用提供了一个很好的平台,使得开发者可以脱离硬件的束缚,在软件仿真的环境下进行开发,缩短产品进入市场的周期。SDK使得开发者对设备的操作就象对文件的操作一样,非常方便。 下面是笔者在开发应用DSP56F807芯片过程中使用SDK对其开发操作的一点经验。 1 对SDK中API函数的总体认识 使用API函数对片上集
[嵌入式]
51单片机学习笔记:定时器产生PWM可调方波,控制led灯亮度
使用定时器T0产生PWM方波, 用按键调整占空比,20级可调 控制led灯的亮度等级. C代码 #include my51.h #include timer0.h #define grading 20 //亮度20级变化 sbit keyS3=P3^5; //按键调整占空比,PWM_keyChange++ sbit keyS4=P3^6; // PWM_keyChange-- u8 PWM_keyChange=10; //初值,按键调整在1~20之间变化 //占空比 PWM_key
[单片机]
51<font color='red'>单片机</font>学习笔记:定时器产生PWM可调方波,控制led灯亮度
解读ARM7内核微控制器以太网接口电路
芯片可以实现最高60MHz的工作频率,有着较强的功能,能够满足嵌入式系统μC/OS—II及人性化的人机界面的要求。本设计中 LPC2148所有的接口都有使用。 以太网接口部分采用了具有SPI接口的集成MAC 和10 BASE-T PHY的ENC28J60。大大地减小了主控制器I/O口的开销。ENC28J60 符合IEEE 802.3 的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。 它还提供了一个内部DMA 模块,以实现快速数据吞吐和硬件支持的IP校验和计算。 与主控制器的通信通过两个中断引脚和SPI 实现,数据传输速率高达10 Mb/s。两个专用的引脚用于连接LED,进行网络活动状态指示。 LED模块采用
[单片机]
解读ARM7内核<font color='red'>微控制器</font>以太网接口电路
51单片机实现操作AT24C02时,改善数码管的闪烁现象
一、使用proteus绘制简单的电路图,用于后续仿真 关于IIC的读写: 二、编写程序 /******************************************************************************************************************** ---- @Project: AT24C02 ---- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200722 ---- @ModifiedTime:
[单片机]
51<font color='red'>单片机</font>实现操作AT24C02时,改善数码管的闪烁现象
瑞萨电子宣布将全面支持面向未来汽车级MCU 和SoC的ISO/SAE 21434标准
10月8日,瑞萨电子集团宣布,自2022年1月起的新开发项目中,瑞萨的汽车级微控制器(MCU)和片上系统(SoC)解决方案将完全满足ISO/SAE 21434道路车辆网络安全工程国际标准。瑞萨此举秉承公司对汽车网络安全的持续性承诺,旨在建立并实施强大的网络安全管理系统(CSMS),并使其成为联合国欧洲经济委员会(UNECE)新法规UN R155的组成部分。 这一承诺还向OEM(original equipment manufacturers,原始设备制造商)和一级供应商重申瑞萨将继续履行其CSMS责任。自2022年1月开始,瑞萨未来所有车用MCU和SoC都将遵循ISO/SAE 21434标准;包括16位RL78和32位RH85
[汽车电子]
瑞萨电子宣布将全面支持面向未来汽车级<font color='red'>MCU</font> 和SoC的ISO/SAE 21434标准
基于单片机的智能大功率直流电源设计
引言   在大功率直流电源中,主电路一般采用晶闸管三相全控桥式整流电路,其关键在于如何准确、可靠、稳定地控制晶闸管的导通角。   目前,大功率直流电源现场应用中最为普遍的控制方式大都采用KC或KJ系列小规模集成电路,即采用三相锯齿波信号和直流控制信号相比较获得的移相信号。然而,三相锯齿波信号的斜率、占空比、幅度等与每相的器件参数密切相关,并且比较信号中小的干扰可能造成较大的相移误差,因而电路的可靠性和自动平衡能力较差。   利用单片机作为控制电路,根据三相全控桥触发脉冲之间的逻辑关系,直接产生六相高度均衡的触发脉冲,可以克服KC、KJ系列电路均衡性差的缺点。但是,由于现场系统工作在强电干扰比较严重的场合,为了减小干扰可
[电源管理]
基于<font color='red'>单片机</font>的智能大功率直流电源设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved