在线时间23 小时
UID1891584
注册时间2016-8-17
NXP金币0
该用户从未签到
注册会员

- 积分
- 189
- 最后登录
- 2019-5-21
|

楼主 |
发表于 2017-9-27 11:53:33
|
显示全部楼层
我把我昨天调试的几点经验在这里跟大家做个分享
1,昨天调试的时候,我发现程序一运行起来,就跑到
void default_isr(void)
{
#define VECTORNUM (*(volatile uint32_t*)(0xE000ED04))
//printf("\n****default_isr entered on vector %d*****\r\n\n",VECTORNUM);
return;
}
2,后来我查了资料,对这块中断向量表的入口函数进行分析
a, VECTORNUM 这个宏 是对应到M0内核的NVIC_INT_CTRL
b,我在memory 找到该地址的值是3,于是我分析,对应的中断函数
#define VECTOR_003 default_isr // 0x0000_000C 3 - ARM core Hard Fault
3,我分析为什么会导致hardfault,经过分析M0内核的一些堆栈,我发现我任务其实第一次是进去了的,但是后面就跑到hardfault了,所以我判定是我的任务函数导致程序跑飞,后来我吧任务函数 一步步去掉,才发现是
static OS_STK AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE];
static OS_STK AppTaskLED2Stk[APP_CFG_TASK_LED2_STK_SIZE];
static OS_STK AppTaskLED3Stk[APP_CFG_TASK_LED3_STK_SIZE];
#define APP_CFG_TASK_START_STK_SIZE 16u//256u
#define APP_CFG_TASK_LED1_STK_SIZE 16u//128u
#define APP_CFG_TASK_LED2_STK_SIZE 16u//128u
#define APP_CFG_TASK_LED3_STK_SIZE 16u//128u
#define APP_CFG_TASK_LED4_STK_SIZE 16u//128u
总结,在调试的时候 我一直查M0内核权威指南,里面有很多比较有经验的东西值得借鉴!
|
|