打印

关于在ram中仿真的问题,求解决

[复制链接]
2698|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fayeyang|  楼主 | 2009-9-23 12:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触stm32,现有以下问题求教:

环境:

    使用万利的开发板stm3210E,芯片为f103zet6,使用板上自带的st-linkII

    编译器为IAR v5.30

    icf文件已设置为stm32f10x_ram.icf(拷贝自万利例程目录下带的icf);

    在工程的初始化部分设置向量表重定位寄存器为SCB_VTOR = 0x2000 0000;

    板子上启动方式的跳线已跳成从RAM启动;

问题:

    SysTick中断时不跳转到相应的isr,程序会跳到0x2000 0004地址处死住了

----------------------------------------------------------------------------

若将工程配置成在flash中仿真时,则一切正常。

请各位高手帮忙解决,谢谢
沙发
fayeyang|  楼主 | 2009-9-23 12:42 | 只看该作者
这是我的icf文件的部分内容:

/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x20000000;
define symbol __ICFEDIT_region_ROM_end__     = 0x2000FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x2000FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 0x400;
define symbol __ICFEDIT_size_heap__     = 0x200;
/**** End of ICF editor section. ###ICF###*/

有个疑问是:

    ROM和RAM地址重合了,编译器在使用RAM时会不会覆盖了程序代码?
比方说在0x2000 0000地址处开始存放向量表,编译器会不会把1个变量也放在0x2000 0000地址?

使用特权

评论回复
板凳
void_c| | 2009-9-23 13:28 | 只看该作者
#ifdef VECT_TAB_RAM
     NVIC_SetVectorTable(NVIC_VectTab_RAM , 0x0);
#else
     NVIC_SetVectorTable(NVIC_VectTab_FLASH , 0x0);
#endif

使用特权

评论回复
地板
fayeyang|  楼主 | 2009-9-23 13:56 | 只看该作者
回楼上的,我没有使用库,我是直接给vtor寄存器赋值0x2000 0000

( *( volatile unsigned int* )0xE000ED08 ) = 0x20000000;   //vtor = 0x20000000

库函数NVIC_SetVectorTable()的代码我看了,当实参为NVIC_VectTable_RAM时,就是给vtor寄存器赋

值0x20000000。所以我上面这句作用应该和使用库是一样的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

13

帖子

0

粉丝