查看: 6208|回复: 28

[求助] 【求助】使用SDK如何在MDK中将函数指定到flash地址?

[复制链接]

该用户从未签到

11

主题

91

帖子

0

高级会员

Rank: 4

积分
660
最后登录
2020-3-4
发表于 2015-3-27 14:55:41 | 显示全部楼层 |阅读模式
本帖最后由 LFang 于 2015-3-27 14:58 编辑

我在 https://www.nxpic.org.cn/modul ... 256&fromuid=3018703 【经验分享】KL25在MDK中将函数指定到flash地址,这个帖子上看到如何将函数指定到flash地址,在KL25上是可以实现的,但是我使用SDK按照帖子上的操作,在K22FN512xxx12_flash.scf中定义了一个段,在main里面定义了一个函数,要把这个函数放到自己定义的段里面去,发现程序无法下载,请教一下,这是什么原因?
我知道答案 目前已有28人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-27 15:17:30 | 显示全部楼层
楼主,你是怎么定义的?
截几张图给我看看。
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

91

帖子

0

高级会员

Rank: 4

积分
660
最后登录
2020-3-4
 楼主| 发表于 2015-3-27 16:22:51 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-3-27 15:17
楼主,你是怎么定义的?
截几张图给我看看。

您好!我是按照帖子上的方法添加的,芯片是MK22FN512VLH12,是在FRDM-K22F板子上测试的,现在代码都下不进去,麻烦帮我看看什么问题!
MAP文件.png
scf文件.png
函数定义.png
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

147

帖子

0

中级会员

Rank: 3Rank: 3

积分
386
最后登录
2019-7-30
发表于 2015-3-28 07:13:34 | 显示全部楼层
LFang 发表于 2015-3-27 16:22
您好!我是按照帖子上的方法添加的,芯片是MK22FN512VLH12,是在FRDM-K22F板子上测试的,现在代码都下不 ...

学习一下。,,,谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

91

帖子

0

高级会员

Rank: 4

积分
660
最后登录
2020-3-4
 楼主| 发表于 2015-3-30 10:29:55 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-3-27 15:17
楼主,你是怎么定义的?
截几张图给我看看。

您好!请问下这个问题有答案了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-30 10:37:11 | 显示全部楼层
LFang 发表于 2015-3-30 10:29
您好!请问下这个问题有答案了吗?

我待会在K22的代码中试下,然后告诉你,还请耐心等待下。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-30 11:23:09 | 显示全部楼层
我试了之后,是可以的。
你把指定的地址放到后面flash去试试。
我是这样的:
  ER_m_text1 0x0007e000 FIXED { ; load address = execution address
     *.o (funflash)
  }
和你同样的位置,放到了0x0007e000
然后生成的hex中,可以看到在最后,有这样的代码:
:10E000000146002901DD012070470020FCE70000E7
就是对应的funcInROM代码。


回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

91

帖子

0

高级会员

Rank: 4

积分
660
最后登录
2020-3-4
 楼主| 发表于 2015-3-30 12:04:24 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-3-30 11:23
我试了之后,是可以的。
你把指定的地址放到后面flash去试试。
我是这样的:

不太明白你的意思,我直接把我的地址改成0x0007e000,代码还是下不进去,你是怎么设置的,能详细点吗?截几张图我看看?你把代码代码下进去了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

91

帖子

0

高级会员

Rank: 4

积分
660
最后登录
2020-3-4
 楼主| 发表于 2015-3-30 12:50:13 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-3-30 11:23
我试了之后,是可以的。
你把指定的地址放到后面flash去试试。
我是这样的:

我看了下hex文件,确实有你说的这段代码,但是代码没法下进去呀?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-30 12:50:52 | 显示全部楼层
LFang 发表于 2015-3-30 12:04
不太明白你的意思,我直接把我的地址改成0x0007e000,代码还是下不进去,你是怎么设置的,能详细点吗?截 ...

你是只有修改后的代码不能烧写,还是所有的代码现在都下载不进去了?
我是能下载,而且代码也能分配到指定的flash地址:
31.jpg

在SDK中添加的步骤:
1. 修改MK22FN512xxx12_flash.scf,添加代码

LR_m_text m_text_start m_text_size {   ; load region size_region
  ER_m_text m_text_start m_text_size { ; load address = execution address
    * (InRoot$$Sections)
    .ANY (+RO)
  }

  ER_m_text1 0x0007e000 FIXED { ; load address = execution address
     *.o (funflash)
  }


  RW_m_data m_data_start m_data_size { ; RW data
    .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 { ; Heap region growing up
  }
  ARM_LIB_STACK m_data_2_start+m_data_2_size EMPTY -Stack_Size { ; Stack region growing down
  }
}

2: 主程序中添加代码

char funcInROM(int flag)__attribute__((section("funflash")));
char funcInROM(int flag)
{
                if (flag > 0)
                {
                    return 1;
                }
                return 0;
}


3: 调用下(防止不调用,编译器优化)
funcInROM(1);

然后编译,下载,当然下载要设置好。
你先看看,你是所有代码不能下载了,还是修改后的不能下载。
如果所有代码都不能下载,那么可能你芯片被搞锁了,需要解锁。

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-24 00:19 , Processed in 0.106807 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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