找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1374|回复: 7
收起左侧

关于嵌入式开发目前需要学什么东西

[复制链接]
ID:627651 发表于 2019-10-21 16:31 | 显示全部楼层 |阅读模式
问问大家如果想开发智能家居系统,用嵌入式系统做的话,需要学习那些知识,最好能有一些书籍材料指导
回复

使用道具 举报

ID:351097 发表于 2019-10-21 20:24 | 显示全部楼层
做智能家居会涉及到蓝牙(BLE)、wifi、ZigBee等,一般如果直接用芯片做开发,厂商基于自己RTOS做开发方案,比如TI OSAL主要用在BLE或者ZigBee,只要熟悉对应的RTOS就能做开发了。如果你是用MCU+通信模块,嵌入式系统就可以采用ucos或者linux,根据功能的复杂性选用适合的嵌入式系统
回复

使用道具 举报

ID:628219 发表于 2019-10-22 14:52 来自手机 | 显示全部楼层
没有你 发表于 2019-10-21 20:24
做智能家居会涉及到蓝牙(BLE)、wifi、ZigBee等,一般如果直接用芯片做开发,厂商基于自己RTOS做开发方案 ...

首先要学习linux基本命令,下个ubuntu自己练,当时我耗费时间长了,看的xxx的网课,一星期左右吧。
然后师傅让我学linux下的C编程。当时我以为有多牛逼,结果看了半天其实就是c语言,这部分根据你基础适当复习。
接下来师傅给我的任务是在开发板上运行hello程序,我用的板子是mini2440。当时以为很简单,但是搭环境确实耗费了太长时间。结合xxx第一期视频自己看,我告诉你用到的软件,视频有的地方不适合我们。suppervivi什么什么的一个软件是代替dnw的,然后CRT代替超级终端,cureFTP是ubuntu与win7传输文件,flashFXP是开发板与win7传输文件。可能不适合你的板子,自己摸索吧,相当蛋疼,要淡定。
最后师傅直接给我一个牛逼的不行的项目,这时候的我还什么也不会,经过摸索谈谈经验。xxx后面的视频不要看了,那个驱动部分,初学者根本看不懂。你做项目都是要移植别人的驱动,然后写应用程序操作驱动什么的实现功能,这是你要学国嵌视频第三不分,应用开发不分,什么I/O,进程什么的。学完之后找几本书或者从网上找个项目做一做。这时候你可以找到工作了,职位叫嵌入式软件开发。
一共半年时间,这只是刚刚入门,后面的驱动什么的,以后再说
望有帮助
回复

使用道具 举报

ID:629229 发表于 2019-10-28 09:09 | 显示全部楼层
日积月累
回复

使用道具 举报

ID:631729 发表于 2019-10-28 22:52 | 显示全部楼层
智能家居系统和传统嵌入式比,更强调上层软件设计和无线通信,所以不单单学单片机,有时间学一下python语言,可以做控制端,可以做WEB端。
另外就是学习下ESP32或者ESP8266,好多智能家居的通信或者控制芯片都用的这两个
回复

使用道具 举报

ID:631355 发表于 2019-10-29 09:14 | 显示全部楼层
、嵌入式开发学习方法-框架学习法
    嵌入式系统的学习方法很多人都讲过,相信大家在网上或者其他渠道接触过一些思路和方法,在这里讲一下个人的体会。
    首先来说,学习有没有捷径呢?一种说法是可以速成,几天就可以学会,我认为速成的说法太夸张了,那是不可能的事情。
    有些人讲学习没有捷径,你必须经过长期的努力,所谓功到自然成。但是学习嵌入式技术,如果说没有好的方法那也是不对的,学习一门新的知识体系肯定是要下工夫,但是也需要有好的指引,也就是捷径,实际上这里是讲的就是学习方法。
    方法很重要,如果没有方法,闭着眼乱学乱撞,肯定是不行的。就像我们去找一个没有去过的地方,自己跟着感觉去找,找到的希望很小,如果手里面有张地图,并且还有指南针,那就快很多;如果我们有导航,自然是更快更方便了。实际上,这就是方法的重要性。
    那么在这里,我们来介绍一种学习方法,这种方法也是粤嵌公司多年培训和产品开发经验所总结出来的。
    大家可能会问了,粤嵌也做过嵌入式培训?实际上我们有很丰富的培训经验。
    我们觉得,‘框架学习法’是最适合初学者采用的一种方法,这里面包含了快速原型的思想;也就是框架学习,快速原型。那么这里面的主导思想呢,就是从一开始就要看到嵌入式系统知识领域的全貌,然后逐渐深入!
    比如说,我们想了解北京这座城市,如果在胡同里转来转去,可能几年都搞不清楚这个城市是什么情况,如果我们先通过北京地图学习一下,了解下北航在什么地方,鸟巢在什么地方,香山八达岭在哪里。再加上我们到这些地方去看一看,可能很快就掌握了这座城市的全貌。
    在这里需要注意的是,即便是我们有了地图,也需要有一些基础,比如我们要知道鸟巢的来历,明白八达岭是怎么回事,实际上这些就是基础知识。也就是说我们在学习系统框架之前要具备一定的基础,否则这张地图也是看不懂的。
    学习嵌入式技术也是需要一定的基础的,一会儿我们专门讲需要什么样的基础。
    接下来如果我们想进一步的了解这座城市,就要去研究这座城市的历史,甚至是中国的历史。更细一步呢,还可以进一步研究故宫本身的地图。
    那么这样一环套一环。经过不断的研究,逐渐就会掌握这座城市的地理、文化、政治经济等特点。
    通过了解北京城这个简要的例子,运用框架学习法,在对不同层次的框架的学习过程中,逐渐了解和掌握整个系统。
    如果我们不注意方法,每天在胡同里面来回转悠,肯定是事倍功半,将在很长时间不得要领。
    2、嵌入式系统学习的框架
    学习嵌入式也是这样。必须掌握一定的方法,才能比较快速有效的学习。
    那么这个方法就是框架学习法,刚才我们也讲了,首先在了解这个基础框架之前我们要有一定的基础,那么这个基础呢就是单片机和C语言,不需要你掌握的有多好,但一定要具备一定的C语言编程能力。像其他有些课程,比如计算机专业的编译原理、数据结构,计算机系统体系结构,这些知识实际上还不太需要,了解一下就可以了。
    有了C语言编程基础,并且学过单片机,这个时候就可以学习一下嵌入式Linux的基本框架了,很简单,那就是要搞清楚bootloader、Kernel、和文件系统,接下来简单介绍一下。
    什么是BootLoader呢?
    实际上它是个引导程序,也就是硬件复位以后第一个要执行的程序,它主要工作就是初始化操作系统运行的环境,比如说内存、定时器、缓冲器等,当这个工作做完以后,再把操作系统的代码加载到内存,然后操作系统就可以启动并执行,到此为止,bootloader的任务就完成了。
    那么有人问了,没有bootloader行不行呢,可以的!但是呢,因为操作系统本身一般是个通用的软件,它要在不同的平台上运行,比如X86,ARM,POWERPC等等,而不同的处理器的初始化操作是不同的,如果操作系统的软硬要考虑在启动时候各种平台的差异性,那就显得过于复杂。除此之外,也有其他方面的原因,比如烧写系统的便捷性考虑等等,这里暂不做深入的探讨。
    常用的bootloder有很多种,比如U-BOOT、REDBOOT、LILO等等,我们开发板用的是Uboot。
    什么是Kernel呢?
    Kernel就是Linux的内核,也就是说Linux操作系统本身的代码。那么U-BOOT启动到最后,就是把它加载到内存,并且跳转到Kernel来执行。
    什么是文件系统呢?
    现在我们来介绍一下文件系统,这里需要了解一个事实,就是说Linux启动到最后一定要挂载一个文件系统。这个是Linux的一个特点,它不像其他操作系统,比如像VxWorks,是不需要文件系统的,VxWORKS没有文件系统也可以运行。 而且还需要了解一点,像QT系统、Android、以及Ubuntu系统它们的底层都是Linux内核,不同的是她们的文件系统不一样,也就是说,Android系统相关的一些代码,比如说图形界面系统、Android的虚拟机,Android的框架代码都在Linux最后挂的文件系统里面。 如果大家理解了这点,那么这几个系统的基本架构也就清楚了。
    搞清楚了这几个概念,实际我们就了解了Linux系统最基本的框架,然后呢我们根据开发板配套的资料,去学习如何编译这几个文件,因为像Uboot、Kernel、文件系统,最后编译生成出来分别是一个独立的文件,就是说会生成三个文件,最后我们要学会把这几个文件烧写到板子上。
    学会了编译和烧写,接下来呢,我们在这个框架的基础上,去学习如何做Linux上面的应用程序。
    什么是应用程序(APP)呢?这也是框架的内容,它是跑在操作系统上面,通过调用操作系统的资源去工作,是最终的业务逻辑,比如我们Windows上面有很多的应用程序,比如QQ、暴风影音、WORD、EXEL等,各种各样APP有很多。
    根据我们后期的视频教程,大家应该很快就能学会,比如说串口程序、网络程序等等,这些都是应用程序,我们不需要做太多,学习几个加深一下对框架的认识就可以了。
    再接下来,我们就需要学习Linux驱动方面的一些知识了,这也是在基础框架里面的,驱动程序可以看成是操作系统的一部分,它在底层专门和硬件打交道。那么大家稍微了解一下,就会知道Linux的驱动包括有三种:字符设备、块设备以及网络设备。
    这个时候呢,大家要注意,只需要学习字符类设备驱动,其他两种先不要去管。一定要记住,最初学习嵌入式技术的时候不要去研究块设备和网络设备。也就是说,把字符类设备搞明白就可以了。因为一般的公司开发嵌入式的产品仅限于字符设备的开发,掌握字符设备的框架思想和开发步骤就能够胜任了。至于块设备和网络设备,直接用开发板或者某个开发平台本身提供的驱动就足够了,这些是一线处理器厂家做的事情,一般情况下不需要我们去完成,这些处理器研发的厂家在为处理器开发配套BSP的时候才会涉及这些工作。
    当然了,有的同学可能会讲,某某公司就是在做块设备驱动,我的意思是讲,从嵌入式这个行业总体上来讲,大多数公司都不需要那么做,很多技术都是直接拿来用。我们掌握了字符设备驱动的开发方法,已经能够应付大多数公司的开发要求,对于一个还没有入门的学生来讲,一定要按照我说的办法来学习。
    等将来熟练掌握基本技能以后,可以根据框架学习的方法,再去研究更深入的编程。这个时候,那些计算机专业的课程,比如数据结构、计算机系统体系结构、各种算法等等就可以派上用场了,自己的水平也会在学习的过程中再次升华。
    学习字符类设备驱动,请跟着粤嵌的视频去学习LED的驱动编写方法,以及蜂鸣器、AD转换等这些跟GPIO相关的驱动开发技巧。
    掌握了这些,可以讲,我们已经成为了一个比较合格的嵌入式驱动工程师!
    这个时候我进一步介绍一下什么是快速原型,如果学过软件工程的话,那么大家会听说过一种自顶向下的产品开发方法,这个方法很有效,多数产品的开发方法都是遵循这个思想,大概就是从最初的可行性分析,然后概要设计、详细设计,编码,测试等等。
    除此之外呢,还有一种开发方法就是‘快速原型’,这个是微软采用的一种方法,简而言之呢,快速原型是个逐渐迭代的方法,就是说让产品尽快把雏形开发出来,然后逐渐清晰,一步步走向成熟。
    在这里我们把快速原型法用到学习上,它原来是种开发方法,我们这里借鉴过来,借鉴到框架学习的思想上。
    也就是说,我们掌握一定的基础以后,就要去学习框架,当这个基础框架清晰以后,再去学习更新更深入的框架知识,这样一环套一环,环环相扣,最终研究越来越深入,进而成为这个行业的专家。
    那么在嵌入式行业的工程师的职位其实也是这个样子的,大家看一下:
    基本数字电路 + C语言 + 基础框架知识 -----> 嵌入式驱动工程师
    数组结构+编译原理 ------> 高级嵌入式驱动工程师
    计算机系统体系结构 + 操作系统(从抽象到具体)-------> 系统架构工程师
    因为在第一个阶段,你会发现,只要会C语言,有良好的编程功底就够了,在工作的时候很少涉及到编译原理、数据结构这些方面的知识,那么很多其他专业的毕业生,甚至原来学机械设计的同学都可以成为嵌入式驱动工程师。
    实际也是这样,在大多数嵌入式技术公司,尤其是应用产品开发的公司,只要了解基本的Linux架构的知识,并且能够编写字符类的驱动程序就够了。因为像网络设备驱动以及块设备驱动,基本都有个DEMO设计,只要参考这个DEMO做就可以,根本不需要我们做什么,如果说需要做的话,那也是改一下GPIO的设置,修改一下中断的引脚,仅此而已。
    那么深入学习的话,分析操作系统源码的时候就会发现,数据结构的知识逐渐排上用场,尤其是在某些专业公司,负责某个专用领域的时候,这时候可能会改写操作系统的某部分代码,来适应他们自己硬件的各种情况,将会深入分析某方面的技术,比如文件系统、网络协议等,这个时候数据结构等方面知识就显得很有用了。
    有了基础的原型以后,通过继续学习新的知识,逐渐使上一个层次,更精深的了解嵌入式技术,同时知识体系更加完备,可以做更高层次的工作了。
应用这样的学习方法,在学习过程中,也会使学习过程始终有目标,而且不会感觉枯燥,每天都会有成就感,从一开始就能抓住嵌入式系统的脉络,只要付诸努力,持久学习下去,就能成为嵌入式行业的专家。
    最后我们总结下,我们要想比较快的掌握嵌入式技术,要应用框架学习的方法,在一定的知识基础上就开始学习基础的框架知识,这样就很容易入门,随着开发经验的积累,再去学更深入的基础知识,以及更深层次的框架知识。这样相互迭代,直到能够精通嵌入式技术。
    这个方法也充分说明计算机科学是个实验科学。
    那么在学习过程中,要注意,不用学习过多的基础,也就是说有了C语言和单片机的基础就可以学习嵌入式的基本框架,然后就能够成为一个合格的嵌入式工程师; 以后可以继续深造,学习数据结构编译原理操作系统等方面的知识,深入学习算法,从而再去学习Linux更深层次的框架结构,使得整体水平得到进一步的升华。
    现在我们总结一下,把学习嵌入式技术的路线图跟大家澄清一下,那就是:单片机+C语言----->学习基础框架知识(包括bootloadre,Linux内核、文件系统的编译和烧写----->再去学习Linux上层应用的编程,以及字符设备的驱动,学完以后你就会觉得入门了,能做一些事情了-----> 再深入学习计算机系统结构、数据结构、操作系统原理等等一些知识,通过分析Linux系统源码,直到熟练掌握嵌入式编程技术。
    3、关于裸机程序和仿真
    有些用户希望通过ARM开发板来学裸机程序,其实我们不建议这样做,在ARM上做一些裸机程序,不是不可以,而是没有太多价值,因为裸机程序根本发挥不了ARM处理器的性能,只有运行了操作系统才能够充分挖掘ARM处理器的优势,更能够保证系统运行的安全和稳定性。
    如果真的想学习裸机程序,单片机就够了。从架构上来讲,单片机和ARM是一样的,都是CPU,而且编程思想也没有多少区别,只不过ARM速度太快了,只有在上面跑操作系统,并使用多任务的编程方法才能最大化的发挥ARM处理器的优势。
    在实际产品开发时也是这样,几乎没有拿ARM跑裸机的方式来开发产品的。如果用裸机方式来编程,推荐使用单片机,这样整体成本也会小很多,事实上也是这样的。
    早期的时候,我们在ARM上也做过很多裸机程序,并且用仿真器来调试;很多人,尤其从单片机转过来的人,都希望学习下这种技术,因为他们感觉裸机程序更亲切,而直接用操作系统觉得很不踏实,不能够完全掌握系统的运行情况;其实呢这种想法是不对的。我们必须在抽象的层次上来开发产品,逐渐转变观念,不能说开发一款产品,就一定要对每个程序的细节都非常清楚,应该学会在操作系统这个抽象的软件上来开发产品,这样做才符合潮流,也是产品发展以及个人发展必须转变的思路和观念。
    因为我们看到太多的做单片机开发的工程师很难能转到嵌入式产品的开发当中来,恐怕观念的转变可以说是最大的障碍,希望引起大家的注意。
回复

使用道具 举报

ID:631355 发表于 2019-10-29 09:15 | 显示全部楼层
熟练使用Linux操作系统
精通Linux下C语言编程
精通嵌入式Linux应用开发
掌握ARM处理器平台及其接口硬件开发
掌握嵌入式Linux下Bootloader的移植方法
精通嵌入式Linux内核裁减移植及内核调试
精通嵌入式Linux下常用接口的驱动开发
熟悉Java语言编程
熟悉Android应用开发
掌握基于Linux内核的Android底层系统开发
熟悉嵌入式Linux实际项目案例开发流程
熟悉基于Android系统实际项目案例开发流程
回复

使用道具 举报

ID:631355 发表于 2019-10-29 09:15 | 显示全部楼层
首先需要C语言基础,数据结构,linux命令,网络编程,操作系统,数据库,移植内核,驱动编程,各种总线知识,通信协议,硬件和软件知识,上层和底层的软件知识都需要有所了解,就算你不做具体的编程,也要知道一点工作原理,因为嵌入式开发需要考虑的是整个程序
回复

使用道具 举报

ID:631355 发表于 2019-10-29 09:18 | 显示全部楼层
1、嵌入式开发设计流程:
1)ARM嵌入式Linux系统构造与驱动开发范例
2)嵌入式设计及Linux驱动开发指南
3)嵌入式Linux应用程序开发详解
都属于Linux开发设计流程方面的入门书籍,嵌入式开发的基础
2、Linux驱动开发:
1)嵌入式系统接口设计与Linux驱动程序开发 北京航空航天大学出版社 刘淼 强烈推荐; 包括各种硬件总线接口范例,接口开发必备
2)Linux设备驱动程序《Linux Device Drivers third edition》,Linux驱动开发必备经典,粗读查询即可,当然最基本的字符设备驱动和块设备驱动必须熟练掌握
3、 Linux应用程序开发:

UNIX环境高级编程
UNIX网络编程全卷
4、Linux内核开发:
内核完全注释,源代码级的分析,但版本较低
深入理解Linux内核Understanding the Linux Kernel,太深了,东西太多嵌入式开发要学哪些,最后看合适
Linux内核设计与实现Linux Kernel Development,内核整体结构和基本理论知识
5、ARM:
ARM体系结构与编程,杜春蕾
ARM应用系统开发详解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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