您尚未登录。

楼主 #1 2021-01-25 14:31:50

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

如题

离线

#2 2021-01-25 15:03:32

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 288
积分: 222

Re: 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

https://www.keil.com/support/man/docs/c51/c51_ap_at.htm

路过, 变量可以C51用 _at_ 关键字, 常量不知道怎么做

离线

#3 2021-01-25 15:21:53

Blueskull
会员
注册时间: 2020-02-20
已发帖子: 458
积分: 444.5

Re: 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

*(uint8_t*)(0x10000)=0xff;

或者

uint8_t *ptr=(uint8_t*)(0x10000);
*ptr=0xff;

离线

楼主 #4 2021-01-25 15:31:57

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

Re: 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

Blueskull 说:

*(uint8_t*)(0x10000)=0xff;

或者

uint8_t *ptr=(uint8_t*)(0x10000);
*ptr=0xff;

感谢,可是我要的是code, 就是说编译生成的bin文件0x10000 位置就是A,这个上面的代码好像不行吧?

离线

楼主 #5 2021-01-25 15:53:56

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

Re: 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

2021-01-25_155021.png

感谢楼上几位大侠, 终于搞定:

添加一个fixcode.asm到工程, 内容是:

CSEG AT 03780h

CFG_BYTE_0:  DB  'A'
CFG_BYTE_1:  DB  'B'

END

重新编译生成bin即可。


参考: https://www.keil.com/support/docs/1623.htm

离线

#6 2021-01-25 15:55:42

Blueskull
会员
注册时间: 2020-02-20
已发帖子: 458
积分: 444.5

Re: 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

smartcar 说:

感谢,可是我要的是code, 就是说编译生成的bin文件0x10000 位置就是A,这个上面的代码好像不行吧?

Keil我没用过,我用SDCC。SDCC里面可以用如下代码解决问题。

__code __at (0x10000) uint8_t var_name = 0xff;

离线

楼主 #7 2021-01-25 15:58:12

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

Re: 请问 Keil C51 在目标ROM的的指定地址(如 0x10000)写 字符A, 请问C语言代码应该如何表达?

Blueskull 说:
smartcar 说:

感谢,可是我要的是code, 就是说编译生成的bin文件0x10000 位置就是A,这个上面的代码好像不行吧?

Keil我没用过,我用SDCC。SDCC里面可以用如下代码解决问题。

__code __at (0x10000) uint8_t var_name = 0xff;

嗯,刚刚前面搜到很多代码确实大部分是SDCC的。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn