打印

在MDK下,已RAM中断映射,却无法让含中断的程序在RAM中调试

[复制链接]
3964|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
渤海三叠浪|  楼主 | 2009-5-16 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void NVIC_Configuration(void)
{
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
}

已经添加了上面这句,还需要设置什么呢?
沙发
渤海三叠浪|  楼主 | 2009-5-17 17:27 | 只看该作者

香主帮忙啊???!!!!!!!!!!!!!!!1

使用特权

评论回复
板凳
香水城| | 2009-5-17 21:09 | 只看该作者

你有没有把中断向量表重映射到RAM中?

也可以看看固件库中的例程。

使用特权

评论回复
地板
btiger2000| | 2009-5-18 09:07 | 只看该作者

如果实在MDK下,需要加在一个。ini文件,文件中重新加载了

中断向量表;如果是IAR,要加载连接文件.xcl

使用特权

评论回复
5
lut1lut| | 2009-5-18 10:26 | 只看该作者

3.0.0新库,使用中断时需要注意:

由于新库里面没有
NVIC_SetVectorTable(NVIC_VectTab_FLASH/NVIC_VectTab_RAM, 0x0);   这个函数来设置SCB->VTOR


这样的话,linker file(flash or sram)必须和BOOT引脚的设置搭配!

使用特权

评论回复
6
bhsdlmj| | 2009-5-18 10:57 | 只看该作者

楼上:你的意思是V3.0的库没有设置设置SCB->VTOR的函数么?

新库有这个函数啊!!

我试了一下!!

用了这个函数后,全速运行 灯可以闪烁!但是设置断点 进步不了中断。原因不明!

使用特权

评论回复
7
lut1lut| | 2009-5-18 11:20 | 只看该作者

哦,是有的,看漏了

老库中关于NVIC的四个功能保留在了新库中的<misc.c>中:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);

在RAM和FLASH中运行,异常向量表要放在相应的地方,通过这个函数设置。

使用特权

评论回复
8
渤海三叠浪|  楼主 | 2009-5-19 11:00 | 只看该作者

各位 还是没有解决啊

-----------------------------------------------
回3楼 例程没有这个啊  只有在FLASH中偏移中断向量表的。

除了写这个函数为

void NVIC_Configuration(void)
{
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
}

估计应该还需要 将MDK的Option的 Target和Linker选项,谁会的 说一下!!!

使用特权

评论回复
9
渤海三叠浪|  楼主 | 2009-5-20 15:26 | 只看该作者

现在看来,4楼是正解啊!!!!!

确实要弄脚本才能进行RAM调试

使用特权

评论回复
10
bhsdlmj| | 2009-5-20 15:48 | 只看该作者

楼上说的有道理 ,有时候 连接脚本 调试脚本

是要会的 。对软件了解的多一点 还是很有好处的!

使用特权

评论回复
11
bhsdlmj| | 2009-5-21 15:06 | 只看该作者

楼主!!!

如果你在 RAM.ini里面有了 
  /* 向量表偏移量寄存器VTOR的地址是0xE000ED08  void _WDWORD (address, ulong val)向参数指定的地址处"写入"1个长整型的数据*/ 
  _WDWORD(0xE000ED08, 0x20000000);    // Setup Vector Table Offset Register
}的话,那么
void NVIC_Configuration(void)
{
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
}
就没有必要加了  二者选择其一就可以了!!!


另外 如果用的是STLINKII  那么在MDK下 使用RAM调试的意义不大

因为 即便STLINK功能相对差点  并不能像JLINK那样 点击DEBUG后 设置断点运行


用了STLINK点击DEBUG 在RAM中调试  就会立马全速运行 !!!
这时候可以点击halt   然后才可以设置一些断点  。

STLINK 啊 太弱了!!!!

使用特权

评论回复
12
bhsdlmj| | 2009-5-21 15:49 | 只看该作者

更正一下 我在11楼的说法

STLINK2在MDK ram调试还是可以的!
可能是我在11楼用的例子是由于进行了端口映射的原因!!

刚才我换了个例子。用了STLINK点击DEBUG 在RAM中调试,就不自动运行了!!!  可以 自由的设置断点了!!!!

这样看来 可能并不是STLINK2的问题  也有可能是MDK对端口映射的支持不是很好

使用特权

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

本版积分规则

62

主题

637

帖子

1

粉丝