如何给固定FLASH地址赋值

[复制链接]
4836|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帮助文档

我一般通过汇编实现
 楼主| 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
ayb_ice 发表于 2013-1-10 11:19 | 显示全部楼层
zyboy 发表于 2013-1-10 10:28
谢谢ayb_ice,可行,不知道为什么直接插入C语言不行。。。
#pragma ASM

这个只能插入汇编指令
wode112233 发表于 2015-7-9 19:11 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

101

主题

356

帖子

0

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