之前在开发过程中,总是会出现各种各样的内存跑飞,然而君正的OS是基于uc/os改进的,不同于Linux有很多的调试手段,一旦内存跑飞总是感到很棘手。因此,后面项目闲下来后,经过仔细的研究总算找到解决办法了。
我首先是通过代码构造了个crash的场景如下:

static void beep_task(void *arg)
{unsigned char err;unsigned char *sp = NULL;while (1) {os_SemaphorePend(beep_sem_sync, 0, &err);printf("%d\n", beep_cnt++);AppIndication(g_decResult.indicate_type);*sp = 1;  //空指针触发crashos_SemaphoreSet(beep_sem_sync, 0, &err);}
}

之后,开机触发crash,收集串口log,如下:

hid_keyboard_tx Send Failed
hid_keyboard_tx Send Failed
-----------------------------------------------------
8001f0c8:       92a40420
8001f0cc:       8e442bd8
8001f0d0:       00002821
8001f0d4:       02203021
8001f0d8:       0c0140e2
8001f0dc:       a0130000
8001f0e0:       08007c28
8001f0e4:       8e442bd8
-----------------------------------------------------
CAUSE=80800c0c --> TLB Store
EPC=8001f0d8$0  zero 00000000   $1  at 00000000   $2  v0 00000001   $3  v1 02000000 $4  a0 802eebac   $5  a1 00000000   $6  a2 8015f3e8   $7  a3 80070000 $8  t0 00000010   $9  t1 b000204c   $10 t2 b0002040   $11 t3 b0002048 $12 t4 00010001   $13 t5 b0002034   $14 t6 00000032   $15 t7 00000000 $16 s0 80160000   $17 s1 8015f3e8   $18 s2 80070000   $19 s3 00000001 $20 s4 80060000   $21 s5 802ead24   $22 s6 00000000   $23 s7 00000000 $24 t8 00000000   $25 t9 00000000   $26 k0 8015f3d8   $27 k1 00000000 $28 gp 8007ab70   $29 sp 8015f3d8   $30 fp 00000000   $31 ra 8001f0e0
g_pExcept[0].sp = 8015a2f0 sp = 8015f3d8
Restarting after 4 ms

ok,注意上面的PC指针,例如最后一条PC指针是指向的8001f0c8,ok,拿到这个PC指针后,我们去分析dump文件。

dump文件是存放在
mini_os\x1500-minios\yak\target\minios.dump

然后我们打开它,并探索地址8001f0c8,then

//8001f060 <beep_task>:
8001f060:   27bdffc8    addiu   sp,sp,-56
8001f064:   3c02802f    lui v0,0x802f
8001f068:   afb5002c    sw  s5,44(sp)
8001f06c:   afb40028    sw  s4,40(sp)
8001f070:   afb30024    sw  s3,36(sp)
8001f074:   afb20020    sw  s2,32(sp)
8001f078:   afb1001c    sw  s1,28(sp)
8001f07c:   afb00018    sw  s0,24(sp)
8001f080:   afbf0030    sw  ra,48(sp)
8001f084:   2455ad24    addiu   s5,v0,-21212
8001f088:   3c128007    lui s2,0x8007
8001f08c:   27b10010    addiu   s1,sp,16
8001f090:   3c108016    lui s0,0x8016
8001f094:   3c148006    lui s4,0x8006
8001f098:   24130001    li  s3,1
8001f09c:   8e442bd8    lw  a0,11224(s2)
8001f0a0:   02203021    move    a2,s1
8001f0a4:   0c014a3e    jal 800528f8 <os_SemaphorePend>
8001f0a8:   00002821    move    a1,zero
8001f0ac:   8e029414    lw  v0,-27628(s0)
8001f0b0:   26843f08    addiu   a0,s4,16136
8001f0b4:   00402821    move    a1,v0
8001f0b8:   24420001    addiu   v0,v0,1
8001f0bc:   0c007a85    jal 8001ea14 <printf>
8001f0c0:   ae029414    sw  v0,-27628(s0)
8001f0c4:   0c0095ef    jal 800257bc <AppIndication>
//8001f0c8: 92a40420    lbu a0,1056(s5)
8001f0cc:   8e442bd8    lw  a0,11224(s2)
8001f0d0:   00002821    move    a1,zero
8001f0d4:   02203021    move    a2,s1
8001f0d8:   0c0140e2    jal 80050388 <os_SemaphoreSet>
8001f0dc:   a0130000    sb  s3,0(zero)
8001f0e0:   08007c28    j   8001f0a0 <beep_task+0x40>
8001f0e4:   8e442bd8    lw  a0,11224(s2)

OK,dump文件非常明白的告诉了我们crash发生在beep_task函数中,而且是在AppIndication的下一条指令。

君正X1500基于Minios的crash分析相关推荐

  1. 君正Zeratul开发(2)——uboot启动分析

    前言    boot启动一般分为两个阶段,君正设备的第一阶段uboot spl 程序没有开源,用户编译的是第二阶段的boot,最后将两个阶段的boot合并到一起,写入到boot分区中去,boot分区如 ...

  2. 君正X2000/X1500主控CPU芯片应用场景推荐

    近期推出了多款搭载君正X2000.x1500芯片的应用案例,如二维码门禁.手持式有害气体检测仪.智能门锁.支付条码二维码等方案. 1,基于君正X2000二维码门禁方案 随着门禁行业的逐渐成熟发展,作为 ...

  3. 基于君正X1830-人脸识别解决方案介绍

    方案特点: 本人脸识别解决方案基于君正X1830芯片,硬件上提供了turnkey级的硬件参考设计,具有低成本高性能的优势,并且有丰富的外设配置和丰富的器件支持列表.软件方面使用linux系统,相比于A ...

  4. 尴尬君正,是如何被“创新”带到沟里去的?

    作为创业板的一个标杆,北京君正(300223)上市快三年了.在上市三年之际,重新回顾梳理这样一家集"自主创新""高新科技企业""国产CPU" ...

  5. 君正T20平台生成jffs2格式rootfs

    基于系统升级的考虑,这两天在君正T20平台上折腾如何生成jffs2 格式的rootfs.详细的过程如下: 1.修改uboot中的分区参数: 修改为rootfs格式为jffs2的,且适当扩大rootfs ...

  6. 君正4750开发板使用日记2-Linux环境搭建与内核编译

    为什么80%的码农都做不了架构师?>>>    Linux环境搭建与内核编译 上一篇中把4750开发板与PC的硬件连通了,这一篇记录的是基本的Linux环境的搭建.其实官方文档已经比 ...

  7. 情感分析与观点挖掘第五章笔记(上)/基于方面的情感分析/SentimentAnalysis-and-OpinionMining by Bing Liu

    Chapter 5 基于方面的情感分析_Aspect-based Sentiment Analysis 5.1 方面情感分类 5.2 观点和构成语义学的基本规则 随着各章的自然发展,本章应侧重于 短语 ...

  8. 基于联合独立成分分析(jICA)的EEG与fMRI耦合与解耦

    文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 导读 fMRI和EEG的有意义整合需要了解这些测量是否反映了相同神经源的活动,即估计神经成像模式之间的耦合与解耦程度.本文提出了一种基于联 ...

  9. 君正Magik算法平台介绍

    ------------摘自君正官方<magik_introduce> 00 引言 君正简介,芯片 + AI 算力 + AI 开发平台」方案落地,公布全栈式低功耗 AI 技术 01 Mag ...

  10. 君正主控CPU芯片,X2000多场景应用案例

    针对智能设备市场,雷龙发展近期推出基于多核异构跨界处理器X2000芯片的多场景应用案例.如智能门锁.激光打印机.扫译笔及显控板方案. [案例一]智能门锁:低功耗.响应速度快.防伪性能高 芯片:君正X2 ...

最新文章

  1. 投影参数_智能投影仪参数如何去看,其实很简单
  2. 局域网怎样自动安装FLASH插件(浏览器不安装flashplayer都可以浏览.swf文件)
  3. php登录半透明,WordPress透明OAuth 1.0使用PHP登录
  4. 使用Uploadify实现上传图片生成缩略图例子,实时显示进度条
  5. 老生常谈:工厂模式兄弟姐妹
  6. 用inno做setup遇到的一些问题及解决方法
  7. chi-squared检验_每位数据科学家都必须具备Chi-S方检验统计量:客户流失中的案例研究
  8. 使用Hystrix DSL创建弹性骆驼应用程序
  9. python做统计_利用 Python 进行统计
  10. 【金融申请评分卡】数据准备 - 造衍生变量
  11. 牛客OI周赛6-提高组 B 践踏
  12. CCS 软件仿真 支持6678
  13. 大于2019电大计算机应用上机表格题,2019年电大计算机应用基础试题及答案重要知识点...
  14. dedeCMS采集插件自动采集文章自定义接口
  15. 美团运筹优化实战——智能配送系统阅读笔记
  16. 阿里“中供系”前世今生:马云麾下最神秘的子弟兵
  17. 《沧浪之水》、《因为女人》作者阎真的最新作品《活着之上》的阅后笔记
  18. 关于电子科技大学(清水河校区)门禁设置的调研
  19. xls文件的读写操作
  20. SCP-Py-001

热门文章

  1. 作业一:建立博客、自我介绍、速读教材、学习进度总结(1)
  2. 玩转Metasploit系列(第二集)
  3. jquery中attr() 和 prop()的区别
  4. Android预定义样式?android:attr/attribute、?attr/attribute和?attribute
  5. 稳压电源通过什么样的当时分类,怎么去分类
  6. Sublime Text 使用记录汇总
  7. wireless 时好时断的一些解决的建议
  8. CISCO AP安裝方法
  9. sqlserver2000分页
  10. JeffreyLynny版面,开版第一篇!!!