嵌入式软件系统开发历程

大家好,今天我来介绍一下我自己的大概履历,尤其是我的嵌入式软件开发历程。
现在我在忙着找工作,我发现许多来学校招聘的企业都是招聘Java研发工程师、ios、Android开发工程师。因为最近一年都在做嵌入式软件开发,有些慌乱。怀疑会找不到工作。
本科是软件工程专业出身,因为在大学之前我对计算机技术的了解几乎是空白,之前没有接触过计算机设备,大一的时候C语言挂科,计算机程序设计实践重修。即便如此,最后还是保研了。大一一学年以及大二上学期我的成绩一直都是处于专业里中游的水平。后面我渐渐适应了大学里的学习节奏,你可能觉得我怎么适应的这么慢,其实我那时候也玩游戏。这些就不说了。总的来说,依照我本科时候的技术水平,我是找不到工作的。我十分承认这一点。自然有许多比我技术水平还要差的同学,他们最后能够找到工作,我也感觉没什么。之所以能够保研是因为从大二学年下学期,我就努力的去自习,我那时候很迷茫,但没办法,觉得只要努力学习就对了。可以说也是幸运的。最后两学年综合成绩达到专业前五名。我曾经到过苏州实习,其实就是学习Android开发技术。我担任我们那个小组的组长,最后开发了一款小型的APP。
研究生期间参与了一个小型项目、两个中小型项目。第一个项目是关于物联网无线通信技术的。我负责协助Android客户端的开发。但是现在关于Android我已经有些生疏了。所以一开始校招我还网申了一些移动客户端的开发岗位。经历了腾讯、新浪、网易等大公司笔试的打击之后,我开始思考我到底适合什么。有一段时间,我感觉只要是一份软件开发的工作我都可以胜任,但是因为一直忙于科研项目,没有任何准备,总是在编程题上栽跟头。尽管我一直在进行嵌入式系统软件开发的工作,但是关于数据结构中的图、树甚至链表我都没有用到。从最开始到现在,我从一个C语言挂过科的同学,成长为能够独立承担一个嵌入式项目软件系统的开发。只是一年的时间,我学会了C语言中的socket通信,多线程并发、内存动态分配等技术。我不知道自己到底是什么水平,实验室一起做项目的同学都说我很有能力,但是现实却是我没有找到工作。我也很困惑。我知道自己技术确实一般,但是我不想再傻傻接收许多技术比我差的人都拿到Offer我却一个都没有的尴尬境地。自己有些不善言谈。面试的时候,别人问我什么我都如实回答。忘记了就是忘记了,不在熟悉就是不在熟悉,但也不代表我不能够快速上手,不能够完成分配给我的任务。但别人怎么相信,毕竟求职大军实在是人数太多。但人们不了解并不影响我继续努力。
从去年9月份我开始使用C语言进行项目的开发,从一个源文件到两个、三个、到一个完成的工程。一直都是我一个人在编程序。我也确实参与了华为公司某个部分的协助开发调试工作,那时候甚至加班到晚上十点多钟解决开发中遇到的问题。我也确实参与了项目中设备的实地安装与调试。所以我还是相信自己的能力。我技术确实不够精通,我会Linux内核的裁剪,但是并不太了解Linux内核驱动。只要有资料和指导文档,我可以尽职尽责的做好BSP搭建、编译与调试这项工作。但是我该怎么描述,仿佛只要我一开口,就会暴露自己对知识了解不够底层的缺陷。我自然也想学会许多物联网与嵌入式的底层核心知识,但是我一直都是自己钻研,周围做嵌入式开发的人屈指可数,有些同学是在我原来的工程源码上了解嵌入式软件系统开发的基础。

已经一年了,嵌入式软件开发过程中我遇到过很多难题,尤其是硬件模块的调试。有时间我会再好好整理自己曾经遇到的问题与解决方法。现在一心想要找到一份嵌入式Linux开发的工作。我我会尽心尽力完成我的任务,也会积极帮助团队成员解决项目开发中遇到的问题。但是怎么才能够让面试官相信我呢。现在没有Offer不代表将来我的技术水平不会超越别人。还是相信自己。早就海投简历了,投了一些国企,也投了一些小企业。希望自己能够安心继续科研项目的工作,顺利完成我的学业生涯。也希望自己将来入职,能够遇到一群努力认真工作的人。这样很多事情都会有效率上的提升。

下面是我一些粗略的总结,都来自于我亲身的体验。

1、首先熟悉串口设备编程,网上有一些通用的串口操作函数。比如设置校验位、波特率以及串口的读写(其实就是对Linux下文件句柄的操作)
2、串口有时候读取或写入异常就要检查一下有些字符的校验设置选项
3、工程模块一个个添加,在最开始就要有一套自己的编程规范,比如说怎么定义变量,怎么定义函数名,怎么定义宏。如果没有标准,工程迟早会乱掉的。之前开发Android工程也是一样。就是要有一套自己的软件设计规范,就像设计一套通讯协议标准一样。然后很重要的一点就是注释。即便是自己的程序,不写注释,一个月之后看着也会变得很陌生。
4、硬件部分的调试一定要多询问硬件开发人员,因为自己在那里钻研只是浪费时间,也不了解原理。与硬件开发人员一起调试设备可以学到一些很有用的知识。当然最好还是有一份指导文档。按照指导文档来做就会事倍功半。
5、嵌入式软件系统的开发最开始不会用到数据结构的难点,只是数组就可以解决大部分的问题。但是定义变量的时候要注意它的作用域,尤其当你开启了多线程之后,变量的值恐怕不再是你想的那样。还有一点就是动态分配的内存一定要注意释放,然后置空,否则内存泄漏的问题严重会导致系统崩溃。
6、我学会了使用JTAG烧写特殊格式的文件到NAND Flash中,使用的就是Xilinx官方的开发工具,Xilinx官方也有一些指导文档,只不过是英文的,需要自己找一些命令来操作。还有就是将image.ub第一次烧写到内存中,让系统现在内存中运转起来。然后拷贝格式化emmc的文件。之后挂在emmc,再之后自然是直接将image.ub拷贝到emmc上面。那么下次系统再启动的时候就不要自己手动输入image.ub文件在内存中的起始地址。BOOT.BIN会自动到emmc上面去寻找image.ub文件,从而启动片上Linux操作系统。
7、关于一些硬件模块的管脚,就是GND接GND,电压接电压。然后RX接TX,TX接RX。注意电压大小要相同,否则就需要转压模块。
8、测试温度传感器需要在最开始编译BSP的时候进行配置,petalinux有图形化的配置页面,根据官方要求进行配置项的选择,之后保存编译。(4G模块 RTC模块也是一样)
9、嵌入式系统还有最重要的一点就是要有配置文件,记录下系统动态或者远程修改的配置,防止系统重启或者异常断电导致配置丢失。
10、普通的嵌入式系统必备的功能有自动校准时间功能,平台通讯功能、传感器数据采集功能、远程更新功能。还有最重要的主控程序。这些都是基本的功能,其他的模块可以根据具体场景与需求动态扩展。

今天,就先说到这。

你可能感兴趣的:(IoT,&,embedded)