查看: 4205|回复: 10

[求助] KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

[复制链接]
  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2014-6-13 12:21:49 | 显示全部楼层 |阅读模式
     问题出现在ICF中,以下是我的ICF文件,是从KL02_SC.zip中的32KB_Pflash.icf改写而来,怎么改都过不去,不知道哪里出问题了。
    stack pointer.jpg
     
    /*###ICF### Section handled by ICF editor, don't touch! ****/
    /*-Editor annotation file-*/
    /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
    /*-Memory Regions-*/
    define symbol __ICFEDIT_region_ROM_start__ = 0x00000410;//0x00000000;
    define symbol __ICFEDIT_region_ROM_end__   = 0x00003FFF;//********
    define symbol __ICFEDIT_region_RAM_end__   = 0x200005FF;
    define symbol __ICFEDIT_region_RAM_start__ =0x20000210;//__ICFEDIT_region_RAM_end__ - (2*1024)/4 + 0x410;//********
    /*-Specials-*/
    define symbol __ICFEDIT_intvec_start__     = 0;
     
    /*-Sizes-*/
    define symbol __ICFEDIT_size_cstack__ = (1024);//********
    define symbol __ICFEDIT_size_heap__   = (1024);//********
    /**** End of ICF editor section. ###ICF###*/
     
    //define symbol __region_RAM2_start__        = 0x20000000;
    //define symbol __region_RAM2_end__          = 0x200005FF;//__region_RAM2_start__ + ((2*1024)*3)/4 - 1;//********
     
    define exported symbol __VECTOR_TABLE      = 0x00000000;//__ICFEDIT_region_ROM_start__;
    define exported symbol __VECTOR_RAM        = __ICFEDIT_region_RAM_start__ - 0x410;
     
    define exported symbol __BOOT_STACK_ADDRESS = __ICFEDIT_region_RAM_end__ - 8;//__region_RAM2_end__ - 8;
     
    define symbol __code_start__ = __ICFEDIT_region_ROM_start__;//__ICFEDIT_region_ROM_start__ + 0x410;//********
     
    define memory mem with size = 4G;
    define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];// | mem:[from __region_FlexNVM_start__ to __region_FlexNVM_end__];//********
    define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];//mem:[from __ICFEDIT_region_RAM_start__   to __region_RAM2_end__];// | mem:[from __region_RAM2_start__ to __region_RAM2_end__];
     
    define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
    define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
     
    initialize manually { readwrite };
    initialize manually { section .data};
    initialize manually { section .textrw };
    do not initialize  { section .noinit };
     
    define block CodeRelocate { section .textrw_init };
    define block CodeRelocateRam { section .textrw };
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
    place at address mem:__code_start__ { readonly section .noinit };
     
    place in ROM_region   { readonly, block CodeRelocate};
     
    place in RAM_region   { readwrite, block CodeRelocateRam,
                            block CSTACK, block HEAP };
     
    我知道答案 目前已有9人回答
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    705

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1745
    最后登录
    1970-1-1
    发表于 2014-6-16 11:11:54 | 显示全部楼层

    RE:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    楼主找个官方的例程自带的看看啊,或者IAR安装目录下也是有的呢。
    从报错上看,应该是你的堆栈太大了,你改小点试试,你的芯片的RAM多大啊,你堆栈大小不能越RAM的届呢。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2014-6-16 13:14:28 | 显示全部楼层

    回复:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    回复第 2 楼 于2014-06-16 11:11:54发表:
    楼主找个官方的例程自带的看看啊,或者IAR安装目录下也是有的呢。
    从报错上看,应该是你的堆栈太大了,你改小点试试,你的芯片的RAM多大啊,你堆栈大小不能越RAM的届呢。
     
     
    我就是拿官方自带的历程改的,我用的MCU是MKL02Z16VFM4,官方例程是基于MKL02Z32VFM4的。
     
    关于堆栈的大小问题,我试过从ox10到0x400(测试程序很简单,就是在进入main之后让LED灯点亮,没有定义变量),问题是一样的,所以问题不是出在堆栈大小的问题,我做过多次尝试,但是就是报错。
     
    我使用MDK做测试没问题。
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    705

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1745
    最后登录
    1970-1-1
    发表于 2014-6-16 13:56:13 | 显示全部楼层

    RE:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    我说的是下面这个啊,
    /*-Sizes-*/
    define symbol __ICFEDIT_size_cstack__ = (1024);//********
    define symbol __ICFEDIT_size_heap__   = (1024);//********
    你RAM一共就2KB,但是你如果你堆和栈都用1K的话,那么道理上加起来是2K,就用光了,这个有些问题。
    而且,你看RM中,
    • SRAM_L = [0x2000_0000–(SRAM_size/4)] to 0x1FFF_FFFF
    • SRAM_U = 0x2000_0000 to [0x2000_0000+(SRAM_size*(3/4))-1]
    很明显,你堆栈越界了。
    所以,你把这个值搞小点试试,比如都搞个512试试。
    你改的是这个大小吗?还是ROM起始地址呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    705

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1745
    最后登录
    1970-1-1
    发表于 2014-6-17 09:45:37 | 显示全部楼层

    RE:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    楼主咋没反应了?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2014-6-17 10:41:04 | 显示全部楼层

    回复:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    回复第 5 楼 于2014-06-17 09:45:37发表:
    楼主咋没反应了?
     
    曾做过如此修改,但是问题依然:
     
    define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;//0x00000000;
    define symbol __ICFEDIT_region_ROM_end__   = 0x00003FFF;//********
    define symbol __ICFEDIT_region_RAM_end__   = 0x200005FF;
    define symbol __ICFEDIT_region_RAM_start__ =0x20000210;//__ICFEDIT_region_RAM_end__ - (2*1024)/4 + 0x410;//********
    /*-Specials-*/
    define symbol __ICFEDIT_intvec_start__     = 0;
     
    /*-Sizes-*/
    define symbol __ICFEDIT_size_cstack__ = (64);//********
    define symbol __ICFEDIT_size_heap__   = (64);//********
    /**** End of ICF editor section. ###ICF###*/
     
    //define symbol __region_RAM2_start__        = 0x20000000;
    //define symbol __region_RAM2_end__          = 0x200005FF;//__region_RAM2_start__ + ((2*1024)*3)/4 - 1;//********
     
    define exported symbol __VECTOR_TABLE      = 0x00000000;//__ICFEDIT_region_ROM_start__;
    define exported symbol __VECTOR_RAM        = 0x00000000;//__ICFEDIT_region_RAM_start__ - 0x410;
     
    define exported symbol __BOOT_STACK_ADDRESS = __ICFEDIT_region_RAM_end__ - 8;//__region_RAM2_end__ - 8;
     
    define symbol __code_start__ = __ICFEDIT_region_ROM_start__;//__ICFEDIT_region_ROM_start__ + 0x410;//********
     
    define memory mem with size = 4G;
    define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];// | mem:[from __region_FlexNVM_start__ to __region_FlexNVM_end__];//********
    define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];//mem:[from __ICFEDIT_region_RAM_start__   to __region_RAM2_end__];// | mem:[from __region_RAM2_start__ to __region_RAM2_end__];
     
    define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
    define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
     
    initialize manually { readwrite };
    initialize manually { section .data};
    initialize manually { section .textrw };
    do not initialize  { section .noinit };
     
    define block CodeRelocate { section .textrw_init };
    define block CodeRelocateRam { section .textrw };
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
    place at address mem:__code_start__ { readonly section .noinit };
     
    place in ROM_region   { readonly, block CodeRelocate};
     
    place in RAM_region   { readwrite, block CodeRelocateRam,
                            block CSTACK, block HEAP };
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2019-4-1 22:48
  • 签到天数: 302 天

    连续签到: 1 天

    [LV.8]以坛为家I

    87

    主题

    7322

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    4614
    最后登录
    2021-1-25
    发表于 2014-6-17 13:23:40 | 显示全部楼层

    RE:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    查下红色部分和堆栈是否超出氛围呢有影响吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11

    主题

    354

    帖子

    0

    高级会员

    Rank: 4

    积分
    693
    最后登录
    1970-1-1
    发表于 2014-6-18 13:11:33 | 显示全部楼层

    回复:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    我咋发现楼主改的icf文件有点乱呢
    推荐你看下野火的三天入门M4有详细讲解各部分含义
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    802

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1763
    最后登录
    1970-1-1
    发表于 2014-6-18 16:45:26 | 显示全部楼层

    RE:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    程序有点长啊, 如果照搬没问题的话, 可以一条条改了看
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    147

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    343
    最后登录
    1970-1-1
    发表于 2014-6-19 15:47:05 | 显示全部楼层

    RE:KL05Z32VFM4下的软件迁移到KL02Z16VFM4下出现问题,编译器是EWARM

    楼主前面按照这个配置:
    define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
    define symbol __ICFEDIT_region_ROM_end__   = 0x00003FFF;
    define symbol __ICFEDIT_region_RAM_start__ = 0x1ffffe00;
    define symbol __ICFEDIT_region_RAM_end__   = 0x1fffffff;
    /*-Sizes-*/
    define symbol __ICFEDIT_size_cstack__ = 0x200;
    define symbol __ICFEDIT_size_heap__   = 0x200;
    /**** End of ICF editor section. ###ICF###*/
    define symbol __region_RAM2_start__                 = 0x20000000;
    define symbol __region_RAM2_end__                         = 0x200005ff;
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 21:37 , Processed in 0.112059 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表