我使用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
希望大家见多识广,能帮我解惑。另外个人经验不足,也不知道上面的信息量够不够,如果上面这些信息不够的话,还请大家明示,先谢谢大家了。
此帖出自
小平头技术问答
你把结构体数组变成全局变量试试看~
谢谢。我已经把结构体数组改成全局变量了,但结果是一样的。程序还是会自动跳入IntDefaultHandler,依然是中断号19引起的。
对,我有使用到定时器,也使用了定时器中断。
代码用的都是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++;
}
一周热门 更多>