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

[复制链接]
15771|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

查看全部评分

ejack 发表于 2012-2-10 08:16 | 显示全部楼层
说白了就是在链接阶段增加手工干预,人为指定将某个块放置到某个位置。
Ryanhsiung 发表于 2012-2-10 08:22 | 显示全部楼层
看 编译器手册
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

查看全部评分

 楼主| PaperKite 发表于 2012-2-10 10:33 | 显示全部楼层
谢谢 4楼,7楼,目前应该就是这两种方法好了:D
lyclycc520 发表于 2017-1-25 19:13 | 显示全部楼层
有人知道怎么做吗?我也在找方法,求高手分享一下,比如在flash 的0x4000这个起始地址放一个数组 0x05,0x06,0x07,这三个数,要怎么操作??
dugujian00 发表于 2017-11-25 08:25 | 显示全部楼层
lyclycc520 发表于 2017-1-25 19:13
有人知道怎么做吗?我也在找方法,求高手分享一下,比如在flash 的0x4000这个起始地址放一个数组 0x05,0x0 ...

你这种可以编译好文件后,直接修改hex文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

60

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部