打印

如何给固定FLASH地址赋值

[复制链接]
4393|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyboy|  楼主 | 2013-1-9 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我看了资料,给固定RAM空间赋值,程序可以这样写
unsigned char data MyBuf _at_ 0x20;
MyBuf =5;

我想给FLASH地址假设0x1F00;
unsigned char code MyBuf _at_ 0x1F00;
MyBuf = 0x01;
这样就错误。

我后来想用指针,可由想到如果强行用指针指向这个地址,难保证代码本身(即编译器)不会占用这个地址,那就是会有问题。

有没有哪位知道如何实现?谢谢!

相关帖子

沙发
zyboy|  楼主 | 2013-1-9 16:37 | 只看该作者
const u8 bootsoftver __at (0x1F00) =0x01; //我试过这样也不行

使用特权

评论回复
板凳
ayb_ice| | 2013-1-9 16:45 | 只看该作者
KEIL C51如果通过_at_指定地址,不能初始化

可以通过汇编实现
// my.a51

public my_flash_var

cseg at 100H

my_flash_var:
    db 55h

end

然后C声明

// flash.c
extern unsigned char code my_flash_var;

就可以了

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
zyboy + 4 赞一个!谢谢ayb_ice,可行,不知道为什么直.
地板
ayb_ice| | 2013-1-9 16:46 | 只看该作者
还可以通过连接器来实现

首先不指定变量地址,通过连接器控制变量的地址,具体方法参见KEIL帮助文档

我一般通过汇编实现

使用特权

评论回复
5
zyboy|  楼主 | 2013-1-10 10:28 | 只看该作者
谢谢ayb_ice,可行,不知道为什么直接插入C语言不行。。。
#pragma ASM

public my_flash_var

cseg at 0FDFFH

my_flash_var:
    db 01h


#pragma ENDASM

使用特权

评论回复
6
ayb_ice| | 2013-1-10 11:19 | 只看该作者
zyboy 发表于 2013-1-10 10:28
谢谢ayb_ice,可行,不知道为什么直接插入C语言不行。。。
#pragma ASM

这个只能插入汇编指令

使用特权

评论回复
7
wode112233| | 2015-7-9 19:11 | 只看该作者
学习了

使用特权

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

本版积分规则

个人签名:学海无涯,回头是岸!

101

主题

356

帖子

0

粉丝