发布: 2009-5-21 09:36 | 作者: anson | 来源: StmFans思蜕盟 OPELC 自由电子联盟
QUOTE:
VECT_TAB_FLASH armcu 发表于 2009-5-22 00:05
嗯 很有可能 试一下~~· littleworm 发表于 2009-5-22 09:24
我也查了条件编译的设置,没找到问题呀。还有那位DX遇到了同样情形,交流一下。
我用MDK调Systick时 在ram里跑就卡中断 flash里就可以。
是不是大伙都喜欢裸奔啊
我用库函数
一直感觉还是比较稳定的啊~~~
我的串口通讯程序就是你的教程里的 WORM_UART_INT.rar (IAR442)那个。我可一句都没改过呀。只不过我用的万利199板子。在ram里收发都OK,在flash里就不能收了。 在中断里设断点,可是根本就进不了中断。
QUOTE:
嗯 很有可能试一下~~·
QUOTE:
试过了,我一开始就注意这个问题,是中断向量表的存放位置,改成flash都不行只是有个印象。。。
小声问一下 littleworm 什么叫 库函数???
在 main.c中,中断向量表设置函数为:-
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
。。。。
}
现改为:-
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
//#ifdef VECT_TAB_RAM
// NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
//#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
//#endif
... ...
}
编译后无论是在flash里仿真还是在板直接运行,串口都能正常工作。也就是说,中断工作正常。看来问题确是出在flash中断向量表的配置上。但令人困惑的是为什么 #ifdef VECT_TAB_RAM ... ... #else ... 语句不能正确判断指向呢?
VECT_TAB_FLASH即可
注意有可能是编译器设置中定义的……
具体和你用的环境有关
在Project -> Options -> C/C++ Compiler -> Preprocessor 里的 Defined Symbols 栏中,定义了VECT_TAB_RAM。 这样就只能在ram里运行了。
把这个定义删掉后,编译环境才会按照在Linker -> Config 和debug -> Download 里的设置来选择在ram或Flash里运行。
希望对其他刚入手的同学有帮助。
VECT_TAB_RAM 这个东西我是在工程配置里面设置了的
原来楼主用我的那个程序
换成flash跑的时候没有修改过来~~
呵呵 搞定了就好
应该是:-
如果想在ram里运行,在Project -> Options -> C/C++ Compiler -> Preprocessor 里的 Defined Symbols 栏中,定义VECT_TAB_RAM。
如果想在flash里运行,在Project -> Options -> C/C++ Compiler -> Preprocessor 里的 Defined Symbols 栏中,定义了VECT_TAB_FLASH。
这样应该就没有问题了。