我把程序加載到內存后,不能運行,用openocd手動修改pc為0x2000'0004所指地址后才可以運行。
看了一下器件參考手冊,手冊的意思貌似是:從sram啟動時,硬件不會自動更新msp和pc等寄存器,故運行立馬會出錯,出錯后調用某段程序重新映射向量表?
是這樣的嗎?
具體因該怎麼弄?我初學,不太熟悉NVIC相關。
回复 楼主 dukedz 的帖子
如果你想在Sram中运行需要将你的中断向量地址映射到Sram区!
手册上面是这样说的:
Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。
当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。
请问这种特殊的机制到底是什么机制?就算把中断向量地址映射到sram区,cpu还是获取不到向量表呀,因为sram不走ICode总线呀。
我目前是用这种方法代替的:BOOT引脚配置成从flash启动,flash第一个单元的MSP初值始终设为sram最后一个内存地址;flash第二个单元的PC地址指向flash上面的一小段不破坏sram的"启动代码",该启动代码只做一件事,就是把当前PC值用sram上面第二个单元的内容替换。其它异常向量亦是如此,不过还要加寄存器保护的代码。
虽然能解决问题,但还是希望用传统的sram启动来调试代码。
[ 本帖最后由 dukedz 于 2010-6-7 09:07 编辑 ]