[文章]【HarmonyOS_Hi3861学习笔记】【连载】--调试AHT20中遇到的问题以及定位并解决的方法

阅读量0
0
0
根据例程和参考网上的aht20驱动进行移植。编译阶段就有错误,一步步解决掉了。但是编译成功后下到板子上就抓虾了。cpu一直在重启。串口打印了很多异常信息。
  1. [22:36:28.531]收←◆AHT20 Init Success

  2. [22:36:28.612]收←◆=======KERNEL PANIC=======

  3. **********syserr info start**********
  4. kernel_ver      : Hi3861V100 R001C00SPC025,2020-09-03 18:10:00
  5. **********Exception Information**********
  6. PC Task Name    : AHT20Tas       
  7. PC Task ID      = 9
  8. Cur Task ID     = 9
  9. Task Stack Size = 0x400
  10. Exception Type  = 0x7
  11. **********reg info**********
  12. mepc         = 0x4a1580
  13. mstatus      = 0x1880
  14. mtval        = 0x4
  15. mcause       = 0x7
  16. ccause       = 0x7
  17. ra           = 0x4a1562
  18. sp           = 0xfa5a0
  19. gp           = 0x11a9c0
  20. tp           = 0x83d9000b
  21. t0           = 0x8
  22. t1           = 0xffffffe0
  23. t2           = 0x88
  24. s0           = 0xe41c8
  25. s1           = 0xf4240
  26. a0           = 0x0
  27. a1           = 0xfa619
  28. a2           = 0xfa5ec
  29. a3           = 0xe97a4
  30. a4           = 0xd00a0dff
  31. a5           = 0x41764
  32. a6           = 0x0
  33. a7           = 0x4
  34. s2           = 0x13131313
  35. s3           = 0xfa654
  36. s4           = 0x4afcec
  37. s5           = 0x4afcd4
  38. s6           = 0x4afcbc
  39. s7           = 0x8080808
  40. s8           = 0x7070707
  41. s9           = 0x6060606
  42. s10          = 0x5050505
  43. s11          = 0x4040404
  44. t3           = 0xfa5ac
  45. t4           = 0x0
  46. t5           = 0xdb760
  47. t6           = 0xdb760
  48. **********memory info**********
  49. Pool Addr    = 0xe8780
  50. Pool Size    = 0x2fe40
  51. Fail Count   = 0x0
  52. Peek Size    = 0x141e0
  53. Used Size    = 0x141c0
  54. **********task info**********
  55. Name         : AHT20Tas       
  56. ID           = 9
  57. Status       = 0x14
  58. Stack Index  = 0x8
  59. Stack Peak   = 0x290
  60. Stack Size   = 0x400
  61. SP           = 0x11a860
  62. Stack        : 0xfa290 to 0xfa690
  63. Real SP      = 0xfa5a0
  64. Stack Overflow  = 0
  65. **********track_info**********
  66. current_item:0x6
  67. item_cnt:10
  68. Index   TrackType   TrackID  CurTime  Data1  Data2
  69. 0001 0065 0007 0x66 0x3f5e78 0x3f5e78
  70. 0002 0065 0006 0x66 0x3f5e78 0x3f5e78
  71. 0003 0065 0009 0x66 0x3f5e78 0x3f5e78
  72. 0004 0065 0001 0x66 0x3f5e78 0xd99ec
  73. 0005 0016 0007 0x66 0xd99ec 0x0
  74. 0006 0065 0009 0x67 0xd99ec 0x3f5e78
  75. 0007 0065 0001 0x64 0x3f5e78 0xd99ec
  76. 0008 0016 0007 0x64 0xd99ec 0x0
  77. 0009 0016 0007 0x65 0xd99ec 0x0
  78. 0010 0065 0000 0x66 0xd99ec 0x3f5e78
  79. **********Call Stack**********
  80. Call Stack 0 -- 3f78c0 addr:fa67c
  81. Call Stack 1 -- 3f5e24 addr:fa68c
  82. **********Call Stack end**********
复制代码
程序没运行起来。一直重启。这就麻烦了,不知道从哪入手去解决问题。
搞了两个晚上,在官方的文档中找到个很有用的文档:Hi3861V100/Hi3861LV100 常见问题 FAQ.pdf。里面的第三章有详细讲解死机信息和死机问题。接下来就是参考文档中提供的方法一步步去定位问题。
[attach]992098[/attach]
根据步骤3找到mepc地址:0x4a1580
[attach]992102[/attach]
根据地址0x4a1580找到.asm文件中的对应函数。即找到出错的函数了。
[attach]992106[/attach]
定位到是在AHT20_Task函数中调用AHT20_ReadHT出问题了。已经缩小范围了,继续找引发问题的具体原因。
然后继续在map文件中找函数中用到的内存或者变量定义。找到如下部分,定义的结构体变量定义成了指针类型的,调用的时候又没有分配空间
[attach]992107[/attach]
解决办法,直接定义为结构体变量,这样编译器就会自动分配内存空间了。
[attach]992108[/attach]
至此找到问题并解决了该问题。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友