查看: 1730|回复: 2

[求助] MK60DN512VLQ10的0x20000000后面是位带别名区吗

[复制链接]
  • TA的每日心情
    开心
    2018-8-30 16:02
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    1065

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1851
    最后登录
    2019-11-19
    发表于 2015-8-29 01:07:39 | 显示全部楼层 |阅读模式
        我在之前一个帖子MDK怎么将函数放在RAM中运行询问怎么将代码放在RAM运行。最终找到了原因,是我将代码复制到0x20020000后去了,而查RM发现这个地方是位带区,所以程序一到复制代码时就进HardFault。我将这个复制的目标地址改了一下就可以运行了。但我发现分散加载文件将堆栈放到了0x2001000到其前0x400处,这不也是位带区吗?可是运行起来并没有进HardFault。。。。这是为什么呢?后来我将分散加载文件改了一下,将堆栈放到0x20000000之前,也可以正常运行,但调试发现0x20010000之前还是有数据,如下图,不知道这是乱码还是程序作用的?
    捕获4.PNG
      顺便附上原来的分散加载文件:
      #define __ram_vector_table__
    #if (defined(__ram_vector_table__))
      #define __ram_vector_table_size__    0x00000400
    #else
      #define __ram_vector_table_size__    0x00000000
    #endif

    #define m_interrupts_start             0x00000000
    #define m_interrupts_size              0x00000400
    #define m_flash_config_start           0x00000400
    #define m_flash_config_size            0x00000010
    #define m_text_start                   0x00000410
    #define m_text_size                    0x0007FBF0
    #define m_interrupts_ram_start         0x1FFF0000
    #define m_interrupts_ram_size          __ram_vector_table_size__
    #define m_data_start                   (m_interrupts_ram_start + m_interrupts_ram_size)
    #define m_data_size                    (0x00010000 - m_interrupts_ram_size)
    #define m_data_2_start                 0x20000000
    #define m_data_2_size                  0x00010000
    /* Size */
    #if (defined(__stack_size__))
      #define Stack_Size                   __stack_size__
    #else
      #define Stack_Size                   0x0400
    #endif

    #if (defined(__heap_size__))
      #define Heap_Size                    __heap_size_
    #else
      #define Heap_Size                    0x0400
    #endif

    LR_m_text m_text_start m_text_size{
        ER_m_text m_text_start m_text_size{
         *(InRoot$$Sections)
      .ANY (+RO)
    }
    RW_m_data m_data_start m_data_size{
         .ANY (+RW+ZI)
    }
        RW_m_data_2 m_data_2_start m_data_2_size-Stack_Size-Heap_Size { ; RW data
        .ANY (+RW +ZI)
        }
       
    ARM_LIB_HEAP ((ImageLimit(RW_m_data_2) == m_data_2_start) ? ImageLimit(RW_m_data) : +0) EMPTY Heap_Size {
    }
    ARM_LIB_STACK m_data_2_start+m_data_2_size EMPTY -Stack_Size{
    }
    }
    我知道答案 目前已有2人回答

    评分

    参与人数 1NXP金币 +3 收起 理由
    小七 + 3

    查看全部评分

    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-8-31 11:04:10 | 显示全部楼层
    楼主你好!
    你所说的RAM中的位带指的是什么?
    另外栈的生成方向通常是向下,起始地址通常设置为RAM2的结束地址的前一个字节。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-30 16:02
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    1065

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1851
    最后登录
    2019-11-19
     楼主| 发表于 2015-9-1 23:16:00 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-8-31 11:04
    楼主你好!
    你所说的RAM中的位带指的是什么?
    另外栈的生成方向通常是向下,起始地址通常设置为RAM2的结束 ...

    捕获1.PNG
    如上图,应该就是操作某一位就可以操作某一个管脚的那种;不需要读取-擦除-写入的步骤。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-28 12:15 , Processed in 0.091037 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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