• 資料介紹
    • 1、簡(jiǎn)介
    • 2、項(xiàng)目介紹
    • 3、發(fā)生異常
    • 4、調(diào)試過(guò)程
    • 5、異常原因
    • 6、規(guī)避方法
  • 資料預(yù)覽
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

LAT1457 Keil工程使用NEAI庫(kù)的異常問(wèn)題

03/11 16:49
978
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

LAT1457 Keil工程使用NEAI庫(kù)的異常問(wèn)題

996.49 KB

1、簡(jiǎn)介

最近在給客戶完成電機(jī)預(yù)測(cè)性維護(hù)類的 POC 項(xiàng)目時(shí),使用 Keil 編譯器時(shí)遇到了一個(gè) NEAI 庫(kù)的異常,在和歐洲 NEAI 團(tuán)隊(duì)調(diào)查過(guò)程中發(fā)現(xiàn)了比較奇怪的 BUG,本文將介紹該問(wèn)題發(fā)生的條件和后續(xù)的規(guī)避方法。

2、項(xiàng)目介紹

該項(xiàng)目是和電機(jī)相關(guān)的預(yù)測(cè)性維護(hù)項(xiàng)目,需要模擬一些異常的情況,然后使用 NEAI 進(jìn)行建模和部署。然后采集正常和異常的數(shù)據(jù),使用 NEAI 的 Abnormal detection 類方法,進(jìn)行訓(xùn)練,訓(xùn)練完成后進(jìn)行部署。

3、發(fā)生異常

發(fā)生異常是在部署的時(shí)候,使用 neai_anomalydetection_detect 這個(gè) API 的返回值發(fā)生了異常。該函數(shù)使用 input_user_buffer 中的數(shù)據(jù),進(jìn)行推理,然后將結(jié)果返回到 similarity 變量中。similarity 變量的值范圍為 0~100,表示 input_user_buffer 中的數(shù)據(jù)和正常數(shù)據(jù)相比相似度大概是多少,通過(guò)這個(gè)返回結(jié)果,可以判斷設(shè)備運(yùn)轉(zhuǎn)是正常還是異常。但是在實(shí)際部署測(cè)試的時(shí)候,發(fā)現(xiàn) similarity 變量的值有時(shí)候會(huì)超過(guò) 100,明顯是一個(gè)不合理的值。

4、調(diào)試過(guò)程

該問(wèn)題非常隱蔽和難以發(fā)現(xiàn),歐洲 NEAI 開(kāi)發(fā)團(tuán)隊(duì)的同事也花了非常多的精力才定位到發(fā)現(xiàn)問(wèn)題的點(diǎn),目前正在執(zhí)行 NEAI 庫(kù)中的 log 函數(shù),其中 S0 的值 0.046875 是正確的值,此時(shí)單步執(zhí)行下一步匯編代碼中的 VMOV 將 R0 的值移到了 S0,導(dǎo)致 S0 的值不正確,變?yōu)橐粋€(gè)非常小的值 1.08577e-19。

5、異常原因

發(fā)生異常的原因,主要是因?yàn)樵趫?zhí)行 log 函數(shù)前一個(gè)錯(cuò)誤的 VMOV 指令,而為什么會(huì)生成錯(cuò)誤的 VMOV 指令,貌似和使用的編譯器有關(guān)。后續(xù)又進(jìn)行了一些對(duì)比測(cè)試,使用 gcc 編譯器編譯該段代碼,發(fā)現(xiàn)沒(méi)有問(wèn)題。NEAI 團(tuán)隊(duì)使用了源碼+Keil 編譯器進(jìn)行編譯,也沒(méi)有問(wèn)題。唯獨(dú)使用 Lib+Keil 編譯器會(huì)出現(xiàn)該問(wèn)題。NEAI 團(tuán)隊(duì)進(jìn)一步對(duì)代碼進(jìn)行了簡(jiǎn)化分析,發(fā)現(xiàn)只要使用 lib 鏈接的方式+Keil ARMv6 的編譯器,并使用 log 函數(shù)時(shí),就會(huì)復(fù)現(xiàn)該問(wèn)題。至此幾乎可以斷定,該問(wèn)題是由 Keil 鏈接器導(dǎo)致的,NEAI 團(tuán)隊(duì)后續(xù)會(huì)聯(lián)系 ARM 團(tuán)隊(duì)并反饋該問(wèn)題。

6、規(guī)避方法

總結(jié)以上,規(guī)避的方法就很明確了:

  1. 使用源碼編譯。(但客戶幾乎無(wú)法獲取 NEAI 庫(kù)的源碼)
  2. 避免使用 Keil。
  3. 請(qǐng) NEAI 團(tuán)隊(duì)幫忙編譯。

 

資料預(yù)覽

相關(guān)推薦