你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

IAP无法跳转的问题

[复制链接]
luankelong 提问时间:2018-1-26 14:29 /
阅读主题, 点击返回1楼
收藏 评论15 发布时间:2018-1-26 14:29
15个回答
luankelong 回答时间:2018-2-7 10:58:56
安 发表于 2018-2-6 15:36
应该是在工程配置里面,有一项是起始地址。我没有IAR,你找一下配置中的。应该是在MCU这一项。 ...

IAR options/linker是有配置起始地址的选项,我已经设置了。现在的感觉所有的设置都正确,但不运行,只有在iap程序中跳转至应用程序前初始化一个引脚才能正常启动,这就比较奇怪了
回答时间:2018-2-7 14:54:45
最好还是要找到原因,这个不是解决问题的办法。楼主弄一个最简单的工程,只有串口打印,bootloder不要开启任何中断。测试一下。看一下是不是开启了其他的中断,我们也用了很长时间的bootloder,也没发生类似的问题。
luankelong 回答时间:2018-2-11 10:01:52
安 发表于 2018-2-7 14:54
最好还是要找到原因,这个不是解决问题的办法。楼主弄一个最简单的工程,只有串口打印,bootloder不要开启 ...

我知道这样是不行的,目前我的工程仅翻转IO电平,已经是最简单了。没有别的思路可以进一步测试
luankelong 回答时间:2018-3-1 15:57:53
问题解决。
所用的icf有问题,未初始化一部分stack。正确的icf文件如下:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08002000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08002200;
define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000130;
define symbol __ICFEDIT_region_RAM_end__   = 0x2000FeFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 2100;
define symbol __ICFEDIT_size_svcstack__ = 0x4;
define symbol __ICFEDIT_size_irqstack__ = 0x4;
define symbol __ICFEDIT_size_fiqstack__ = 0x4;
define symbol __ICFEDIT_size_undstack__ = 0x4;
define symbol __ICFEDIT_size_abtstack__ = 0x4;
define symbol __ICFEDIT_size_heap__     = 0x40;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly};
place in RAM_region   { readwrite,
                        block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
                        block UND_STACK, block ABT_STACK, block HEAP, last section IRAM};

//place at end of RAM_region {readwrite};

错误的icf文件内容如下:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08002000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08002200;
define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000130;
define symbol __ICFEDIT_region_RAM_end__   = 0x20010000;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x200;                                 //0x200
define symbol __ICFEDIT_size_heap__   = 0x200;                                                 //0x200
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };

icf文件使用路径:工程右键/options/linker
黑色裂变 回答时间:2018-4-14 21:50:23
luankelong 发表于 2018-3-1 15:57
问题解决。
所用的icf有问题,未初始化一部分stack。正确的icf文件如下:
/*###ICF### Section handled by ...

错误的icf文件是哪来的?
king321 回答时间:2018-4-20 16:48:36
IAR  option->linker->edit项里面的vector table和memory regions设置正确。
NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0 );
这个API宏不要改,只更改第二个参数,偏移量
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版