发布信息

从实习到职场:深圳南山电控公司售后维修与软件开发工程师的成长之路

作者:软荐小编      2024-11-27 16:01:21     145

背景

刚出校门实习时,我在深圳南山的一家龙电控公司工作。职位是售后维护。我使用伺服电机来控制绣花机。有一个显示终端应该用作桌面系统。我一进公司就开始修板子。经过一番培训后,我就出去提供现场服务。我看到软件开发工程师来支持我们的工作。他们没有头发,大多数人都戴着眼镜。他们看起来非常强大。拿着示波器的探头,把万用表举到二极管电平,测量电路的导通,当时我真想成为这样的人。

毕业后换工作

当我来到我人生中最重要的公司时,我有一位非常热情的老同事。他一步一步教我怎么看原理图,为什么控制IO为高电平而晶体管输出低电平,为什么电磁阀可以动作。 、如何控制继电器、如何写代码、如何画原理图、如何画PCB板,一站式服务非常耐心、毫无保留地指导我。下班后,部门经理等我们吃完饭,一步步教我们如何使用Java与下位机通信,如何创建线程。那段时间真的很美好,让我进入了软件开发行业。

三谢

我非常感谢那些过去帮助过我的人。这个社会真的需要你这样的人,尤其是应届毕业生。加入这样的公司确实是一个不错的选择。

四种嵌入式软件开发流程

因为大部分都是做嵌入式开发的,所以都是按照这个题目来进行的。

4.1 好软件被4人喜爱,被1人沮丧

4.1.1 老板

通常老板喜欢东西又快又好,交货快、订单量大。前期应该是达不到的,但是有了好的框架,理论上是可以达到这个效果的。

嵌入式软件自学_嵌入式软件方法与技术_嵌入式系统软件教程

4.1.2 多用户

傻瓜式操作,一步操作,快速上手,大量易懂手册,查阅文档自助解决问题,视频教程,技术支持(客服机器人)快速响应,稳定且可靠,不会崩溃。满足一个用户比较简单嵌入式系统软件教程,但同时满足不同的用户就比较困难了。在技​​术支持方面,我们需要引导用户自行解决问题,并提供易于理解的用户手册。

嵌入式系统软件教程_嵌入式软件方法与技术_嵌入式软件自学

4.1.3 同事

编码风格和编程思想良好,命名方式简单易懂,有注释,设计结构良好,读代码不会难受,有丰富易懂的技术文档,易于更新和更新维护方便,跨平台移植方便,无潜在BUG。

嵌入式软件自学_嵌入式软件方法与技术_嵌入式系统软件教程

4.1.4 自身

钱多了,麻烦就少了。更新、维护、扩展、移植时只需改动少量代码或无需改动代码。软件测试和领导签名一次性通过。用户在使用过程中体验良好,未收到任何BUG反馈。深受用户喜爱。最喜欢的。

嵌入式系统软件教程_嵌入式软件方法与技术_嵌入式软件自学

4.1.5 软件测试

经过长时间的测试,没有发现任何bug,所有功能都正常,没有一个版本升级。他觉得太无聊了,没有成就感,根本没有发挥出自己的价值。他会感到很迷茫,甚至开始怀疑人生,但又没有别的办法。我为他感到难过。

嵌入式软件方法与技术_嵌入式系统软件教程_嵌入式软件自学

五、具体实施方法

5.1 现场检查

在开发用户需求之前,如果有现成的产品,最好去客户现场了解一下。就像做生意时,首先要登陆现场记录人流、人均消费水平、房租等。同样的道理,我们需要知道:

5.1.1 现有产品的用户使用体验是否良好,操作是否方便,如何改进

5.1.2 用户今后会遇到哪些问题?

5.1.3 当用户遇到问题时,如何通过我们提供的资源独立解决问题?用户可以利用文档或者已有的功能自行解决问题,可以与公众号、服务器、数据库相结合。

5.1.4 总结广泛期望的未满足需求(用户痛点)

5.1.5 将上述用户需求转化为标准化的开发计划和开发文档(硬件系统框架图、软件功能定义等)

5.2 设计原则

5.2.1 开闭原则

软件设计应该在满足功能需求的基础上增加一些东西。当应用需求发生变化时,无需修改软件实体的源代码或二进制代码,就可以扩展模块的功能以满足新的需求。视觉反馈、触觉反馈、为什么会有反馈,可能是一个非常深刻的话题。可能和人体分泌的多巴胺有关,我不确定。系统保持不变以应对日新月异的变化(无论用户需求发生什么变化,我们都不需要更改固件),用户的可变需求也可以通过(GPIO)(拨码开关)或其他通信接口进行配置,将硬件或通讯接口的配置权交给用户

5.2.2 有软件框架和设计模式

5.2.3 有层次。制定框架之前有一个前提条件。您必须获得功能定义和硬件系统框架图。

嵌入式系统软件教程_嵌入式软件方法与技术_嵌入式软件自学

分层后,分别编译成库文件,然后独立维护对应的库文件,方便移植,减少维护时相互影响。更改不会影响其他功能。

5.2.4 稳定可靠

无错误或崩溃(访问空地址、内存溢出、内存泄漏、数组越界、堆栈溢出等)

5.2.5 参数检查

带输入参数的函数必须具有参数检查(排除所有可能的非法值)、错误处理和返回值。用户输入是一件非常危险的事情,需要谨慎处理。

5.2.6 自定义malloc

-不要使用库函数malloc动态申请或释放内存创建内存池(静态),自己实现申请和释放函数

- 多任务处理时,需要对公共资源进行原子访问,以防止数据错误。

5.2.7 重试机制

为了保证数据的有效传输,可能需要添加重试机制

5.2.8 易于扩展和维护。更新软件时,代码改动量很小或者不需要改动代码。

5.2.9 摘要变更

-改变宏定义,或者类、静态链表、集合、数组等的定义,在不改变流程的情况下,抽象出将来可能改变的部分,定义成数组、静态链表、集合等,并使用通用程序来处理可变部分

- 不支持编程语法,将将来可能改变的部分抽象为外部文件(xml、bin)、创建动态链表或动态数组等然后触发遍历

-添加支持编程语法的脚本解释器,将将来可能变化的部分抽象为外部脚本文件(asm、lua、js、html、php),创建动态链表或动态数组等,然后触发遍历

5.2.10 使用设计模式,如工厂模式、创建者模式等。

5.2.11 易于维护并能快速定位异常(可追溯)

5.2.12 JAVA、VB.NET、C#,不确定C++是否有此方法添加全局异常捕获事件。当抛出异常时,特定的文件名和行号将被附加到日志文件中。

5.2.13 带调试和打印功能的单片机可以通过串口/LCD/并口(计算机主板)/PCI(计算机主板)进行打印,以及串口/LCD/并口的读写字节功能映射(计算机主板)/PCI(计算机主板)到printf的相关读写字节函数,上位机可以通过控制台进行打印并输出到文件或控制台窗口。

5.2.14 软件层级间通用接口函数,方便跨平台移植

-write2.7.2 读

-control(cmd,data,void*parameter) 可以不断扩展新功能

- 接口函数中使用void *作为输入参数嵌入式系统软件教程,可以传递任意类型和长度的参数

5.2.15 必要的错误代码

帮助客户独立解决问题,依靠功能有返回值

5.2.16 具有自检功能

(硬件电路自检)、开机自检(通过指示灯显示,用于检查IC、硬件电路等) 3.1 当出现故障时,系统自检可用于锁定问题并排除故障。提示用户排除原因并解决问题。易于移植的原因(跨平台)

5.2.17 分层设计

抽象通用类和通用接口函数,除非资源太少无法支持面向对象的编程思想

比如GPIO类有哪些属性,有哪些接口函数?为了兼容所有平台,GPIO 类必须具有最多的属性。

六个可能的步骤

嵌入式软件开发可以按照一定的流程进行:

6.1 总结用户需求,兼容多用户需求

6.2 了解现有解决方案并总结用户痛点(尚未满足但广泛期望的需求)

6.3 总结用户可能遇到的困难

6.4 总结如何引导用户解决困难

6.4.1 将上述总结转化为标准化的开发计划和技术文件

6.5 输出函数定义及设计要点(文档)

6.6 输出软件框架图(文档)

6.7 输出软件流程图(文档)

6.8 确认以上文件没问题,开始写代码

6.8.1 确认软件测试计划

6.9 软件测试(自行)

6.10 软件测试(正式),输出测试报告

6.11更新改进

6.12 稳定性试验、可靠性试验、极端环境试验

6.13 客户验收

6.14 客户现场跟踪及已知缺陷总结

6.15 持续改进

6.16 归档项目数据并输出测试文档

七总结

以上是我根据个人工作经验总结的。然而,无论我们的能力有多好,首先要提高我们的沟通能力。良好的沟通技巧可以让我们打开彼此的心扉,让家庭更加和谐,让我们与朋友、同事和睦相处。更加和谐可以让我们更好地工作,最大限度地发挥我们的工作经验和个人能力。

你的心有多大,舞台就有多大。我现在是一名嵌入式软件工程师,但我还有更大的梦想。希望大家大胆想象,大胆挑战,共同努力,实现自己的梦想。

相关内容 查看全部