查看: 2615|回复: 8

[求助] KDS如何实现多个函数统一重定位在ROM的一个固定地址段

[复制链接]

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
43
最后登录
2016-4-4
发表于 2015-9-6 11:15:06 | 显示全部楼层 |阅读模式
请问,我想把某个.c原文件中的若干个函数统一重定位到ROM中的一个section中(不是一个函数一个section),请问如何实现。我看过 FSL_TIC_Alice的    “代码重定位-CodeWarrior/KDS-kineits L 系列”的帖子,里面只说了把单个函数重定位的方法,使用__attribute__ section,我想把几个函数定位到一个section中。另,KDS是不是不支持#pragma,请各位热心朋友提供支持,谢谢!!!
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

1

主题

26

帖子

0

注册会员

Rank: 2

积分
197
最后登录
2020-9-24
发表于 2015-9-6 17:52:19 | 显示全部楼层
Hi,
您可以直接都指定到同一个section , 例如:

__attribute__((section(".myROM"))) void function1();
__attribute__((section(".myROM"))) void function2();

如果有问题,欢迎来交流。

KDS 支持 #pragma,  请问您在使用时遇到什么问题了吗?如果是,请告诉我们您是如何使用的。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
43
最后登录
2016-4-4
 楼主| 发表于 2015-9-7 09:18:31 | 显示全部楼层
FSL_TIC_Alice 发表于 2015-9-6 17:52
Hi,
您可以直接都指定到同一个section , 例如:

首先感谢Alice的回复。
是这样的,我以前在CW10.0中使用了如下宏:
#pragma define_section bootUpdateSection ".update_se" far_abs RX
#pragma section bootUpdateSection begin
fun1()
{
};

fun2()
{
};

... ...

#pragma section bootUpdateSection end

之后在链接文件,lcf文件中固定update_se 在一个固定地址段内,我想在KDS中也使用这中方法,但是使用时提示 “warning: ignoring #pragma section bootUpdateSection [-Wunknown-pragmas] ”

请Alice再帮忙分析下,谢谢,盼复!!!
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
43
最后登录
2016-4-4
 楼主| 发表于 2015-9-7 16:22:20 | 显示全部楼层
自己在顶一下,希望大家帮忙提供解决方法,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
43
最后登录
2016-4-4
 楼主| 发表于 2015-9-8 09:24:27 | 显示全部楼层
大家又有没有遇到同样的问题,能否给个意见呢。谢谢!!
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

26

帖子

0

注册会员

Rank: 2

积分
197
最后登录
2020-9-24
发表于 2015-9-9 15:53:25 | 显示全部楼层
lizhen330225 发表于 2015-9-7 09:18
首先感谢Alice的回复。
是这样的,我以前在CW10.0中使用了如下宏:
#pragma define_section bootUpdateSe ...

请问你使用的哪个芯片, KDS的的版本?
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

26

帖子

0

注册会员

Rank: 2

积分
197
最后登录
2020-9-24
发表于 2015-9-9 16:53:34 | 显示全部楼层
lizhen330225 发表于 2015-9-8 09:24
大家又有没有遇到同样的问题,能否给个意见呢。谢谢!!

hello,

我在KL26芯片上测试了,只需要按照我上次说的那样就可以:
__attribute__((section(".myROM"))) void RedLed();
void RedLed()
{
Bit1_ClrVal();
}
__attribute__((section(".myROM")))
void GreenLed()
{
        Bit2_ClrVal();
}

其它的关于Linker file的配置,请参考我发的那篇文档说明。

编译后,结果可以看到:

  0x0001f410                . = ALIGN (0x4)
*(.myROM)
.myROM         0x0001f410       0x30 ./Sources/main.o
                0x0001f410                RedLed
                0x0001f428                GreenLed
                0x0001f440                . = ALIGN (0x4)

两个函数都放到了 我定义的 my_room这个SECTION
my_rom      (RX) : ORIGIN = 0x0001F410, LENGTH = 0x00000BF0 .

如果按照这种方法 你在修改你的工程时,函数没有放到一个SECTION,你可以贴出你是如何配置的。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
43
最后登录
2016-4-4
 楼主| 发表于 2015-9-15 00:32:35 | 显示全部楼层
to alice:
非常感谢alice的回复,__attribute__确实可以将代码重定位,这个我在目前的代码试了可行。
但是我还想求助几个问题,ld文件是不是不支持WRITEW、ADDR(在cw工具的lcf文件中可用),如果不支持,请问我可使用什么替换来实现这部分功能,因为我是把原来cw下的工程迁移到KDS2.0中的,详细描述可见我的附件。
谢谢!!

2015-09-11-ld链接文件出错问题反馈.zip

283.1 KB, 下载次数: 4, 下载积分: 威望 1

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

26

帖子

0

注册会员

Rank: 2

积分
197
最后登录
2020-9-24
发表于 2015-9-16 18:45:13 | 显示全部楼层
lizhen330225 发表于 2015-9-15 00:32
to alice:
非常感谢alice的回复,__attribute__确实可以将代码重定位,这个我在目前的代码试了可行。
但是 ...

(1)你好, 我建议你在KDS生成的linker file(*.ld) 中重新配置,因为CW10.0和KDS的编译器不一样,所以.ld也不一样,语法不一样。我没有研究过CW10.0, 不知道WRITEW、ADDR 的功能。你可以告诉我你有什么功能需要在 .ld中实现 。

(2)你确定你用的CW10.0 ? 据我所知CW10.0不支持K22 。

(3)建议使用最新版本的KDS3.0 。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-28 17:39 , Processed in 0.103377 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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