查看: 2546|回复: 6

[已解决] 怎样将不同的变量放置到不同的RAM区?(已解决)

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

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2016-2-24 18:37:26 | 显示全部楼层 |阅读模式
    本帖最后由 中山无雪 于 2016-2-27 11:45 编辑

    现在使用MK02做一个系统,由于需要自己定义一个队列(全局变量),占用了大量的RAM空间,编译时出现Lp014错误,错误原因是m_data只有7168byte的空间,系统只使用了此空间,而软件分配的间超出了7168byte,而m_data_2空间(8192byte)除了CSTACK使用了一点外并没有被系统使用,由于系统使用了MQX lite,希望将系统栈占用空间、系统全局变量放置到m_data_2,请问应该怎么定义?

    不想使用将堆定义到m_data_2,然后在heap中分配全局变量的方式。
    我知道答案 目前已有6人回答
    回复

    使用道具 举报

    该用户从未签到

    10

    主题

    358

    帖子

    0

    高级会员

    Rank: 4

    积分
    924
    最后登录
    1970-1-1
    发表于 2016-2-25 09:06:48 | 显示全部楼层
    用#pragma
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2016-2-26 01:10:27 | 显示全部楼层
    谢谢!!!
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2016-2-26 18:40:10 | 显示全部楼层
    本帖最后由 中山无雪 于 2016-2-26 18:43 编辑

    使用#progma可以将变量定位到不同的区,我只知道绝对定位方式,是否可以有动态方式?例如我将 .bss段或者自己定义的一个段的数据全部分配到m_data_2,具体的分配由IAR自动完成,而不是采用绝对定位的方式?

    还有一点,我现在使用MQX,每个任务都要分配一定的栈,怎样才能将不同的任务所使用的栈分配到不同的RAM空间?不能指定的话当任务多了的时候很容易造成空间不足的。

    今天试了一天没试出来
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2016-2-27 11:45:38 | 显示全部楼层
    不劳大家费心了,问题已解决,谢谢!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    63

    帖子

    0

    注册会员

    Rank: 2

    积分
    175
    最后登录
    1970-1-1
    发表于 2016-3-14 10:28:21 | 显示全部楼层
    中山无雪 发表于 2016-2-27 11:45
    不劳大家费心了,问题已解决,谢谢!!!

    咋解决的哦,具体说一下?
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2016-3-14 15:10:08 | 显示全部楼层
    第一步,修改icf文件
    define region SKYONE_region = mem:[from m_data_2_start to m_data_2_end-__size_heap__-__size_cstack__];
    define block SKYONE    with alignment = 4                           { section .skyone };
    place in SKYONE_region                      { block SKYONE  };
    第一句中的开始、结束地址自己定

    第二步,在定义全局变量
    #pragma location = ".skyone"
    uint8_t my_param[100][20];

    可以如上定义多个变量,编译系统会从定义的开始地址自动分配,这样定义的好处(相比绝对地址定位)是多个变量空间的自动分配

    绝对地址定位是在定义变量前加
    #parama location = 0x20001000
    uint8_t my_param[100][10];

    uint8_t my_param[100][10] @0x20001000;
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 16:36 , Processed in 0.098107 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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