百科问答小站 logo
百科问答小站 font logo



写工业级别代码是种怎样的体验? 第1页

  

user avatar   ethanchiu 网友的相关建议: 
      

我做的是锂电池BMS系统中的电池容量算法和主控IC function,而且很多都是出口的。这个IC是和电芯组合成一起作为电池Pack装到手机/笔记本里的,所以在整个电池使用的三五年中程序必须正常运行不出错。因为锂电池容量算法特别复杂,稍有参数、代码错误表现的就是iPhone或笔记本电脑立即关机。在笔电上还好说,因为有对IC的DFU/IAP支持,之后升级/维护方便;但在手机上并无此功能,如果错了就可能面临出口产品的退货/召回、工厂IC的code重烧等,非常麻烦。

因为主IC还是C51平台、在Keil上编程,调试或排查极其不便。特别涉及到容量算法,必须用锂电池去充放电实测来检验算法的精度与异常处理,通常调一次参数就需要高温低温常温+轻载重载中载组合测试,需要一周时间。效率极低,而且出错概率大。仅靠经验、拼人品显然是不可能做下去的。

之前采用了matlab进行仿真,但由于代码和KeilC的语法完全不同,故达不到代码debug的效果。为此,专门在知乎上请教了轮子哥和赵姐夫,开始搭建C++仿真。在Visual Studio中采用C++模拟C51中的硬件器件运行结果,达到KeilC和C++代码每行都完全兼容,运行结果也完全一致。举个最简单的离子:

C51是8bit CPU,每次加法若溢出后,会置位PSW标志位[CY]为1.在程序中经常会用if(CY)判定是否溢出。在C++仿真中便采用了运算符重载的办法进行了模拟。将特定的加减法转换为自定义类型的加法,这样程序跑到重载函数中便可模拟8bit溢出的情况。

仿真将电池充放电log数据吃进去之后,实际模拟出运行的效果,使原先一周的验证时间缩短到了半小时,现在锂电池算法的效果已经非常好了,逼近世界No.1的TI。

在工作过程中,我一个嵌入式工程师,专门学了好多C++和C#的东西,自己的进步很大。同时学习了STM32的官方C库,收获了很多。在之后诸如TWI、HDQ、E2ROM、USB等等其他扩展功能上也贯彻了严密细致的精神,程序现在伴着IC每月1M+的出货量稳稳的运行着。特别感谢知乎,让我认识了那么多的软件大神,特别感谢轮子哥和赵姐夫在答案中的指点!


user avatar   rocwon 网友的相关建议: 
      

体验就是:一天要被现在的互联网程序员气死八次。


陈皓说:

2002年的时候,国内的开发都还不知道什么是版本控制工具的时候,我第一次接触到了,然后还用到了很多那个牛逼的Rational公司做的各种工具,简直是绝了。

微软的VSS,在Visual Basic, Visual C++和MSDN的发行光盘里都有;到2002年的时候,CVS早已大行其道了,2003年后,SVN成主流了。我所接触的圈子,还真没见过哪个程序员无知到不知道啥是版本管理工具。

2002年左右,PSP, TSP, RUP这些软件过程概念都是日常话题了,DOORS, ROSE这类商业的软件工程工具都卖到中国来了。

你到2002年才第一次接触版本管理工具,还如此惊讶,没关系。

装大佬也没关系。但是不要拉我们那一代的“国内的开发”给你垫背。


user avatar   letum 网友的相关建议: 
      

写了快二十年工业级别代码了,体验嘛,太多太多不知道从何说起。想起啥就说点啥吧。

1、重要的系统上能够运转的祖传代码能不改就别改,能解决提出问题的人就不要去解决问题。比如用户要求:甲阀门未完全开到100%时屏蔽乙阀门的开启指令。但用户忘记了,乙阀门正常时需要被甲阀门屏蔽,但异常时比如发生了事故,乙阀门必须迅速打开进行泄压,否则超压甚至爆炸。用户疏忽没有考虑到乙阀门还有处理事故的功能,结果你按用户的要求进行了改动,事故时乙阀门被甲屏蔽了,压力突升炸死人咋办?这时候就要求用户确认需求、确认一次过几天说手续丢了,让他再确认一次,再确认了过几天说手续级别不够,让他再找更高一级的技术人员确认,让他走很繁琐、级别更高的签字流程和手续,甚至要求让行业监管的技术部门会审……反正是怎么麻烦怎么难怎么来,目的是让他放弃修改。

至于不重要的系统嘛,用户有要求,好啊,我来实现它。编程组态、单体调试抓bug、联合调试抓bug,让用户试用抓bug。好玩吗?挺好玩的。

2、祖传屎山千万不要乱改,一个没抓到的bug就能造成几千万损失,甚至人伤人亡。屎山上任意一坨屎都有可能有它存在的意义。有时候这些代码不是科学的,而是玄学的。(真正像上帝一样弄清屎山自然就是科学,弄不清屎山把它当成一个对象,它就有玄学参数)最神奇的时候是,a=5;b=3;删掉写成b=3;a=5;最终结果就变了,再改回去还是变了。然后删掉新文件,把旧文件请回来,运行就没事了,真的进入玄学,全靠祈祷。

3、在20年前智能家电还没出现的年代,在家里装了个PLC控制家里的电器和照明,用单片机做模拟量自动调节。用PID调节器控制自动浇水系统的水箱水位。用光敏电阻控制窗帘电机。这些都需要写代码。

翻出来我十年前在西门子S7-200PLC上写的家里节日彩灯控制、晨间音乐、定时给高压锅送电的一段小程序了。有很多注释,搞工控的都能看懂:

Network 1
// 从PLC中读出当前的时间,用sm0.4每30秒读一次,用sm0.5则每0.5秒读一次
LD SM0.4
EU
TODR VB110
Network 2 // 将读到的结果从BCD码格式转换到整数格式。 ----> VW200:年 VW202:月 VW204:日 VW206:时 VW208:分 VW210:秒 VB214:星期
// 将读出的时间转换到VW200--VW214,每30秒转换一次
LD SM0.4
LPS
BTI VB110, VW200
AENO
BCDI VW200
LRD
BTI VB111, VW202
AENO
BCDI VW202
LRD
BTI VB112, VW204
AENO
BCDI VW204
LRD
BTI VB113, VW206
AENO
BCDI VW206
LRD
BTI VB114, VW208
AENO
BCDI VW208
LRD
BTI VB115, VW210
AENO
BCDI VW210
LRD
BTI VB116, VW212
AENO
BCDI VW212
LPP
BTI VB117, VW214
AENO
BCDI VW214
Network 3
// vw216是时间条件的小时,vw218是时间条件的分钟,sm0.1表示首次扫描时运行
LD SM0.1
MOVW +5, VW216
MOVW 0, VW218
MOVW +6, VW220
MOVW 30, VW222
MOVW +17, VW224
MOVW 30, VW226
Network 4
// VD216这个双整型代表着VW216和VW218这两个整型,用SM0.5每0.5秒比较一次,用SM0.4每30秒比较一次
// VD206是当前时刻
// VD216是煮饭时刻
LD SM0.4
AD= VD216, VD206
O I0.0
LD M1.0
NOT
LPS
A Q1.0
= Q1.0
LPP
ALD
O Q1.0
= Q1.0
Network 5
// 已经是煮饭时刻,开始煮饭计时
LD SM0.4
A Q1.0
EU
INCW VW300
Network 6
// 煮饭计时比较,达到设定秒数后将网络4中的RS触发器复位,同时将VW300计数值归零
LD SM0.4
AW>= VW300, 90
= M1.0
ED
MOVW 0, VW300
Network 7
// VD220这个双整型代表着VW220和VW222这两个整型,用SM0.5每0.5秒比较一次,用SM0.4每30秒比较一次
// VD206是当前时刻
// VD220是晨间音乐时刻
LD SM0.4
AD= VD220, VD206
O I0.0
LD M0.0
NOT
LPS
A Q0.0
= Q0.0
LPP
ALD
O Q0.0
= Q0.0
Network 8
// 已经是晨间音乐时刻,开始音乐计时
LD SM0.4
A Q0.0
EU
INCW VW302
Network 9
// 音乐计时比较,达到设定秒数后将网络7中的RS触发器复位,同时将VW302计数值归零
LD SM0.4
AW>= VW302, 30
= M0.0
ED
MOVW 0, VW302
Network 10
// VD224这个双整型代表着VW224和VW226这两个整型,用SM0.5每0.5秒比较一次,用SM0.4每30秒比较一次
// VD206是当前时刻
// VD224是彩灯时刻
LD SM0.4
AD= VD224, VD206
O I0.1
LD M0.1
NOT
LPS
A Q0.1
= Q0.1
LPP
ALD
O Q0.1
= Q0.1
Network 11
// 已经是彩灯时刻,开始彩灯计时
LD SM0.4
A Q0.1
EU
INCW VW304
Network 12
// 彩灯计时比较,达到设定秒数后将网络10中的RS触发器复位,同时将VW304计数值归零
LD SM0.4
AW>= VW304, 420
= M0.1
ED
MOVW 0, VW304


user avatar   feng-dong 网友的相关建议: 
      

有一说一,其实性价比最高的4K蓝光播放设备很可能是二手xbox


user avatar   muchenglalala 网友的相关建议: 
      

克劳备忘录也好,凯南电报也好,有两大共同点。首先,都是以现实主义的眼光去分析双方的关系。然后,给出的建议都是阳谋,并不是什么不可告人的阴谋,执行起来需要的不是鸡鸣狗盗的小聪明,而是惊人的意志力。

而美国现在战略界现实主义被边缘化,我推测,布热津斯基,基辛格那帮人应该写过不少。不过没所谓,美国能执行大战略的时代过去了。现在这一代精英上半年能管下半年就已经很了不起了。一个需要两代人以上持之以恒去完成的大战略,搞出来他们也执行不了。

冷战时期,从杜鲁门艾森豪威尔到肯尼迪尼克松,最后到李根老布什,个人性格和政治偏好差距不要太大,但是都忠实地完成了他们历史任务,沿着围堵政策做下去。这种战略定力和延续性,世间少见。在中国领导集团上能看见一些相似的东西,但是我们离得距离太近,反而看不清。但在美国精英层身上完全看不到这一点。

个人愚见。




  

相关话题

  如何看待华为即将全新发布操作系统 openEuler 欧拉,和鸿蒙OS有何区别? 
  如何生成和管理Visual C++的多版本工程文件? 
  config、option、setting这三者在程序世界里是什么区别? 
  为何新思域(十代)自动档版本要采用 CVT 变速箱而非手自一体变速箱? 
  雷克萨斯比同级别的 BBA 贵 5-6 万,值得买吗? 
  为什么有些人开车到家后会独自坐在车中发呆? 
  为什么大多数车的侧面没有图案? 
  福特中国海报文案带「2021 中国马年」引发争议,官方回应系宣传车型,这一宣传有哪些问题? 
  h 开头的车有哪些牌子呢? 
  百年老字号别克为何成为中国特供? 

前一个讨论
统计局表示「1 至 2 月份全国房地产开发投资增长 3.7% 」,这一数据说明了什么?
下一个讨论
为什么交易不活跃的股票还能长期的上涨?





© 2024-05-09 - tinynew.org. All Rights Reserved.
© 2024-05-09 - tinynew.org. 保留所有权利