发 帖  

[经验] 单片机和Linux都想学_换个两全的方法学习单片机

2018-3-7 10:33:24  2248 单片机 Linux 方法 学习
收藏 1 收藏 推荐 0 推荐
分享
本帖最后由 weidongshan 于 2018-5-15 09:59 编辑

首发平台:微信公众号baiwenkeji

本节是arm裸机1期加强版课程第1课第3节文字版。
文章不能完整的描述视频的内容,如果你感觉这些内容不错,但有点看不懂,建议购买视频进一步学习:http://t.elecfans.com/topic/20.html?elecfans_trackid=xybanner

本节教你如何学习单片机,如何选择合适的开发板开发工具

现在我们知道单片机是要学习的,那么怎么去学习单片机?在上一课我们说不要使用老一套的方法学习,实际上是指的两个问题。

第一:选择什么开发板;
第二:使用什么开发工具;
我们学习单片机的目的是干嘛?目的是为后续嵌入式Linux学习服务
在这条学习线路上:
单片机->bootloader->Linux系统/驱动->APP(QT) 可以使用同一套开发板
我们选择开发板的原则是:资料丰富

开发板首推三星 (SAMSUNG)系列的,资料最开放,
* 有S3C2440、S3C6410、S5PV210、Exynos4412;
* 然后是德州仪器 (TI)的,TI开始不开放资料,现在逐渐公开了,有AM437X、AM335X;
* 然后是飞思卡尔(freescale),有iMX6;
* 还有其它国产芯片:全志瑞芯微
我们用百度进行搜索,看哪个资料最丰富。结果如下:
再在搜索关键词中加入“教程”后,S3C2440的搜索结果比AM335X更多,因此S3C2440的资料仍是最多的,TI的营销更好,当然,TI作为工控板,其用户也是很多的。
所以,从教程的丰富程度来看,S3C2440为首选开发板
我们后面会考虑使用TI的芯片重新录制一套视频,但需要2-3年的功夫,所以,现在还是使用S3C2440吧。

现在普遍有个错误观点:S3C2440过时了,它还是ARM9内核,现在Cortex-A7、 Cortex-A8、 Cortex-A9、 Cortex-A15都出来了,它的性能太差了。
性能差没错,但它是否过时了呢?
那要看学到的知识是否过时。
我们首先来看看一个芯片是怎么组成的,里面有CPU、外设串口、I2C、SPI、LCD等。

我们写程序的时候,是去操作这些模块的寄存器,访问这些模块,并不是去操作CPU。
等你工作的时候,你使用不同的芯片,那么差别在于这些模块,这些硬件的操作,差别不在CPU操作,你写程序的时候,根本不涉及CPU的内部机制。

**不同芯片的差别:
在于外设操作,不在于CPU,写程序几乎不涉及CPU,只有涉及中断时,才会跟CPU的机制有点关系,但是不同CPU的架构差异很小,并且我们后面开发Linux驱动时,内核已经帮我们做好了这些处理,根本不需要去关心。**

从上一课我们知道,驱动=软件框架+硬件操作。这个软件框架对于所有的芯片都是一样的,因为都是用Linux内核。
而这个硬件操作,你在2440上掌握了串口操作,I2C操作、SPI操作,掌握了这些硬件的语言,你换一种芯片,是完全类似的。
我假设你选择了2440开发板,那么怎么使用2440开发板来学习单片机的开发呢?又使用什么开发工具呢?

以前在Windows开发的时候,我们使用ADS、Keil、MDK等,你直接写个main()函数,所有的细节都帮你实现了,谁来调用main()函数,有他帮你做了。这main()所生成出来的代码,怎么放入到内存里面,这工具也帮你做了,我们基本上只需要写main()函数,只需要写C语言就行了。但是这里掩盖了太多的技术细节,你看看我们官网->学习路线 的这篇文章,里面有个比较:
① Windows下的单片机学习,深度不够
·        Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。
·        它们封装了很多技术细节,比如:
·        你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;
·        你可以编写中断处理函数,但是却不知道它是怎么被调用的;
·        你不知道程序怎么从Flash上被读入内存;
·        也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪;
·        当你想裁剪程序降低对Flash、内存的使用时,你无从下手;
·        当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂;
·        等等等。
② 基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。
·        实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。
·        在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。
·        一切从零编写代码、管理代码,可以让我们学习到更多知识:
·        你需要了解芯片的上电启动过程,知道第1条代码如何运行;
·        你需要掌握怎么把程序从Flash上读入内存;
·        需要理解内存怎么规划使用,比如栈在哪,堆在哪;
·        需要理解代码重定位;
·        需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;
·        你会知道,main函数不是我们编写的第1个函数;
·        你会知道,芯片从上电开始,程序是怎么被搬运执行的;
·        你会知道,函数调用过程中,参数是如何传递的;
·        你会知道,中断发生时,每一个寄存器的值都要小心对待;
·        等等等。
·        你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。
如果我们基于ARM+Linux,不使用这些Windows工具,你可以学得更深,并且单片机的大全Bootloader,他就是ARM+Linux开发的,他并不使用Windows下的工具。
你基于ARM+Linux学裸板、学单片机,你可以学得更多,因为我们一切都从零开始的。我们既管理这些代码,也可以知道芯片上电的时候做了什么事情,知道程序自己怎么把自己读到内存,且知道怎么去规划内存,知道怎么代码重定位……

我说的这些概念,你可能听都没听过,这是因为Windows下这些好用的工具把这些统统都给屏蔽了。
我们使用ARM+Linux进行裸板开发,一旦掌握了ARM+Linux开发这套机制,再回过头去看这些Windows工具、看STM32的话,你只需要几分钟就可以搞定。

并且你可以无缝进入后续的学习,因为你已经熟练掌握了Linux的操作环境,后面的Bootloader是在Linux下开发的,后面的Linux驱动也是在Linux下开发的。
所以我们怎么去学习单片机的开发呢?
使用S3C2440开发板,在Linux环境(Ubuntu)下使用arm-Linux-gcc工具来编译程序。
你编写代码的时候,可以使用Windows下各种好用的工具,文本工具等,但便宜的时候,使用arm-Linux-gcc来编译

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
lee_st 2018-3-8 08:17:56
非常好的总结
回复

举报

lee_st 2018-3-8 08:18:02
点个赞
回复

举报

weidongshan 2018-3-9 09:48:51
回复

举报

龙怨天丶 2018-7-6 11:09:55
STM32嵌入式系统开发实战指南
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表