打印

请教keil C如何往CODE区一个指定地址存入预置值?

[复制链接]
14722|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
PaperKite|  楼主 | 2012-2-9 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手册写keil c 一般有三种方法绝对地址访问:
    1 AT关键字不能初始化 (不成)
    2 ABSACC.H 中的宏,其实就是指针访问(也不能在Code区放入值)
    3 链接器段地址定位 project”->”option for target ... BL51 locate 这个行
     就用这个吧,可是默认生成的段名会包含几个同类型的变量,我只想把这一段中的XXX:标号变量定位到其一地址,而不影响其他的变量,怎么处理呀?
    或者重新指定一个段名,里边只放这一个变量,然后再对指定的段进行定位也行,那如何指定新段名呢?

相关帖子

沙发
PaperKite|  楼主 | 2012-2-9 20:13 | 只看该作者
HEW编译环境可用#pragma section abc指定段名,keilc 有没有类似的方式?
    能进行CODE区某一地址的数值设定就行呀.....

使用特权

评论回复
板凳
PaperKite|  楼主 | 2012-2-9 21:32 | 只看该作者
现在我暂时在startup.a51里填加了CSEG AT xxxxH  ;DB xxH;(汇编呀.....)

使用特权

评论回复
地板
ejack| | 2012-2-10 08:15 | 只看该作者
大部分都是采用你所说的第3种思路,不过实现方法却跟你所说的不一样呢。
在项目中添加一个源文件,其中包含你需要绝对定位的内容,而后在BL51的指令行添加绝对定位参数,例如:
test.obj CODE(?CO?TEST(2000h))
这是以你嵌入的是常量数组为例。

具体可参考Cx51编译器用户手册中的《Linker Location Controls》一节。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
PaperKite + 1
5
ejack| | 2012-2-10 08:16 | 只看该作者
说白了就是在链接阶段增加手工干预,人为指定将某个块放置到某个位置。

使用特权

评论回复
6
Ryanhsiung| | 2012-2-10 08:22 | 只看该作者
看 编译器手册

使用特权

评论回复
7
ayb_ice| | 2012-2-10 08:31 | 只看该作者
用汇编最方便
比如:
// abs.a51

cseg at 0x100

abs1:
    db  0x55

abs2:
    db  0xaa
    db  0x55
    db  ...
end

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
PaperKite + 1
8
PaperKite|  楼主 | 2012-2-10 10:33 | 只看该作者
谢谢 4楼,7楼,目前应该就是这两种方法好了:D

使用特权

评论回复
9
lyclycc520| | 2017-1-25 19:13 | 只看该作者
有人知道怎么做吗?我也在找方法,求高手分享一下,比如在flash 的0x4000这个起始地址放一个数组 0x05,0x06,0x07,这三个数,要怎么操作??

使用特权

评论回复
10
dugujian00| | 2017-11-25 08:25 | 只看该作者
lyclycc520 发表于 2017-1-25 19:13
有人知道怎么做吗?我也在找方法,求高手分享一下,比如在flash 的0x4000这个起始地址放一个数组 0x05,0x0 ...

你这种可以编译好文件后,直接修改hex文件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

60

帖子

1

粉丝