奇怪的中断

2019-03-24 15:50发布

我使用IAR v5.4写了一段C代码,基于8962的。里面用到了一个结构体数组,当数组长度小于一个值时,程序是OK的,但是超过这个长度,程序连初始化的过程都不能正常走完( 自动跳入IntDefaultHandler,我查看了一下NVIC,据说是中断号19引起的,也就是定时器中断,可是我有对定时器中断进行处理的函数 )。
我也试着保持那个结构体数组小于那个所谓的“阈值”,同时又申明了一个较大的普通字符型数组,程序也能正常运行。   很好奇,这是什么原因引起的?   PS:我查看了一下map文件,显示  13344 bytes of readonly code memory                                                          536 bytes of readonly data memory                                                        1295 bytes of readwrite data memory   希望大家见多识广,能帮我解惑。另外个人经验不足,也不知道上面的信息量够不够,如果上面这些信息不够的话,还请大家明示,先谢谢大家了。     此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
heycare
1楼-- · 2019-03-24 23:13
< 是不是堆栈溢出
你把结构体数组变成全局变量试试看~
Yawness
2楼-- · 2019-03-25 01:04
< :TI_MSP430_内容页_SA7 -->

谢谢。我已经把结构体数组改成全局变量了,但结果是一样的。程序还是会自动跳入IntDefaultHandler,依然是中断号19引起的。

 

jkhu
3楼-- · 2019-03-25 03:29
 精彩回答 2  元偷偷看……
Yawness
4楼-- · 2019-03-25 05:00

原帖由 jkhu 于 2011-8-16 14:18 发表 您是不是初始化了定时器中断啊?不知道您程序里对定时器是怎么处理的。

对,我有使用到定时器,也使用了定时器中断。

 

代码用的都是API函数,应该大同小异,我觉得。

void user_timer_init()
{
   SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);

   TimerDisable(TIMER0_BASE, TIMER_A);
   TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);
   TimerPrescaleSet(TIMER0_BASE,TIMER_A,0);  //时钟不分频,20MHZ
   TimerLoadSet(TIMER0_BASE,TIMER_A,0x4E20);
  
   TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
   TimerIntRegister(TIMER0_BASE,TIMER_A, TIMER0_A_ISR);
   IntPrioritySet(INT_TIMER0A, TIMER_OUT_PRIO);

   IntMasterEnable();
}

void user_timer_start(void)
{
   TimerEnable(TIMER0_BASE,TIMER_A);
}

void TIMER0_A_ISR(void)
{
   TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
   Fre_count++;
}

一周热门 更多>

相关问题

    相关文章