当前位置:首页 > > 嵌入式微处理器
[导读]一个字,累!

一年多来,搞嵌入式驱动开发项目做的不少:


从网络驱动到CAN驱动、从Dataflash驱动到NAND/NOR FLASH驱动、从CF/IDE驱动到各种嵌入式文件系统、从LCD/VGA驱动到音频驱动、从IAR到ADS再到GCC、Ucos到linux、从I2C总线到SPI再到SSC以及TCP/IP协议。


但感觉并没有学到什么东西,就一个字:


累!


老实说这些项目,很少有驱动是自己动手写的,基本都是找来相近的代码改过来的。

有时候感觉自己现在做什么都是半桶水,对自己超没信心了。


对linux也是一知半解,对启动脚本,系统配制,shell、makefile以及应用程序编程,都了解一点点但没有一样精通的;工作主要使用C语言,可是有时候写个测试程序也是一堆错误;英语自感觉还不错,但是有时候看datasheet也会发懵!


生活艰难,工资又低,想提升自己却又谜茫不已。


大牛建议:



1) 为了今后的发展,你除了考虑广度以外,更重要的是注意知识的深度。


譬如,做过网络驱动,那么是不是只停留在会写驱动的表层上,有没有对Linux内核的网络结构,TCP/IP协议作过深入的了解。



2) 在Linux下开发很多时候都要利用现成的东西,没必要什么都自己搞。关键是变成自己的驱动后是否了解原作者编写时背后的一些东西。 你应该不止是简单的让它工作。写驱动的时候就要考虑它的性能问题,并给出测试的方法(当然可以利用现成的许多工具,譬如测试网络性能的netperf等)。


当你写过Flash驱动,可能会知道Flash的性能有时候有多重要。



3) C程序的自我修炼,是否考虑到软件工程方面的一些东西,程序的可维护性和扩展性,譬如LCD驱动,是不是从Sharp到NEC的只需要集中修改很少的几个地方?


对于不同品牌的Flash,如果使得Flash的驱动做的更具有灵活性。



4) 如果有时间结余,可以关注Linux内核的发展。譬如LCD的驱动有没有考虑到V4L2通用架构,譬如网络驱动用到了NAPI了吗?当然在此之前,假设已经对LDD3, ULK2理解的比较熟了。



5) 现在所作的这些驱动还算不得非常核心的东西。如果你想有更好的发展,可以考虑往audio,video,net方面发展,你应该多注意真个行业需要什么样的人才,上述每一项都需要很厚的底蕴,譬如video,需要了解MPEG4, H264等,怎么也要个1到2年才能算个入行阿,所以我建议不要只顾闷头做东西,要适当关注目前的一些应用。



6) 对硬件知识的补给,做嵌入式Linux这一行不可能不读硬件的Spec,如果你对硬件的工作机制理解的比较透,会有助你写出性能好的驱动程序。


顺便提一点,适时的提高你的英语水平,对你的职业生涯绝对有帮助。(不要等需要的时候再补,来不及)



7) 如果有时间,平时注意对Linux应用程序编写的了解/积累,也将有助于你写出很好功能很好的驱动程序。



8) 永远不能以为自己做了很多东西,就驱动而言,像TVIN/TVOUT, USB, SDIO等等,好多未知领域呢。在问题还没有解决之前很难说清是哪里不对了。


有时候是datasheet里面的一句话没有注意,还有好几次调不出来最后查到是PCB的问题,所以有时候特别晕。


此外,其实如这位网友做的这些东西,在不懂的人看来,好像很高深,不能逾越,但是任何东西都一样,你要不断的进步,第一次做某个驱动和第二次再做这个驱动,你应该获得更多,如果你没有这种感觉,那你就是白做了。


比如,你第一次写Linux驱动和你第十次写linux驱动,你应该有不同的感觉,更甚者,也许你有了一套很好的框架,无论任何驱动,你只要套用框架,然后针对不同的datasheet做点修改就可以了。


如果你能自己总结这些框架并把它分享给大家,那么你的价值又高了不少。


你在做驱动的时候,肯定会用到与内核相关的东西,或者需要和内核中的某些模块配合,这样你也要理解内核的某些部分是如何实现的,最后,你应该可以很好的掌握linux的内核整体框架是什么。


这些都是进步,都是在你一次又一次的开发中需要总结的东西,如果你不总结,永远都是从头开始(或者说永远都是还没看懂别人代码为什么这么做的时候,就去改它,然后可以工作了),就完事了,这样你永远也不可能提高,最后你就有了现在的这种感觉,觉得自己什么都不是,什么都不懂。


还有一点要说明的,现在有许多人搞linux开发,却不去用linux系统做为自己工作的平台,在这种情况下,你很难理解linux内核的实现机制,以及为什么要采用这种方式实现。


你都没用过linux系统,就想去实现一个与linux运行机理相符合的项目,这是不可能的。就是你这个项目成功了,它也肯定不是最优的,或者是不符合linux的使用习惯的(包括内核的扩展和应用程序的实现)。


所以,最后想说的是,你一定要定期总结,总结你这段时间做了什么,你从中得到了什么,为了你以后可以更好的做好类似的工作,你应该去看些其它的什么东西;二是你一定至少要在工作的开发环境中使用linux作为你的平时工作平台,而不要使用虚拟机和服务期,因为你只有完全了解了linux的使用,你才可以为它开发符合它规则的项目。


嵌入式ARM

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发中,整型溢出是引发安全漏洞和系统故障的常见原因。据MITRE统计,CWE-190(整数溢出)位列嵌入式安全漏洞前三。本文从工程实践角度,探讨边界检查算法与数据类型选择的协同防护策略。

关键字: 边界检查算法 嵌入式系统 整型溢出

在嵌入式系统广泛应用的今天,网络通信已成为其不可或缺的功能。然而,受限于资源、功耗和实时性要求,嵌入式系统中的TCP/IP协议栈性能优化成为关键挑战。本文将从协议栈选型、参数调优、硬件加速及代码优化等方面,探讨嵌入式系统...

关键字: 网络协议栈 嵌入式系统

在资源受限的嵌入式设备(如MCU、低功耗AI芯片)上部署深度学习模型时,需解决存储占用、计算延迟、功耗限制三大挑战。TinyML通过模型量化与推理加速技术,将ResNet、MobileNet等模型压缩至KB级,实现边缘设...

关键字: TinyML 嵌入式AI

在嵌入式系统资源受限与功能扩展的双重压力下,模块化开发已成为提升软件可维护性的核心策略。通过将系统拆分为独立功能模块,结合清晰的接口定义与分层架构,可在STM32等MCU上实现代码复用率提升40%、缺陷修复周期缩短60%...

关键字: 模块化开发 软件架构设计

在嵌入式系统、工业物联网等各类电子设备中,UART与网口是两种应用广泛的通信接口,前者作为经典的串行通信接口,承担着简单设备互联、调试日志传输等基础任务,后者则专注于高速、远距离的数据交互,是设备接入网络、实现大数据量传...

关键字: 嵌入式 通信接口 网口通讯

在资源受限的嵌入式场景中,根文件系统(RootFS)的体积与功耗直接影响产品成本与用户体验。基于Yocto构建的轻量级根文件系统,通过精准裁剪与动态功耗管理,可将系统体积压缩至30MB以内,同时降低30%以上的待机功耗。...

关键字: Yocto 根文件 RootFS

在嵌入式硬件调试中,时钟抖动和电源轨噪声是影响系统稳定性的两大关键因素。示波器作为核心调试工具,通过其高级触发、频谱分析和眼图测试功能,可精准定位问题根源。本文以泰克MDO4000C系列示波器为例,解析时钟抖动与电源噪声...

关键字: 示波器 嵌入式硬件 时钟抖动

嵌入式系统开发中,硬件与软件高度耦合,复杂度高,一次性集成所有模块调试极易陷入“问题定位难、复现率低”的困境。分步调试法通过“最小功能验证→模块逐步扩展→多模块协同”的渐进式策略,可显著提升调试效率。本文以STM32微控...

关键字: 嵌入式系统 分步调试法

在嵌入式系统向智能化、高性能化演进的浪潮中,RISC-V开源指令集架构凭借其模块化设计和可扩展性,成为硬件加速领域的重要推动力。结合FPGA的可重构特性,基于RISC-V的硬件乘法器实现方案正逐步打破传统架构的性能瓶颈,...

关键字: RISC-V FPGA

在物联网设备、可穿戴设备等嵌入式场景中,电池寿命是制约产品竞争力的核心指标。低功耗设计需贯穿硬件选型、系统架构到软件策略的全流程,其中休眠模式切换与电源管理芯片(PMIC)的精细配置是关键环节。本文从实际工程角度,解析如...

关键字: 低功耗设计 PMIC配置 嵌入式系统
关闭