This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Cortex-M7 Platform Machine Learning KWS example issue using CMSIS-NN

大家好! 好一段時間沒發文了,其實這半年來小弟我一直在鑽研MCU方面的知識,算是閉關練功吧!沒有新的板子問世深感抱歉!

目前在鑽研的平台為安森美的LC823450 Cortex-M3雙核 與IMXRT1050 Cortex-M7單核, 使用的應用情境為ARM主推的神經網路CMSIS-NN,作業系統為ucLinux!

使用的範例為:
https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/NN/Examples/ARM/arm_nn_examples/cifar10

這個兩個平台都跑的很順!但是當我使用喚醒詞的範例:
https://github.com/ARM-software/ML-KWS-for-MCU/tree/master/Deployment/Examples/simple_test

編譯過後執行時一直出現錯誤:
cmsis-kws-test: fault at 0x898a2028 [pc=0x81904e60, sp=0x819b2dac]
Precise data bus error

SEGV

我stack size已經拉到2MB了,根據ARM的官方文件應該不需要這麼多,請前輩們指點一些方向,我trace一下似乎是做MFCC運算時造成crashed,謝謝!

Parents
  • 已经说了是 Precise data bus error,说明是数据访问错误(不是取指令的问题),有以下几种可能:

    1. 数据对齐问题

    2. 工程的memory layout和实际硬件的memory layout不一致,表现为,比如工程的 DATA被放在了某个地址上,然而物理硬件上这里实际并没有RAM

    3. MPU配置错误

    4. 栈溢出或者是出现了野指针——比如堆没有正确初始化,或者堆大小太小)导致C++建立对象失败返回了NULL

    建议首先检查memory layout,确保scatter-script和物理硬件对应无误(如果物理硬件有用到SDRAM之类,先检查SDRAM是否在被使用前已经初始化了),其次,检查堆的大小是否正确。

    而且这个PC地址(0x81904e60)明显有问题,不像是一个正确的指令所在的位置,建议检查map文件,确认这个地址确实是存放程序的;如果不是存放程序的,那么很大可能性是栈出现了问题,需要检查栈的大小——如果栈大小正确,那么应该考虑是否是bss里面某些指针操作侵入了栈所在的区域——这就需要修改scatter-script来改变栈的位置等等,看看是否现象会改变。

Reply
  • 已经说了是 Precise data bus error,说明是数据访问错误(不是取指令的问题),有以下几种可能:

    1. 数据对齐问题

    2. 工程的memory layout和实际硬件的memory layout不一致,表现为,比如工程的 DATA被放在了某个地址上,然而物理硬件上这里实际并没有RAM

    3. MPU配置错误

    4. 栈溢出或者是出现了野指针——比如堆没有正确初始化,或者堆大小太小)导致C++建立对象失败返回了NULL

    建议首先检查memory layout,确保scatter-script和物理硬件对应无误(如果物理硬件有用到SDRAM之类,先检查SDRAM是否在被使用前已经初始化了),其次,检查堆的大小是否正确。

    而且这个PC地址(0x81904e60)明显有问题,不像是一个正确的指令所在的位置,建议检查map文件,确认这个地址确实是存放程序的;如果不是存放程序的,那么很大可能性是栈出现了问题,需要检查栈的大小——如果栈大小正确,那么应该考虑是否是bss里面某些指针操作侵入了栈所在的区域——这就需要修改scatter-script来改变栈的位置等等,看看是否现象会改变。

Children
No data