免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2249 | 回复: 4
打印 上一主题 下一主题

[其它] 关于GCC string literal [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-15 10:26 |只看该作者 |倒序浏览
想把一段代码放到特定的内存区,不想遇到 “字面常量”无法指定位置的问题。先看段代码吧:

__attribute__ ((section (".tcm.text")))
void My_printf(int id, const char* fmt, ...)
{
    ...
}

__attribute__ ((section (".tcm.text")))
void My_test(void)
{
    My_printf("%s\n", "Hello");
}

ffff0040 <My_printf>:
ffff0040:        e92d000e         push        {r1, r2, r3}
ffff0044:        e92d4003         push        {r0, r1, lr}
ffff0048:        e59d000c         ldr        r0, [sp, #12]
ffff004c:        e28d1010         add        r1, sp, #16
ffff0050:        e58d1004         str        r1, [sp, #4]
ffff0054:        eb000009         bl        ffff0080 <__vprintf_veneer>
ffff0058:        e8bd400c         pop        {r2, r3, lr}
ffff005c:        e28dd00c         add        sp, sp, #12
ffff0060:        e12fff1e         bx        lr

ffff0064 <My_test>:
ffff0064:        e59f1008         ldr        r1, [pc, #8]        ; ffff0074 <My_test+0x10>
ffff0068:        e59f2008         ldr        r2, [pc, #8]        ; ffff0078 <My_test+0x14>
ffff006c:        e3a00c01         mov        r0, #256        ; 0x100
ffff0070:        eafffff2         b        ffff0040 <My_printf>
ffff0074:        0404e886         .word        0x0404e886
ffff0078:        0404ec78         .word        0x0404ec78
ffff007c:        00000000         .word        0x00000000

My_printf()和My_test()这两个函数通过attribute section机制,代码被放到TCM区。
我的期望是,执行这两函数期间,取指、取数据都发生在TCM区。但是上面代码中的“字面常量”("%s\n", 和"Hello")却被放在了普通内存区,这就导致代码执行时取数据会去访问普通内存,与我的期望不符。




查了许多资料,没找到有没什么办法,能将字面常量指定位置,所以来这里求助大家了,望不吝赐教!

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
2 [报告]
发表于 2016-03-15 15:12 |只看该作者
"Hello" 属于  **.o的 .rodata
可以在链接文件中指定位置,另外小声问下楼主这是什么芯片?

论坛徽章:
0
3 [报告]
发表于 2016-03-16 09:14 |只看该作者
这种方式是可行,但是不太方便,这也会让***.o中的其它不需要放到TCM区的.rodata也被塞到TCM区。
有没什么手段,让这些“字面常量” 产生的编译结果就跟在代码段后面?

ps. 我这是ARM9 处理器
回复 2# 残剑饮血


   

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
4 [报告]
发表于 2016-03-17 10:55 |只看该作者
把要放的代码部分,单独放到一个文件。
然后在链接脚本中接**.o来匹配。

论坛徽章:
0
5 [报告]
发表于 2016-03-17 14:17 |只看该作者
这还不是我理想中的解决方案
回复 4# 残剑饮血


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP