查看: 4566|回复: 3

[CodeWarrior] CW10.3 #prgram #define等的用法(relocate code问题)(已解决)

[复制链接]

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
发表于 2013-5-27 22:15:10 | 显示全部楼层 |阅读模式
想要利用CW10.3自动生成的ld文件进行一段代码的重定位,即开始放在flash然后初始化时将代码copy到RAM:my_data2 ,ld文件主要代码附后。我目前要在自己的syisinit源文件进行相关配置如下:
 
#pragma define_section relocate_code ".data2"  far_abs RX
#define __relocate_code__   __declspec(relocate_code)
然后在要定位的函数set_sys_dividers()前加上__relocate_code__   (c文件和头文件都加),结果出现大量错误,连原本自带的kinetic_sysinit.h也纷纷报错,比如:declaration for parameter '__init_hardware' but no such parameter kinetis_sysinit.h
如果改成下面这样:#pragma define_section relocate_code ".data2"  far_abs RX
__declspec(section " relocate_code  ") void  set_sys_dividers (uint32 outdiv1, uint32 outdiv2, uint32 outdiv3, uint32 outdiv4); 
又报1个错:在上面第二句_desclspec前:expected ')' before string constant;
哦,另外好像还一直有警告:
ignoring #pragma define_section relocate_code [-Wunknown-pragmas]
 
 
都是按照应用手册上relocate code来的,实在不解,急求助!
 
附ld文件主要代码段:
 
 ___m_data2_ROMStart = ___ROM_AT + SIZEOF(.data);
  .user_data2 : AT(___m_data2_ROMStart)
  {
     . = ALIGN(4);
     ___m_data2_RAMStart = .;
     *(.data2) /* This is an User defined section */
     ___m_data2_RAMEnd = .;
     . = ALIGN(4);
  } > m_data2
  ___m_data2_ROMSize = ___m_data2_RAMEnd - ___m_data2_RAMStart;
 
_romp_at = ___ROM_AT + SIZEOF(.data) + SIZEOF(.user_data2);
  .romp : AT(_romp_at)
  {
__S_romp = _romp_at;
    LONG(___ROM_AT);
    LONG(_sdata);
    LONG(___data_size);
    LONG(___m_data2_ROMStart);
    LONG(___m_data2_RAMStart);
    LONG(___m_data2_ROMSize);
    LONG(0);
    LONG(0);
    LONG(0);
  } > m_data2
 


 
我知道答案 目前已有2人回答
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-5-28 09:16:58 | 显示全部楼层

    回复:CW10.3 #prgram #define等的用法(relocate code问题)

    给你一个例程参考一下。

    Ch09-PRG(Flash).rar

    186.26 KB, 下载次数: 12

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-5-28 09:44:28 | 显示全部楼层

    回复:CW10.3 #prgram #define等的用法(relocate code问题)

    你好,我就是参照了这个例程写的,不知道为什么出这个问题。
    继续求助
     
    回复第 2 楼 于2013-05-28 09:16:58发表:
    给你一个例程参考一下。
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-5-31 10:14:43 | 显示全部楼层

    回复:CW10.3 #prgram #define等的用法(relocate code问题)(正解)

    问题已解决:是由于CW版本不同使用编译器不同,CW10.3使用的是GCC compiler ,不通过以前的#pragma写法,正确写法应该如下:
    #define __relocate_code__ __attribute__((section(".data2"), long_call))
    void  set_sys_dividers(uint32 outdiv1, uint32 outdiv2, uint32 outdiv3, uint32 outdiv4)__relocate_code__ ;
    void __relocate_code__  set_sys_dividers(uint32 outdiv1, uint32 outdiv2, uint32 outdiv3, uint32 outdiv4)
    {
     ......
    }
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 20:27 , Processed in 0.089394 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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