打印
[其他]

【最疯狂的经历】deadline的前夜调试

[复制链接]
144|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  “在某办公区域,所有人盯着日志输出,均紧张的站立,除了两个人……”
  这个场景是发生在刚刚过去的2024年,我们项目首次提交转测版本的Deadline前夜。我们的项目有几个团队联合完成,而我的职责是将其它团队设计并验证好的配置数据在系统启动阶段通过寄存器写入的方式,配置到指定外设的配置空间。这个简单的步骤竟然从早上一直忙到第二天凌晨仍然未成功。我们的CTO,研发总监,各团队的负责人悉数到场,核心人员要么在旁边候着,要么在线standby。而那两个坐着的人,一个是我,另一个是软件驱动人员——由他生成数据,由我写入。
  我们的数据是先把验证好的配置数据格式化成csv格式,再由软件驱动人员生成二进制数据bin文件,再由我使用MCU读取Flash的bin文件,按照约定的格式,解析成配置数据,然后再通过寄存器写入到外设的配置空间。这个任务说简单也简单,“写-读-写”而已,但也挺复杂的,中间涉及其它团队提交的文件数据是否出错,格式化csv是否出错,生成bin文件是否出错,Flash读取是否出错,写入过程是否成功且生效等等。其实大家心里都没有底,一来第一次实现;二来,其它团队也没有有效的验证手段。大家都只能看压力测试的结果!而压力测试又不是必现的嘛!
重复验证一次又一次,日志打印观察了一遍又一遍。感觉每次都差点的意思!有时候链路不通,有的时候链路又正常,有时候性能有波动!就这样,在一次又一次的尝试中,时间很快就到了深夜。大家也都在猜测,这个大大的bug到底是谁写出来的?
  时间过了凌晨,大家都有点沮丧了,Deadline已经到来!时间也很晚了!
  转机出现了!
  我在和工程师的一次连线中,对方工程师明确说出我的寄存器地址设置为0x300004,中间是4个零。天啊!我居然在整理文档的时候把这个关键的寄存器地址写成了0x3000004,中间是5个零。可能是长时间注视电脑,眼睛已经疲惫不堪吧!
在我修改完成此处bug后,我们的系统终于如预期般运行越来了,性能也达到了转测的要求!大家也放心的回家休息了!
经过这次bug事件,我也带头做了总结,并提出了以下4点防护措施:
  • 大量数据下发时,在调试阶段做日志输出。日志输出较多,较慢,也要先把数据梳理,验证;
  • 对大量数据进行CRC32校验,保证外部存储中回读时数据全部正确;
  • 对输出日志文本进行Text Compare对比,以与原技术文档做对比;
  • 后续,对发布版本做错误全局变量标记。当下发文件CRC32校验错误时,做出Error Flag置位,以规避无效的排查;
  这次bug事件,相当疯狂了吧!把研发的领导都”请“过来了!也不知道他们如果早知道是我的笔误差点导致了转测推迟,还会不会给我买饮料和牛肉干!嘿嘿!
  最后,祝各位21ic的小伙伴们,在2025年这个完全平方年里全部远离bug!远离bug!远离bug!



使用特权

评论回复

相关帖子

沙发
codingtuzi| | 2025-1-7 23:35 | 只看该作者
远离bug

使用特权

评论回复
板凳
qinlu123| | 2025-1-8 10:21 | 只看该作者
原来bug是你写出来的没有被群殴已经是真爱了

使用特权

评论回复
地板
jobszheng|  楼主 | 2025-1-8 10:27 | 只看该作者
qinlu123 发表于 2025-1-8 10:21
原来bug是你写出来的没有被群殴已经是真爱了

嘿嘿

使用特权

评论回复
5
yjmwxwx| | 2025-1-8 11:09 | 只看该作者
昨天我也发现个很严重BUG,以前用PY32单片机做的一个电池内阻表,初次运行程序要检测保存校准区域的数据是不是空,是的话把出厂数据写到相应FLASH。结果单步调试读0x8000008里面怎么读都是0X12345678,于是就要擦写FLASH一次把校准数据写进去,这样就会擦写很多次FLASH,但是奇怪的问题是连续运行却能正常运行,可能不知道擦写了多少次FLASH才能有一次这个地址不是0X12345678。。 而写0X8000008其实是写到了0X08这个地址,但是最初的0X12345678却能写入0X8000008这个地址,不单步还没发现这个问题。。





使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:热爱开源,乐于分享。在嵌入式技术领域里面,主攻通讯协议,Modbus,TCP/IP以及虚拟化和RTOS

18

主题

420

帖子

2

粉丝