打印

C8051F120 到底如何 code banking?

[复制链接]
4364|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oh_no|  楼主 | 2007-10-16 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
又快下班了,C8051F120 的 code banking 还是没有弄对.已经是第二天了,真的有点闷...

开发环境:keil v2.31
开发语言:C

我的banking方法:
1:option for target->target code banking: 4,start:0x8000,end:0xffff
2:add L51_BANK.A51 and STARTUP.A51 to the project
3:取分区指令方法:
例如:我把配置程序放在bank3,访问方法如下:
BANK_SAVE = PSBANK;
PSBANK = 0x33;  
Config();                        
PSBANK = BANK_SAVE;

哪位朋友知道,指点下如何?


  

相关帖子

沙发
ayb_ice| | 2007-10-17 08:22 | 只看该作者

应该有例程吧。。。

使用特权

评论回复
板凳
oh_no|  楼主 | 2007-10-17 10:31 | 只看该作者

按照例程弄也不对...

熟悉的朋友指点下如何?
弄了几天了...

使用特权

评论回复
地板
ayb_ice| | 2007-10-17 11:02 | 只看该作者

这种芯片有硬件支持,不难吧。。。

使用特权

评论回复
5
oh_no|  楼主 | 2007-10-17 11:14 | 只看该作者

ayb_ice,你好

ayb_ice,你好,你好像清楚应该怎么BANKING,可不可以指点一下呢?

使用特权

评论回复
6
ayb_ice| | 2007-10-17 11:38 | 只看该作者

要有一部分公共代码。。。

切页时先转到公共区,再到目标区。。。

使用特权

评论回复
7
oh_no|  楼主 | 2007-10-17 11:45 | 只看该作者

OK

你的意思是:
void main()
{
PSBANK = 0x00; //转到公共区

BANK_SAVE = PSBANK;  //目标区
PSBANK = 0x33;  
Config();                        
PSBANK = BANK_SAVE;
}

对么?

我调了几天了,弄不出来,才上来问问大家的,你可不可以说得详细点?
谢谢你了.  

使用特权

评论回复
8
oh_no|  楼主 | 2007-10-17 11:47 | 只看该作者

其它的都调试好了,就差BANKING

不分区的话,系统正常运行,但很多功能加不进去,必须BANKING
但一BANKING 系统就死了...

一点表示也没有...

使用特权

评论回复
9
ayb_ice| | 2007-10-17 13:51 | 只看该作者

随便说说

一般中断函数,经常用的函数放在公共区。。。
假设有两个函数分别是A,B,而且放在两个不同的区,都是在地址0XFF00处(但不同的页),现在A调用B,肯定要借助一程序(位于公共区),这个程序先切换到B程序所在的页,然后调用B即可,换句话说,A调用B是通过一公共区的程序(假设BB)实现的。。。
其实我也没有真正用过(用不上),但仔细看过这方面的资料。。。
PIC的有些单片机是要分页的,操作其实很简单(也是硬件支持的),可以参考一下。。。

使用特权

评论回复
10
oh_no|  楼主 | 2007-10-17 15:47 | 只看该作者

ayb_ice,谢谢你的指点

访问不同的BANK的时候,就是通过设置PSBANK来取指令,就是ayb_ice你所说的"这个程序先切换到B程序所在的页,然后调用B即可"
但就是不行,单片机一点表示都没有了...

事太多了,心烦意乱...

大家如知道,指点一下,我静下心来再看看DATASHEET吧.

先谢谢了!

使用特权

评论回复
11
ayb_ice| | 2007-10-17 16:34 | 只看该作者

你忽略了一点,任何切页程序必须在公共区。。。

使用特权

评论回复
12
oh_no|  楼主 | 2007-10-17 17:08 | 只看该作者

其实,系统一起动,它就在common运行

系统一起动就在common区运行,如果要调用其它bank中的指令的话,可以改变psbank来实现

我理解就是这样的,但是一直不行...

void main()
{
PSBANK = 0x00; //转到公共区  这句应该去掉

BANK_SAVE = PSBANK;  //目标区
PSBANK = 0x33;  
Config();                        
PSBANK = BANK_SAVE;
}

使用特权

评论回复
13
oh_no|  楼主 | 2007-10-17 17:08 | 只看该作者

又快下班了...

使用特权

评论回复
14
haibin2011| | 2012-3-27 23:17 | 只看该作者
13# oh_no 我也遇到这样的问题,我代码是90多k,现在也经常遇到程序跑不动,跑飞!你解决了吗?

使用特权

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

本版积分规则

1

主题

8

帖子

1

粉丝