裸机项目开发经验分享 - 完整开发流程介绍(项目规划与执行、器件选型、资料检索、产品测试思路等)

往期系列文章:
 

一、研发方向与出路

*建议积累基础-往前沿的方向进展(人工智能、算法等高端领域) 
1、进入大公司深造: 全栈工程师、 系统架构师、算法;
2、创业 :研发产品、运营公众号、培训;
3、技术管理与支持。
 

二、大公司与小公司研发项目差异

1、小公司的技术路线:小公司一般业务会比较多,但产品周期一般较短(公司承受不了预研、耗时的项目,追求高产出,快回报),因此重业务轻技术,涉及的产品范围会广一些,注重个人能力,偏向于横向发展;
 
2、大公司的技术路线:大公司一般业务会比较专一,单一产品继承,因此轻业务重技术,能熟悉一项大型项目所需要的技术知识、研发工具以及有效的管理流程,能够得到深层的技术锻炼,以及高层的项目眼界,注重的是技术团队管理和产品的高质量,偏向于纵向发展;
 
3、根据个人情况选择,毕业可以去小公司,能够发挥个人能力,找到职业成就感,此时横向发展多种技术(杂乱的知识体系),注意切勿激进和浮躁,适当总结输出;后面根据所涉及的知识域,选择一个方向,挤进大公司,此时做的是知识深化沉淀;在大团队重熟悉一套完整的解决方案和解决具体问题的方法论,培养技术格局和眼界,最后根据个人状况再次选择技术管理或作为主导团队之一进行创业;
 
 

三、项目开发实践

*清晰设计思路很重要,请务必先设计好思路,再动手;
*对一项技术付出越多的时间,做得越多,必然会精,在每一次重复中精进;
*对待所有的技术,都必须以实际的项目来实践试验,在解决问题中进步;
*前期的每一个步骤需要十分小心并且经验至关重要;
*一个产品的完整生命周期浓缩概况: 需求说明 -> 开始设计 -> 器件选型-> 主芯片熟悉-> 原理图的搭建 -> PCB板绘制 -> 开发板上开发驱动 -> 整个程序的框架搭建(构建系统)-> 焊接 -> 上机调试(程序的核心编程)-> 软硬联调->测试修改->产品老化稳定性测试->产品出厂维护
 
项目的开发一般流程:
*每一步都需要精雕细琢;用思维导图记录把控整个项目流程的细节;
1、系统规划(立项:重点和难点)
    a、针对系统功能、各项技术指标、操作方法(参照现有产品)、系统升级和维护、产品机构、产品生产等做规划;
    b、设计各种文档作为产品开发、验收、生产指南和依据;
2、系统硬件设计
    a、根据需求指定系统功能、产品指标等;
    b、参考现有设计,设计原理图,PCB绘制,制作目标板;
3、系统软件设计
    a、搭建系统框架、设计程序流程图,
    b、初步在开发板上调试驱动例程,最后在产品板上完成所有功能程序;
4、系统调试
    a、将各种驱动程序、应用程序调试完善,整个一个系统内;
    b、整个项目的难点在于协同各个模块(避免互相干扰);
5、系统的优化(难点)
    a、优化系统工作的效率和质量,提高系统的稳定性、准确性和可靠性;
6、对所开发的产品要精益求精、反复修改,使之不断完善(难点)
    a、开发的产品都需要经过市场、用户的实验;在产品的整个生命周期中,需要开发者不断维护和完善,三分开发,七分维护;
 
 
实施项目过程中的几点注意:
1、积极与芯片、模块方案商的交流;
    a、与方案商的技术洽谈十分重要;
    b、有效的沟通和充分准备是提高效率的最主要途径;
2、与客户的结构、进度配合;
    a、客户的需求可能会不断修正和更改,必须明确合同的流程;
    b、在与客户结构的配合过程中,必须给出专业的解决,而这也恰恰是重点和难点;
    c、进度的配合十分关键,必须提前做好准备;这样的事情才会高效率;
    d、在客户前面调试和演示的注意:
        1)各种情况都可能会出现,必须要有快速发现问题的能力;
        2)大事化小,小事化无的能力(解释说服的能力);
3、项目组内的人员交流配合,虚心请教与积极讨论;
4、项目的规划和把控,及时反馈项目进度;
   
 
 

四、器件选型

*原理图搭建一定要参考成熟的电路设计(来源可以是开发板、芯片资料、产品继承)
1、方案的设计者和器件选型者,最好有充分的项目经验的,以及经历充分咨询以及"海选"过程;
2、充分了解产品的应用以及性能要求;
3、相似产品成熟参考设计(建立大体框架);
4、通过询问供应商获取常用稳定的设计方案;
5、官网选型(各类标准的产品设计以及技术表格);
6、技术支持有时会是一个重要的参考因素;
 
 

五、资料检索

*项目研发过程需要不断查找大量资料以及检索资料,提取项目所需要的知识库,主要分为官方文档 以及 网络资源;
*了解资料的用途和各种特性,用到时快速检索查询;
 
Ⅰ、官方手册文档资料检索
*项目开发利器,包含所有的设计知识;
*通过官网可以获取;
 
1、芯片的架构手册内容简介
    a、IC的基本框架;
    b、IC的引脚说明;
    c、IC的电路连接;
    d、操作协议;1)IIC的操作时序;2)SPI操作时序;3)UART操作时序;
 
2、方案设计手册 内容简介
    a、使用说明与注意事项;
    b、基础的例程的操作(软件接口);
 
3、用户手册 内容简介
    a、用户手册:  [操作手册] [基本齐全] == 外设编程手册 FWLIB 定义普通外设
    b、内存的结构和分布:1)哈弗结构;2)启动代码(BOOT ROM);3)用户代码,数据(EEPROM);4)选项字节和中断向量表(FLASH ROM)
    c、五种寄存器基本操作描述:1)读  ;   2)写1   ; 3)写0 ;  4)读/写1 ->置1    ;5)读/写0->置1
    d、内容简介:1)器件/模块的基本概念;2)电路原理实现、状态解释、流程框图;3)寄存器各个位的解释;4)控制协议;
     
4、数据手册 内容简介
    a、储存器的映射(各存储器的地址说明);
    b、I/O端口硬件寄存器;
    c、CPU;
    d、SWIM;
    e、中断控制寄存器;
    f、电气特性;
    g、选项字节;
    h、封装及引脚的描述;
    i、芯片的各种数据参数以及框图模块(简略);
    j、各模块的特点介绍(简略);
 
5、其它官方手册
    a、启动代码手册(UM0560);
    d、Flash编程手册(PM0051);
    e、调试模块用户手册(UM0470);
    f、CPU编程手册(PM0044)== 内核编程手册(如systick)   CMSIS 定义内核外设;
    g、编程手册;
 
6、集成IC的 "datasheet"
    a、一般的专用集成IC有且仅有一个数据手册;
 
Ⅱ、 网络资源资料检索
1、开发的几个搜索引擎推荐顺序:1、google(需要梯子);2、微软的必应搜索引擎; 3、百度;
 
2、书籍/PDF/PPT等文档资源最有参考价值的,网上的论坛(鱼龙混杂)等都只能做参考;
     a、许多书籍文档资料上的建议,都是作者走过的路,必须重视;而这些就是最好的所谓方法与捷径;
 
3、寻找、检索零散资料需要慎重参考:
    a、带着探索与评价精神看每一种资料;
        1)资料属于什么类型;
        2)作者是谁,写的目的是什么;
 
4、寻找问题解决方案,调整搜索字段,会有意外的收获;
 
 

六、出现问题时的解决思路:

1、良好解决问题能力在于解决思路,而思路在于经验的积累、以及过程中总结;
 
2、解决问题的重要要素:
    a、首先思维风暴,再把握整体思路,避免重复;
    b、从最简单开始,不要漏掉每一个小细节;
    c、从最开始把控整个项目的细节,更容易找到突破点;
 
3、常用的问题解决方法:对比法、问题列举法、排除法、细节分析法;
 
4、最难解决的问题只是时而出现的现象,如;
    a、AD检测时好时坏问题,原因是原理图出错,电容元器件参数不一);
    b、J-link下载问题(芯片深度睡眠了)(每台电脑不一致);
    c、建议:不能放过任何一个细节;
 
5、关于开发解决问题的能力和速度问题:
    a、解决问题的能力在于你对这项技术研究的深浅程度;
    b、开发速度问题在于你对这项技术的熟悉程度;
 
6、遇到问题先自己解决,再请教他人的良好习惯;
 
 

七、产品测试(逻辑、性能、稳定性)

1、许多BUG都是异常操作导致的,采用非惯性思维进行测试;会发现很多潜在BUG;
2、测试思路:
    a、先用正常逻辑测试一遍->接着用非正常逻辑测试(乱操作、重复操作、强度操作);
    b、在正常操作下加上外界干扰;
3、诚然,每个产品都要应该有不同测试思路,不能一概而论;
4、一个产品必须经过老化、极限测试要确保产品的稳定性和长期使用质量;
 

九、产品研发的一些经验总结

 
1、功能容易实现,但是产品的稳定性则难以实现;
 
2、项目进度的快慢,决定于你对该知识的熟练程度;
 
3、必须对产品问题执着,因为越是不重视,后面的问题也是不断地随之而来;
 
4、解决问题一定要沉得住气,相信问题一定会被解决的信心;
 
5、标准很最重要,基础很重要。这决定你可以走多长多远的路;
 
6、做技术的,必须是经验能力以及设计能力并重;
 
7、硬件永远指导着软件,软件的每一步操作都与硬件息息相关;
 
8、前期的重要任务:理解开发文件架构以及硬件架构;
 
9、资料&视频&实验需要多次反复认证,每一次看都会有不同的效果与收获;
 
10、把握程序的思想与流程(技术变的是表达方式与表达规则),思想还是一致的;
 
11、每个新产品必定有自己的特有逻辑流程 ;
 
12、理论与实践并行,只有自己亲自动手才会有效地记住;
 
13、习惯用自己的语言总结一些理论、晦涩难懂的书本语言、以及实践现象;
 
14、程序只是一种描述流程以及指导内存布局的一种形式,很多时候编译器已经替我们办了很多事情;
 
15、通讯协议分为 a、标准协议;b、私有协议;
 
16、开发就是不断地接触新事物,对待新事物的应该的心态:
    a、新事物都有一个特征:概念化,没有实际特征,难以捉摸;
    b、第一阶段:理解为主;记忆为辅;
    c、第二阶段:记忆为主;理解为辅;
 
17、对新物件的认识,从以下三方面入手:
    a、基本的实现原理:能形成基本形状,对基本概念掌握并熟记;
    b、知识结构组成:原理与实物联系,对原理的再掌握;了解就好
    c、使用注意以及操作流程:记忆注意事项以及原因,将其流程化,实操一遍;
    d、实际操作 :能巩固知识,加强理论;
 
18、如何对待新技术:a、不要崇拜牛逼的算法与协议;b、产品心态,着重项目与功能;c、建立理论框架与结构;
 
19、对待新事物切莫不能急躁;更要冷静与理性分析;
 
20、技多不压身,总会有人走在你前面;
 
21、很多时候技术知识很多,很广,但实际应用时用到的却是简单的部分;
 
22、有时间自己立项目去试验,这才是最有效的学习方法;
 
23、认识新的分立元器件:应当从原理、电路应用、命令等入手;
 
24、很多时候,你并不是没有解决问题的能力,而是没有解决问题的耐性,心态很重要,面对问题应该积极  理性  逻辑对待;
 
25、以项目经理的角度去看待问题(整体产品思考:包括软硬件、成本控制)
 
26、程序并没有想象中复杂: 单片机硬件程序 = API + 操作流程控制;
 
27、稳定的硬件最重要,这样软件才有机会落地(开发板最好的例子)
 
28、如何对接自己负责的部分很重要;a、搭建硬件环境;b、封装软件,提供可调用接口;c、测试调试目标板;
 
29、所有外围器件的原理都大致相同,不同单片机之间的区别在于开放的“指标”接口(如AD的采样率、通道、对应引脚);书籍对其原理与指标有明确的详细说明,而手册则单独针对自身资源的描述;
 
30、写程序能贯彻操作思想,掌握每个细节;看程序只能看出操作规范与基本流程;
 
31、程序的两大要素:a、操作流程(显性); b、状态与状态切换(隐性);
        
32、学习靠突击是不扎实的,需要做的就是持之以恒,切勿急进;
 
33、学习代码方法其实很简单(重复):多写、多看、多练;
 
34、注重第一次接触新技术的时机,在这个时机中尽可能去掌握更多的知识点,形成自己的知识网络;
 
35、快速发展的电子技术要求每个人必须快速适应新技术,新技能(在于方法和技巧);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值