你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

TrueStudio中常量如何定义到flash固定位置?

[复制链接]
zjczm 提问时间:2018-9-20 14:23 /
本帖最后由 zjczm 于 2018-9-21 16:37 编辑

我需要把某些常量放到固定的flash空间(目的是以后想更新,就在该固定位置更新)。

参考keil做法: const uint16_t test[] __attribute__((at(0x08010000))的模式,结果是直接被忽略了。
尝试了:const uint16_t test[] __attribute__((section(".ARM.__at_0x08010000"))) 还是不行。
这个__attribute__如何用,一下子也没有搞懂。
网上搜索了很久,也没找到好的方法。

请问各位大侠,该怎么实现?
谢谢!

已解决。感谢andeyqi.

TrueStudio常量定位到flash的方法.pdf

下载

295.15 KB, 下载次数: 254, 下载积分: ST金币 -1

常量定位到stm32Flash固定地址

收藏 2 评论9 发布时间:2018-9-20 14:23

举报

9个回答
andey 回答时间:2018-9-20 17:01:57
提示: 作者被禁止或删除 内容自动屏蔽
qwert00000 回答时间:2018-9-20 19:11:12
没看明白
Dandjinh 回答时间:2018-9-20 20:29:00
gcc不允许直接写地址,要先在.ld文件定义个section,然后用__attribute__(section())

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zjczm 回答时间:2018-9-21 10:36:14
根据andeyqi提供的方法,测试编译通过。但常量定位还是没有成功。
继续再研究一下,看看哪里不对。
zjczm 回答时间:2018-9-21 13:04:56
终于搞定了。按andeyqi的 3步方法即可。非常感谢andeyqi的帮助。
调试期间犯了点小错误:  
1. 修改 STM32F103CB_FLASH.ld文件时,
.mydata :
  {
    . = ALIGN(4);  //--> 这里的点后面有个空格,不能省略,否则编译失败。格式很重要!!!
    *(.mydata)
  } >FLASH1

2. 测试时testdata在程序没有被调用,导致直接被编译器优化没了。我在flash中找数据找了好多边没找到,后来才醒悟。浪费了点时间。非常低级的错误。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励

查看全部评分

jihesong-101921 回答时间:2019-4-21 23:04:37
超级感谢,可是,另一个,定义到RAM固定地址似乎不行,keil行。
jihesong-101921 回答时间:2019-4-22 19:52:15
本帖最后由 jihesong-1019213 于 2019-4-22 20:11 编辑

,用户手册里面有这个描述,在133页,手册就是打开tureSTUDIO帮助菜单第一行,有手册链接,几百页,超详细:

原来如果这样:
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 16K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}

修改成这样:
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
IP_CODE (x) : ORIGIN = 0x08010000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}

.ip_code :
{
*(.IP_Code*);
} > IP_CODE

用法(放前面),原话这么说的:
attribute__((section(".IP_Code"))) before the function declaration.

手册举例:
attribute ((section(".IP_Code"))) int placed_logic()
{
/* TODO - Add your application code here */
return 1;
}

总结:
和楼主基本一致,重点是:声明时候“放前面”,然后,链接器就把东西就放在那个ROM地址上了。
第134 页: 要将代码放在外部ram中,需要对链接描述文件进行一些修改;
真是‘抛砖引玉’了,其实我在找扩展外部RAM后,怎么定位的事,相当good,继续找,手册上应该有的。

是什么啊?奇怪了,不是我敲的



zxcv1ddd 回答时间:2019-4-22 21:47:56
多谢分享
bigpigbug 回答时间:2019-11-26 09:24:10
学习了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版