• 资料介绍
  • 在线预览
  • 相关推荐
申请入驻 产业图谱

LAT1457 Keil工程使用NEAI库的异常问题

2025/03/11
776
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1457 Keil工程使用NEAI库的异常问题

996.49 KB

1、简介

最近在给客户完成电机预测性维护类的 POC 项目时,使用 Keil 编译器时遇到了一个 NEAI 库的异常,在和欧洲 NEAI 团队调查过程中发现了比较奇怪的 BUG,本文将介绍该问题发生的条件和后续的规避方法。

2、项目介绍

该项目是和电机相关的预测性维护项目,需要模拟一些异常的情况,然后使用 NEAI 进行建模和部署。然后采集正常和异常的数据,使用 NEAI 的 Abnormal detection 类方法,进行训练,训练完成后进行部署。

3、发生异常

发生异常是在部署的时候,使用 neai_anomalydetection_detect 这个 API 的返回值发生了异常。该函数使用 input_user_buffer 中的数据,进行推理,然后将结果返回到 similarity 变量中。similarity 变量的值范围为 0~100,表示 input_user_buffer 中的数据和正常数据相比相似度大概是多少,通过这个返回结果,可以判断设备运转是正常还是异常。但是在实际部署测试的时候,发现 similarity 变量的值有时候会超过 100,明显是一个不合理的值。

4、调试过程

该问题非常隐蔽和难以发现,欧洲 NEAI 开发团队的同事也花了非常多的精力才定位到发现问题的点,目前正在执行 NEAI 库中的 log 函数,其中 S0 的值 0.046875 是正确的值,此时单步执行下一步汇编代码中的 VMOV 将 R0 的值移到了 S0,导致 S0 的值不正确,变为一个非常小的值 1.08577e-19。

5、异常原因

发生异常的原因,主要是因为在执行 log 函数前一个错误的 VMOV 指令,而为什么会生成错误的 VMOV 指令,貌似和使用的编译器有关。后续又进行了一些对比测试,使用 gcc 编译器编译该段代码,发现没有问题。NEAI 团队使用了源码+Keil 编译器进行编译,也没有问题。唯独使用 Lib+Keil 编译器会出现该问题。NEAI 团队进一步对代码进行了简化分析,发现只要使用 lib 链接的方式+Keil ARMv6 的编译器,并使用 log 函数时,就会复现该问题。至此几乎可以断定,该问题是由 Keil 链接器导致的,NEAI 团队后续会联系 ARM 团队并反馈该问题。

6、规避方法

总结以上,规避的方法就很明确了:

  1. 使用源码编译。(但客户几乎无法获取 NEAI 库的源码)
  2. 避免使用 Keil。
  3. 请 NEAI 团队帮忙编译。

 

在线预览

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn