查看: 2342|回复: 9

[已解决] 如何把一个区间的变量定义到外部RAM?(已解决)

[复制链接]

该用户从未签到

48

主题

141

帖子

1

中级会员

Rank: 3Rank: 3

积分
385
最后登录
2020-8-7
发表于 2014-10-9 20:11:55 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZP 于 2014-11-27 10:13 编辑

我用的CW10.4+MQX4.1,如何把一个区间的变量定义到外部RAM?以前CW7.1我是用
#pragma define_section ExternRam ".vectors_exram" RW
然后在变量前加__declspec(ExternRam)
但这个在CW10.4行不通。
我知道答案 目前已有9人回答
回复

使用道具 举报

该用户从未签到

2

主题

113

帖子

0

中级会员

Rank: 3Rank: 3

积分
326
最后登录
1970-1-1
发表于 2014-10-10 11:27:39 | 显示全部楼层
楼主之前用到的应该是ColdFire 的芯片。
我在CW v10.6里边做了一个mcf52259的mqx的例子供参考。

如果楼主现在用kinetis的芯片并且用GCC的编译器的话,那语法要做相应的改变。
具体参考文档mcu_kinetis_GCC.pdf 第5.7节 coding notes
这个文档所在目录C:\Freescale\CW MCU v10.6\MCU\Help\PDF

cfv2_mqx.zip

298.45 KB, 下载次数: 3, 下载积分: 威望 1

回复 支持 反对

使用道具 举报

该用户从未签到

48

主题

141

帖子

1

中级会员

Rank: 3Rank: 3

积分
385
最后登录
2020-8-7
 楼主| 发表于 2014-10-10 23:02:26 | 显示全部楼层
本帖最后由 njhuangyuan 于 2014-10-10 23:08 编辑

我用的是K60和GCC的编译器,cw10.4,没有你说的这个文件,但是在Porting_ARM_GCC.pdf里面有coding notes,不过这里一点都没讲清楚如何定义。我自己整了半天,在intflash.ld里面添加了一个
exram       (RW): ORIGIN = 0xA0000000, LENGTH = 0x00040000

.main_appext :
    {
        *(.vectors_exram)
    } > exram

然后再在程序里定义
__attribute__((section(".vectors_exram"))) int i;
这样就定义到外部RAM了。
这个是我自己参照以前的52259方法做的,结果也对,我这样做对不?MQX4.0和CW10.4里面没有任何例子可借鉴
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-10-11 08:56:26 | 显示全部楼层
    也可以用#program代码实现。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    48

    主题

    141

    帖子

    1

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2020-8-7
     楼主| 发表于 2014-10-11 10:43:09 | 显示全部楼层
    用#program代码怎么实现的?能举个例子吗?是K60+CW10.4+MQX4.0,GCC的编译器
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    113

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    326
    最后登录
    1970-1-1
    发表于 2014-10-15 10:44:03 | 显示全部楼层
    njhuangyuan 发表于 2014-10-10 23:02
    我用的是K60和GCC的编译器,cw10.4,没有你说的这个文件,但是在Porting_ARM_GCC.pdf里面有coding notes,不 ...

    看到楼主说以前用CW V7.1,以为楼主用的事coldfire的片子,才专门做了一个CF V2的例子给你。
    这个附件是一个KL25的例子,是把部分代码放在一个指定的区域。
    对于变量,语法是一样的。
    放的位置你自己在.ld文件里边最一下修改

    mkl25_code_relocate.zip

    64.75 KB, 下载次数: 8, 下载积分: 威望 1

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    113

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    326
    最后登录
    1970-1-1
    发表于 2014-10-15 11:11:55 | 显示全部楼层
    K60_MRAM_Target.zip (157.88 KB, 下载次数: 7)

    K60_MRAM_Target_readme.zip

    1.2 KB, 下载次数: 7, 下载积分: 威望 1

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    113

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    326
    最后登录
    1970-1-1
    发表于 2014-10-15 11:13:15 | 显示全部楼层
    少写一句话,下载时需要配置.tcl脚本文件
    readme里边有相对详细的解释
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    48

    主题

    141

    帖子

    1

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2020-8-7
     楼主| 发表于 2014-10-16 23:28:21 | 显示全部楼层
    看了半天,还是没理解怎么把变量定义到外部RAM空间。在C:\Freescale\Freescale_MQX_4_1\mqx\source\bsp\twrk60f120m\gcc_cw有个intflash.ld文件,我自己添加了一个   
    exram       (RW): ORIGIN = 0xA0000000, LENGTH = 0x00040000

    .main_appext :
        {
            *(.vectors_exram)
        } > exram
    上面的语法有没有错误?
    然后定义变量:
    __attribute__((section(".vectors_exram"))) uint8 test[100];
    这样是有错误的,比如赋值 test[0]=0x55;这样CW认为是FLASH空间而不是RAM空间,下载程序时CW搽不掉它认为的FLASH空间就报错。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    87

    主题

    7322

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    4632
    最后登录
    2021-1-25
    发表于 2014-10-28 00:24:57 | 显示全部楼层
    你参数的指向有没有做对啊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-8 03:27 , Processed in 0.100681 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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