新的一年,新的征程,新的成长

工作已经一年半了,才发现自己最懒得就是写博客,从没有认认真真写过任何总结性的东西,也没有对学过的知识及时进行总结和分享。可能是在一个做产品的公司的缘故,感觉这一年半,自己的进步很小,没有学到太多的东西。
其实我自认为在学校还算是一个乖学生,在自己真正投身工作之前,学的知识已经比较多,从事过HTML、JSP、C++、Java、安卓、嵌入式Linux开发,也做过非开源的VX-WORKS操作系统,并且研究过UC-OS操作系统,对于Linux开发,受到过自应用层到Linux驱动,各种子系统,再到ARM汇编一整套系统的教育,读过u-boot各个阶段的代码,以及部分必要硬件的初始化代码,和内核初始化的代码。
工作的第一个任务,就是调试安霸S2L芯片外围的设备给远在美国的VICON公司做技术支持,包括SD卡,音频芯片,RTC芯片,电机芯片,陀螺仪芯片等等,加深了对各种总线的理解,I2C总线,SPI总线,尤其是SPI总线,目前市面上大部分通过SPI总线连接的设备,设计程序的难度在于应用程序,因为一般都使用通用SPI驱动。
第二个任务是加拿大的March公司指派过来的,将uboot和内核中的1位硬件ECC,替换成4位软件ECC,说实话,这个听上去很难,但是March已经完成了90%的工作了,对于我来说,除了移植还是移植,虽然其中需要修改的代码非常庞大,特别是理解March的意图。最后还是顺利完成,其中March留下的bug,也在我的导师肖工的帮助下,得到修改。
在接下来的工作中,更多的是维护S2和S2E平台,包括编码模块,和外围硬件模块。其中使我映象最深刻的是了解了amba从VIU到VENC这一系列的变化,各个模块的功能。这让我在后期学习海思平台得到很多的启示。在此我要特别强调SD卡模块。其实公司的SD卡应用程序设计没有什么太大的问题。但是SD卡模块频繁出现各种问题,主要原因是硬件设计的问题。实际上SD卡的主频一般都在100MHZ以上,从海思和amba的SDK中就有体现,他们也在逐步提高SD卡的主频,以此获取更大速度。amba SD卡控制器不得不承认有很大的缺陷。海思在过去的芯片中SD卡这块也有很大的缺陷,但是海思在3516上SD卡控制器做了很大的改良,基本已经没有什么问题。但是为什么公司的SD卡模块还是老是出现问题,其一,走线过长,其二,靠近电源,其三,靠近各种干扰源,其四,程序员在应用程序中任意修改SD卡控制器的寄存器,寄存器由驱动管理,不需要人为修改。我们SD卡电路参照了几十年前的做法,实际上早已淘汰,电流不够大,不能支持长线路传输,不能支持大的主频,容易受到干扰。最为严重的是,SD卡的总线和flash总线是一条,意味着,一旦SD卡模块出问题很容易导致内核崩溃,系统紊乱,这是极其大的设计上的缺陷。
说实话,我很受不了硬件工程师写的软件,充斥着无用的代码,到处都是无效的注释,一句话看不懂。第二句,请留下文档。TI的MSP430着实为难了我太久,代码不多,但是改了无数的bug,就在今天,还在让我改bug。
这半年大部分时间,都花在了,从amba到海思的转换,公司做了好几年的海思,但是无处不充斥着将就,怎么快怎么来,也没有很好的理解海思SDK的设计理念。海思从VI-VPSS-VOUT-VENC-MD这些模块的功能,在我们自己代码中该怎么调用,该怎么使得海思SDK能够更加高速稳定的运行,说实话,对于这些,公司完全没有任何积累,前人无非是在堆积垃圾代码,一层一层往上堆,不存在任何注释,不存在任何文档,仅仅只是完成功能,不考虑耦合性和扩展性,以及模块这么设计对于目前性能的影响,对于将来将会出现的需求的影响,全然不顾,然后前人走了,后人接着挖坑。
其实之前完全不是吐糟,也可能仅仅是一种吐糟。
在接下来的4个月里,我想用手中的ARM9开发板,重新深入学习ARM汇编,Uboot,LINUX驱动,LINUX内核,虚拟文件系统。从市面上买一款sensor,实现一个sensor驱动,在此基础上实现几个应用层的项目,学习使用WIFI,蓝牙等市面上流行的通信方式,传输大数据。写博客的目的,是为了让自己坚持,坚持一个目标。

你可能感兴趣的:(有感)