设计与开发

单片机裸机 ARM体系结构(9)-单片机(裸机)程序一般怎么写?一篇就够

小编 2024-10-06 设计与开发 23 0

ARM体系结构(9)-单片机(裸机)程序一般怎么写?一篇就够

什么是裸机程序?

裸机(单片机)程序主要是相对于基于操作系统的程序开发而言,就是没有操作系统的基础上开发具有特定功能的代码。比如我们要用51单片机控制一个LED灯的闪烁,不采用操作系统,通过51汇编代码或者C语言代码实现,这就是裸机程序。

实现硬件裸机程序的一般步骤

搞清楚自己需要要实现的功能

根据需求,理清思路,结合硬件,思考需要怎么实现,用到什么相关资源。

查看原理图,了解硬件的用途及工作原理

弄清楚硬件和CPU的连接关系,用到哪些相关外设。

细读datasheet,尤其是寄存器

主要是看寄存器如何设置。硬件不能正常工作90%是寄存器设置有问题。

写代码

裸机程序其实就是寄存器设置。一般先初始化硬件,后实现具体需求功能的业务逻辑代码。

测试,解决问题

自测问题,查找BUG,解决问题。

实例讲解

这里我们基于tiny4412开发板硬件,实现对电路板上led2 闪烁功能为例讲解。

下面我们按照上面一般步骤走:

1.要实现的功能

控制led的亮与灭,可以使用GPIO控制

2.查看原理图,了解硬件的用途及工作原理

查看原理图,找到LED相关部分电路,如上图。我们要实现LED2的亮灭,LED2左端要是低电平才能亮,高电平灭。所以LED2 脚必须是低电平,led2才会亮。

然后我们通过LED2 标签,找到LED2连接到SOC的 GPM4_1引脚。所以剩下就是GPM4_1脚的设置问题。

3.细读datasheet,尤其是寄存器

单片机 GPIO(General Purpose Input Output)可以控制一根外部管脚的电路,可以输出高低电平,可以检测外部管脚电平。一个GPIO脚接口至少有两个相关寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向时输入还是输出,则可以通过控制寄存器中对应位独立的加以设置。

其中关于GPM4_1脚相关的寄存器描述如下:

GPM4[1],GPM4CON寄存器,地址是0x1100_0000 + 0x02E0,7:4位,设置为0x1,设为输出模式。

设置GPM4[1]为输出高电平,需要设置GPM4DAT寄存器的bit1为1。

设置GPM4[1]为输出低电平,需要设置GPM4DAT寄存器的bit1为0。

问题来了,怎么设置一个寄存器?

arm处理器的就是属于内存映射。也就是说访问寄存器就像访普通内存一样。

这实际上就是内存映射机制的方便性了。这里就是通过内存寻址访问到寄存器,可以读/写操作。也就是只要我们知道某个寄存器的地址,就可以通过汇编指令或者C语言指针变量读写该地址数据就行。

4.写代码

a)初始化

设置GPM4_1为输出模式,GPM4CON[7:4]位位设置为0x1设置GPM4DAT寄存器的bit1为1,led2灭

b)功能

实现led2闪烁循环逻辑程序

以上就是单片机程序,或者裸机程序开发一般步骤,适用所有MCU,SOC裸机程序开发。

至于具体代码实现我们在后续文章更新。

“搞ARM裸机目的是Linux系统,谁让你做单片机开发了?!” 为何我将技术做到行业顶尖水平,却被同事说弱爆了

(本文“我”指代韦东山,“你”泛指嵌入式工程师或对嵌入式感兴趣的人)

我是韦东山,毕业于中国科学技术大学电子、软件专业双学位,超过15年嵌入式一线开发经验,曾在在中兴通迅负责网络电视、机顶盒、IPCamera等多个项目的Linux底层系统开发,擅长ARM/MIPS等架构的Linux底层系统开发,著有畅销书《嵌入式Linux应用开发完全手册》,曾为多家知名培训机构特邀讲师,2011年陆续录制的工程师必看教程——“韦东山系列Linux/Android视频”。

在从事嵌入式开发这一行,一路走来,就有很多工程师会反复地问我这些“热点问题”:

作为新手该怎么学习嵌入式?学单片机有什么用?学ARM裸机有什么用? 可以跳过单片机直接从学习ARM裸机开始吗?学Linux系统开发又该如何开始?ARM裸机和Linux系统有什么关联?做偏软件好还是做偏硬件好?如何规划嵌入式技能和职业才有“钱途”? 怎么才能少走弯路?如何避免各种“坑”?

.......

很多事情要厘清前因后果,具体问题具体分析。就譬如,做工程师这一行,特别是电子工程师,要有科学的态度和严谨的逻辑,才有可能最终做出经得起推敲的项目和产品,产品如人品

我就以本人的经历故事和所遇到的一些人和事,在这里一并和大家分享,就当是抛砖引玉了,希望对嵌入式开发工程师或对嵌入式感兴趣的小伙伴们有所启发或助益。大家有任何观点,欢迎在本文底部回复一起交流探讨。

1

我在中兴的嵌入式精英同事们

理想很丰满,现实很骨感。所有行业的从事者都是在一个金字塔里,工作好收入高离家近假期多的人,都只是少数。就我观察而言,ARM嵌入式工程师待遇较好,发展前途不受限。

ARM嵌入式工程师入门门槛高,而且很多职位需要你有项目经验。所以,有一部分同学最终只能转行:转而做单片机或APP开发等相对简单的技术领域。

但是,ARM嵌入式工程师所处位置非常好,向下跟硬件工程师打交道,向上跟APP工程师打交道,可以参与整个系统的开发,可以充当项目多面手的角色。

我是个技术宅男,只能举身边的例子:我在中兴时从事嵌入式系统的同事,发展都很不错。

我的科长,拥有专业的Linux底层知识的同时,极具大局观,他向上研究APP的相关知识、相关协议,上下兼通,是中兴的产品经理、总工了。

同事A,早年从因POS机开发(用单片机),在中兴里天天加班深研Linux技术,现在在创业公司里当技术头头,有股份。加班多,但是收入高。

同事B,在中兴里是做APP开发,后跳槽到OPPO后,深研底层开发,早几年单是年终将就是我的年薪,现在自己创业。

同事C,女,跑到IBM做服务器相关的工作去了,嵌入式Linux的知识绝对是帮上大忙了。

同事D,深研Linux系统知识,人称大师,从不加班(羡慕死人了),有大BUG必定请他出马、出差。

对于嵌入式工程师,把Linux知识吃透了,可以游走于几乎所有行业 ,因为这些产品基本上都要用Linux。

想当领导的话,向上学习一下APP、业务知识,你就可以掌握整个产品的开发全流程了。

想创业的话,向下你知道需要什么样的硬件,向上你知道需要请哪方面的APP工程师。

对于暂时找不到嵌入式Linux职位的同学,不用担心,你总会发现机会的。

做单片机产品的公司,产品升级的话必定要用Linux ,到时你就是公司掌握先机的人;做APP的话,如果跟硬件相关,你的嵌入式Linux知识会提供很多帮忙。

要掌握Linux系统开发,就必须先搞透ARM裸机!

2

在你的薪资翻倍之前,让我们先聊聊ARM裸机

ARM裸机就是单片机,在把能运行Linux系统的板子先当作单片机来使用,熟悉芯片功能、硬件操作,为后续的Linux学习作准备。

我们讲解的ARM裸机,特殊之处在于:不使用IAR/KEIL/MDK等软件,而是在纯粹的Linux环境下从0写代码。这些好用的开发工具屏蔽了太多的技术细节,比如:位置无关码、重定位、中断环境的保存与恢复、链接脚本。而这些细节,在后续的bootloader学习中是需要的。

除上述细节外,ARM裸机的学习目的在于:掌握如何编写程序来控制硬件。后续的“Linux驱动=软件框架+硬件操作”,我们先在单纯的裸机学习中掌握硬件操作,在后面的学习中就可以把精力放在驱动软件框架上。

我们学习ARM裸机的目的,是去学习后续的Linux课程,进阶为Linux系统工程师。而不是要让你继续从事单片机开发,成为单片机工程师。

在技术层面,Linux系统工程师回头从事单片机开发,轻而易举;但是现在不开始着手Linux的学习,后续转型很麻烦。2004年我们使用51单片机从事车载电话开发,所做的软件已经算是单片机层面顶尖水平了──我们可以在单片机上开发自己的操作系统。但是,我们同事纷纷感觉到了危机,单片机能做的事情太单一了,单片机弱爆了! 当年流行wince,Linux刚起步,我们选择学习Linux,现在wince已经没人提及,而Linux仍如日中天。中兴公司也是在2005年才全面从vxwork切换到Linux的,我有幸进入中兴与他们一起研究Linux。

在收入方面,大家尽可以去招聘网站搜“单片机”、“Linux”,后者一般是前者2倍以上

在发展方面,有了Linux知识,几乎通吃所有产品。我从事过网络会议系统、监控摄像头、楼宇对讲系统、安防、广告机方面的开发,我只是开发底层系统,不是开发APP,这些产品通通使用Linux。现在兴起的机器人、人工智能,它们要落地的话,运行Linux系统的硬件是必选项。

就身边事例而言,我是2008年离开中兴,随后几年里有几个同科室的同事也都离开了,他们都做Linux系统;现在都做得很不错。有人在联想做Android开发,有人在做POS机,有人自己创业,他们或是团队领导,或是有股份。

3

嵌入式,我见过最奇葩的事

学过嵌入式的人可能会比较清楚,在学习的过程中会有很多小坑,如果自己去解决的话,估计要花上几个小时,但是有经验的人一眼就能看出来。

我遇到过,

最奇葩: 拿到开发板,把电源插到耳机孔去了。

大多数: 粗心,很多人拼写命令时写错了,结果忙上半天找原因

储备知识不足: 开始学习时,我们只能照着文档写命令,这些命令的作用后面才会说明;如果当场就讲这命令,课程就会又臭又长。

所以,我们都会建议:按着视频学习,不懂的、没讲到的,先放着;后面学完你就全懂了。

学习过程中,很多因为粗心导致的问题层出不穷,自己去解决的话很花时间。

而且嵌入式学习过程中,需要的知识非常广,自己临时去学习的话,进度很慢;能否跳过,自己也不知道,反复中断后会备受打击,甚至放弃学习。在遇到困难时,如果能有人指引,效率会高很多。

我在2005年学习嵌入式时,市面上基本没有资料,我学得非常痛苦,在论坛上疯狂发贴,那些问题现在回头看非常弱智,但是当时就把我卡住了:茶饭不思,时不时想砸电脑。

为帮助更多想学习嵌入式的朋友,所以和电子发烧友一起策划推出了最新ARM裸机学习视频“韦东山手把手教你8周玩转ARM裸机实战”(长按下图识别二维码进入视频课程学习

相关问答

ide集成开发环境如何进行 单片机裸机 开发?

集成开发环境是利用单片机裸机的主板系统,载入集成开发环境进行开发的集成开发环境是利用单片机裸机的主板系统,载入集成开发环境进行开发的

什么叫 单片机 ? 单片机 与一般微型计算机相比,具有哪些特点?

1、单片机是在一块集成电路上把CPU、存储器、定时器/计数器及多种形式的I/O接口集成在一起而构成的微型计算机。2、单片机就一个集成芯片,外加辅助电路构成一...

单片机 上的小型计算机包括?

1、单片机是在一块集成电路上把CPU、存储器、定时器/计数器及多种形式的I/O接口集成在一起而构成的微型计算机。2、单片机就一个集成芯片,外加辅助电路构成一...

arm 裸机 实验是否需要仿真器?

51单片机也可以仿真,ARM也可以在Keil里软仿真调试,也可以通过串口下进去调,也可以把仿真器当下载器用,只是现在ARM的开发工具做得不错,大家就没有再弄单独的...

JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写 单片机 程序?

如果真要想在单片机上运行虚拟机还不如直接找个有操作系统的嵌入式设备,单片机完成的就是简单能够容易实现的功能,太多功能模块化的功能就不适合在这上面,解...

微处理器 微型计算机 微型计算机系统和 单片机 有什么不同? - ...

3以微型计算机为核心组成的应用控制系统叫做微型计算机系统,包括系统软件和硬件两个组成部分。4单片机是面向工业控制的微处理器,是工业CPU,它是...

嵌入式 单片机 有前途吗?

非常有前途。嵌入式单片机,即嵌入式微控制器,指以微控制器为核心控制单元的嵌入到对象体系中的专用计算机系统,是应用十分广泛的一种嵌入式系统结构。无论是...

嵌入式工程师专业要求?

要求:1、能力需求(硬件):负责硬件电路开发工作,具备良好的数字和模拟电路的分析、设计、调试能力。熟悉AD、Allegro、PADS等至少一种设计软件,能独立完成...

电子信息工程重点学嵌入式吗?

做嵌入式一般有三个阶级,单片机裸机开发,ucosIIfreeRTOS实时系统级开发,linuxwince开发,复杂程度依次递增,前景依次递增,money也依次递增。学习嵌入式...做...

基于 单片机 的大型项目为何要引入操作系统?

对于一般的小型单片机产品,单片机一般采用前后台系统或者叫超循环系统。这种程序主体(前台)只有一个无限循环,而后台则是中断服务程序。对于简单的单片机产品...

猜你喜欢