程序是在RAM上跑的,发现一个比较奇怪的现象。
一开始我只有4个c文件(main,io,pwm,adc ),这时候build和debug都是正常,现象如预期。
当我再添加一个c文件(elecpara)后,build通过,按debug,再点击run后会直接进入到ILLEGAL_ISR()这个函数。
在main.c文件中没有调用elecpara.c文件的任何函数,只是把这个elecpara.c文件link到project,就会出现这个现象。
通过单步调试发现,进入main函数后,在运行到自己写的函数sine_initial()(这个函数在main.c里)第3行后就会跳入非法中断。
1. MScc.SaFreq_glv = MPwm.FreqAD_gfv; 2. MScc.SineFreq_gqv = _IQ(50); 3. MScc.SinePeriod_gsv = (Uint16)_IQdiv(MScc.SaFreq_glv, MScc.SineFreq_gqv);
但个人觉得应该不是这些语句的问题。因为4个c文件的时候是正常运行的,这里也会运行到,怎么就不跳入非法中断呢。
查了网上很多跳入非法中断的问题都是烧录到flash时出问题,也有说要改cmd文件,数据空间分配不够。
那是不是因为我添加了elecpara.c(对应头文件中定义了比较多的结构体),导致空间分配出错了?
Serenity_pjb:
回复 Green Deng:
现在改为烧录到flash运行后就没有出现上述现象了。
有加配置文件,ccxml文件呀,都添加了。