RTCSD2017-3

应届毕业生需要掌握的能力

以下仅为个人观点,欢迎讨论

1. 必要能力

1.1. 编程能力

作为一个程序猿,怎么能不会写代码呢。完全掌握一门语言是关键。
而且不仅要会写,还要写得好,比如代码规范,debug。

1.2. 学习能力

如今的技术一天一个样,如果没有一定的学习能力,很快就会被时代所淘汰。
只有活到老,学到老才能跟上时代的步伐。

1.3. 自行解决问题的能力

不要遇到问题就到处问人,不如先问问神奇海螺百度。百度不知道,再问问google。
另外,一些官方的文档,源码也是寻找答案的好地方。

1.4. 与人沟通的能力

团队协作总要与人沟通,遇到真的解决不了的问题也要与人沟通。说话方式我就不说了,我也不是很懂。
有一点很关键:
一定不要在聊天时直接粘贴代码。
一定不要在聊天时直接粘贴代码。
一定不要在聊天时直接粘贴代码。
这样真的很影响阅读!(一般情况下公司代码是不允许外传的)
如果需要传递代码,要么截图,要么上传到Ubuntu Paste
(我就知道这个,其他可以贴代码的网站还有很多)

2. 可选能力

2.1. 熟悉某种或多种MCU

主流的MCU,如ARM,AVR,MSP(我就知道这么几个,欢迎打脸)多少要了解。
虽然现在ARM框架盛行,尤其是STM32系列。感觉到了M4以上,基本都满足要求。
是不是我见识太浅了。

2.2. 熟悉周围电路和常用芯片

写硬件必须要与周围电路和常用芯片打交道,能看懂是第一阶段。
如果能照搬着用是第二阶段,如果能自主设计或者改良就是第三阶段了。

2.3. 熟悉某种或多种RTOS

由于任务越来越复杂,各个任务之间数据同步,越来越复杂,MCU的结构也越来越复杂。
就需要RTOS来帮忙进行任务调度,无论是轻量级的FreeRTOS等等,重量级的实时Linux。都是不错的选择。

3. 加分能力

3.1. 熟悉常用的数据结构

由于任务越来越复杂,单单用数组,指针已经不能满足我们的要求,需要一些数据结构来支撑整个任务。
如果会用一些常用的数据结构,比如栈,队列,哈希表等等。会大大缩短任务的执行时间(降低时间复杂度)。
而且,也能对RTOS内部的一些实现有更深刻的理解。

3.2. 熟悉常用算法

算法常常和数据结构放在一起谈论,但是在这里,更多的是一些控制算法,如PID,模糊控制。

3.3. 熟悉数电模电

这些就不仅仅只是设计周围电路或者常用芯片,而是设计一些更加复杂由多个芯片组成的模块。

3.4. 熟悉FPGA

作为硬件设计的最终手段(额,,我个人是这么认为的),FPGA可以完成许多MCU无法完成的任务。
往往FPGA是和MCU协同工作的。

4. 总结

必要能力中,除了编程能力以外,另外三个,说是能力,不如说是一种习惯。
这种习惯需要培养,前期可能比较不习惯,但是滚起雪球来就很明显了。
编程能力也是的,当你学会一种编程语言之后,再学其他的就没那么难了,因为他们的格式,语法都差不多。
你也没见过哪个高级语言里,if-else结构中,条件不成立的在条件成立的部分之前。(汇编语言里为了优化,似乎有这样的操作)
可选能力的话就需要根据要去的公司和项目来决定,当然提前会一些也是不错的。
至于加分能力,顾名思义就是加分嘛。如果不会这些,应该不会影响日常的工作。但是了解一些的话,对日常的工作会有很大的帮助。
如何提升可选能力和加分能力,自然是在项目中学习,在实战中学习。有了上面的必要能力,学起来不是问题。
当然可选能力也可以通过阅读文档来学习,(我个人不提倡)虽然较慢,效率不高。但对于现阶段没法完成项目,或者急于面试的同学们仍是一种方法。

基于模型的设计流程的优缺点

我个人觉得,基于模型的设计流程不应该和其他传统的设计流程相比较。
Managing Model-Based Design中,Chapter 4,小标题使用的都是Model-Based Design Within xxxx。
并且摘录到以下内容:

This chapter provides an overview of common development methodologies and
explains how Model-Based Design core concepts support these methodologies.
It then explains how Model-Based Design can help you adapt any methodology
to the needs of your project.

综上基于模型的设计流程更多的应该是和传统的设计流程相结合在一起,作为辅助。

优点:

我个人还有一点小观点,传统的设计流程,无非是把各个流程拆分,组合,顺序调转,以达到更好的效果。
但是万变不离其宗,所以以下的分析就以最经典的瀑布模型为例:

需求分析

基于模型的设计可以很快的把整体效果呈现出来,给客户或者团队成员展示。
这样相对文字和图片的描述更加直观,每个人也可以单独查看自己感兴趣的部分。

设计

在设计时,基于模型的设计可以很快的切换另一个设计并进行仿真,查看是否满足要求。
一个好的组件库甚至不需要做一些接口转换就可以完成。

编码

目前一些支持基于模型的设计的软件,如Matlab,都可以自动生成代码。
再加上一些BSP的库,就像在面包板上接线一样,接口对应就行。

验证

将同一组数据同时交给程序和模型,然后将程序所得结果和模型所得结果进行比较,可知其正确性。
还有用模型模拟被控制对象,并接入程序,模拟真实运行环境,甚至极限环境。可知其鲁棒性。

维护

维护的一大关键是查错,如果可以得到出错时的数据,将数据导入模型就可以模拟出当时的环境,
以便找到解决办法。

缺点

模型库对于任何一家公司都是需要很大的成本,无论是金钱上的成本还是开发上的成本。
除了成本之外,驱动模型库需要大量的数据,数据的收集也是一大问题。
另外,如果不是对各个方面的知识都有所了解的话,用起来就会有点无从下手。所以不建议纯新手使用。

举例

之前有做过一个两轮小车,其中涉及电机控制,PID闭环,惯性导航。
当时只是有尝试过仿真电机,但是因为电机参数都不知道,所以以失败告终。
另外,在学习惯性导航的时候,也用到了建模和仿真,有很明显的效果。
最后的感受就是,自己用起来很麻烦,如果有现成的就很好用。
其原因,大概还是自己学识浅薄吧。
如果完整的使用基于模型的开发流程的话,整体的设计会非常快,毕竟模型就是拖动几个控件。
可行性的验证也会非常准确,不至于几个月都没办法确定惯性导航的可行性。
由于编码较为简单,加上初学STM32,所以更多是强调自己学习,不能依赖自动编程。
之后的验证和维护可能比较麻烦,因为是我们自己设计的小车,可能没有足够的传感器来获取想要的数据。
也就是说,没有办法拿到数据和模型中的数据相对比。
综上,基于模型的开发流程还是减少了工作量,大大的推进了项目进展。利大于弊。

以上为个人观点,欢迎讨论

原文地址:https://www.cnblogs.com/89yanyu/p/7632532.html