网友提问:
从事嵌入式底层软件设计工作需要学习哪些?如何做好软件设计?
优质回答:
一个具有几年嵌入式开发经验的设计人员来回答一下这个问题,也对自己的工作做一个小总结,个人认为,从事嵌入式底层工作要学习芯片体系结构、接口和总线技术以及操作系统相关的知识,在学习的基础上多练习,参与项目,并多思考和总结,经过项目的锻炼,一步步对软件设计有更完整和深入的理解,从而做好相关的设计工作,下面我从芯片体系结构、接口和总线以及操作系统三个方面详细总结一下:
第一,芯片体系结构
做底层软件的设计,肯定离不开启动代码相关的程序设计,学习体系结构比如ARM、PPC、MIPS和DSP等等,理解它们内核特点,指令集和芯片结构等知识,对于底层启动代码设计有很大的帮助,比如Cache、MMU和中断系统相关的程序设计,深入学习体系结构的知识,才能做好更深入的底层软件设计工作。
第二,接口和总线技术
如果说体系结构的知识是深入学习底层软件设计的前提,那么接口和各种总线的知识应该是底层软件的基础知识了,比如常见的低速串行总线:I2C、SPI、UART和CAN总线,并口,比如ARM的GPMC或者PPC的Local Bus或是DSP的EMIF总线等,高速一点的总线比如:以太网、PCIE和RapidIO等。做好底层的软件需要学习和了解它们的协议组成和工作机制,去思考一下它们工作的原理和具体芯片下的实现方式,这样才能让软件的每一步设计合情合理,提高工作效率。另外接口芯片,常用的Norflash、NAND、DDR、EEPROM、LCD、键盘接口和各种交换机芯片等等,这些常用外设接口芯片的工作原理也要弄清楚一些,这样设计的驱动软件每一个细节才会更合理,工作效率更高。
第三,操作系统知识
现在的嵌入式软件设计大多数都要跑一个操作系统,最常见的手机的安卓,或者各种Linux,实时性要求高一些的比如VxWorks,如果芯片资源有限,没有MMU之类的,可以考虑Ucos-II、FreeRTOS和RT-thread等轻型操作系统。总之做好嵌入式底层,还需要知道这些系统大致的工作原理和特点,可以擅长其中的某一个系统配合某一个芯片平台,但对于操作系统原理还是要知道的,甚至做好了可以学习一下它们的源码,因为本身系统也是一个软件,学习一下它们的结构框架,设计思想,对于自己的软件设计也大有帮助。
关于如何做好软件设计
个人认为没有捷径可以走,做好设计需要大量的实践环节,多参与项目的锻炼,在这期间多思考,多总结,多学习,逐步提高自己的认识和设计水平。
总结起来,嵌入式底层软件设计需要学习芯片体系结构、接口和总线原理以及操作系统相关知识,不断参与项目,多思考总结,提高自己的设计能力,从而做好软件的设计。
大家有自己的观点欢迎参与讨论和留言,一起谈谈嵌入式软件的设计。
其他网友回答
任何设计都需要提升两方面的知识功底。一个是软件的操作熟练程度。一个是长期培养自己的设计创新思维意识。
我不知道你指的是哪一个细分领域?给你从大体上来说一下吧。
1.基础的知识。要能看懂应这工作的原理。但重点在嵌入式软件。特别是操作系统及软件。这个。不但看懂了,还要熟练。
数字电路。《计算机组成原理》。嵌入式微处理器结构,汇编语言。C语言。编译原理。离散数学。数据结构和算法。操作系统。软件工程。数据库。以上是基本科目。
学习方法。虽然科目众多,但都是比较简单的基础科目。大部分都很好掌握。不一定全学。可根据自己的需要选修。时间紧迫的话可主攻c++,数据结构c2。
其他网友回答
设计上的问题不用急于求成,很多都是因为业务变更自然而然学会的。
特别是你在重构的时候,如果你不清楚之前的问题,你就不知道好的设计到底好在哪里。
例如,工厂方法模式,如果我们每次创建对象都需要去修改创建的方法,写一堆 if else,你就不会想到开闭原则的好处,扩展会如此方便。
设计模式等很多都是软件工程的研究领域,和具体的语言框架无关,语言的框架其实也是设计模式的应用。如果你使用现成的开发框架,基本上只要按照它给定的模式开发即可,不用太多涉及设计的部分,最好的实践就是,自己从头写一个框架。
我之前学习的时候就写过,不用很复杂,不用考虑太细。一点一点慢慢改进,不断重构,当你自己从头写一个 Web 框架,实现了路由分发、请求响应、中间件、数据库连接等等,你就会不断应用已学过的工厂、生成器、代理、适配器等等设计模式去改进了。
最后我想说的是,开发一个系统/软件,写代码只是其中的一部分工作,不要一上来就开始 coding,先思考、设计,可以画画 UML 图,理清活动状态转移的关系,类之间的联系等等。后面就编码如有神了。
作者:火眼狻猊链接:https://www.zhihu.com/question/398355706/answer/1257196952来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。