用KEILC 多年,遇到了这么一个问题。

[复制链接]
2898|7
 楼主| dudongdao 发表于 2009-7-29 22:23 | 显示全部楼层 |阅读模式
请教一个KEIL的问题.问了好多人,没有人给出解决办法,请各位隐士大侠们指点迷津~~~
     用STC12C5404~~  程序量有4K,EEP区域有2K~~  由于程序量不够,想把一些表格数据放到EEP中,本来想用_at_来指定绝对地址,但是指定了绝对地址就不能给绝对地址赋初始值,所以想C中嵌入汇编来解决,遇到下面问题:
   程序区地址:0-1024*4  4K
   EPP区地址:0X2E00--0X2F00  2K
   用嵌入汇编指令
   #pragma  asm
   org 0X2E00
   DB 00H,02H.........
   #pragma  endasm
   这样写后编译没问题,但看编译出来的HEX文件,程序都放到0X2E00之后了
   我想把程序放前4K,数据表格放0X2E00之后~~  有没有好办法,问了STC的
   老姚,他说这个芯片是我设计的,但我只会汇编~~  不会C~~ 
   请高手指点一下~~
    
jerkoh 发表于 2009-7-29 22:38 | 显示全部楼层

re

STC12C5404  的EEPROM 部分不这么用的吧

有10几条指令 配置檫 读 写 PDF上有代码的

像操作EEPROM一样

你要查这些表

得像操作EEPROM一样 读出来后再使用

偶且如果程序 不停的读写这所谓的EEPROM 估计寿命不长的



 楼主| dudongdao 发表于 2009-7-29 22:53 | 显示全部楼层

你没看明白啊

    我拿EEP当数据表格用~~  我想烧程序的时候直接烧进去~~~
    你说的对~~  得读出来才能用~~  但是前提是你先烧一个有效值进去~
    
   有些人和我说,你先写一个初始化EEP的程序,烧进去之后再烧一个FLASH程序。 还有人说,你用程序去初始化EEP区域。  这些办法是能达到目的~~ 但是第一种太麻烦~~  第二种我程序量本来就不够了~~~  还有人说直接改HEX文件,直接用键盘敲进去~~  也是太笨了啊~~~
    烧程序的时候直接烧进去是最普通最简洁的办法了~~~
    请高手指点一下~~~  我就是想直接烧进去~~~  STC烧写软件判断HEX文件的地址来区分程序和EEP数据。
cool_coder 发表于 2009-7-29 23:19 | 显示全部楼层

EEPROM和FLASH不在同一个地址空间,

KEIL多年没用了,不知道是否支持声明EEPROM变量。查查编译器手册吧。
jerkoh 发表于 2009-7-29 23:29 | 显示全部楼层

re



ROM 不够 ,想办法优化代码(这个当然 可行性差些) 
但改大型号的 兼容的

STC12C5406
STC12C5408
STC12C5410
STC12C5412
这才是正路啊

查ROM表     普遍用在循环里面 一直操作

10W次 够一直去读写擦吗?

 楼主| dudongdao 发表于 2009-7-30 00:07 | 显示全部楼层

不是解决问题的好办法啊

优化程序是不可能的了~~   
改大型号要花钱啊~~
读多少次都没事的~~ 写的话一般EEP都是10次,不知道宏晶如何,但是10W肯定是一般标准,你要求太高了。

谢谢你的建议~~  同时也谢谢我在3楼列举那些人给的建议。

我只想能用最简单的办法解决,并且是可行的,真是最一般的方法了。
ruiwei0201 发表于 2009-7-30 16:24 | 显示全部楼层

汇编里不用指定段的吗?

如: segment xdata之类的。
 楼主| dudongdao 发表于 2009-7-30 16:45 | 显示全部楼层

嗯~~ 能制定地址吗~~

可以制定地址并且不影响其他地址吗~~  你给个例子好吗~~  有明白我的问题吗?  有的话就给个例子,谢谢,看得出,你是高手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

413

帖子

1

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