导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[原创]   C51 函数的绝对定位?[shangdawei]

 *第12284篇: [原创] C51 函数的绝对定位?

  
楼 主:shangdawei 2003年5月19日20:36
 [原创]   C51 函数的绝对定位?
我有一个项目,使用 SST89C58 单片机,有 32 KB Flash ROM, 我想用它来做一个 小小的操作系统, 提供 键盘扫描, LCD 显示, 串口通讯等等。这可能用不到 32 KB 内存。
我想用它来加载 存储在 24C512 的应用程序。我使用 64KB 的 XRAM. 我想把程序加载在64KB 中的 高 32 KB 空间。64KB 中的 低 32 KB 空间用作 XRAM. 64KB 中的 最高 4 KB 空间 用作 I/O . 我想在编制程序的时候,在一块连接。 生成代码之后, 分割存放。操作系统 在片内, 应用程序 在片外 IIC 接口的 EEPROM 当中(可能有多个)。
在系统复位之后,生成一个菜单,根据选择,从相应的IIC 接口的 EEPROM 中加载它到XRAM当中,然后运行它。
现在的问题是:如何让应用程序 代码定位在 08000H 开始呢 ?
              如何让操作系统 代码定位在 00000H 开始呢 ?

本系统采用 冯诺依曼体系 , 使用 /PSEN and /RD 信号读取 代码和数据。
使用 /WR 信号写入数据.

恳请各位朋友帮忙解决这个问题。 我打算使用 Keil C51 编制程序。

  
2楼:guest 2003年5月20日11:24
 我也有过这种想法,你怎么样执行xram中的程序呢?你是不是想做gameboy?
  
3楼:guest 2003年5月20日11:26
 有什么进展,请联系我:xmz26104@hotmail.com
  
4楼:shangdawei 2003年5月20日20:04
 [quote][b]以下是引用[i]sh
以下是引用shangdawei在2003-5-19 20:36:12的发言:
[原创]   C51 函数的绝对定位?我有一个项目,使用 SST89C58 单片机,有 32 KB Flash ROM, 我想用它来做一个 小小的操作系统, 提供 键盘扫描, LCD 显示, 串口通讯等等。这可能用不到 32 KB 内存。
 我想用它来加载 存储在 24C512 的应用程序。我使用 64KB 的 XRAM. 我想把程序加载在64KB 中的 高 32 KB 空间。64KB 中的 低 32 KB 空间用作 XRAM. 64KB 中的 最高 4 KB 空间 用作 I/O . 我想在编制程序的时候,在一块连接。 生成代码之后, 分割存放。操作系统 在片内, 应用程序 在片外 IIC 接口的 EEPROM 当中(可能有多个)。
 在系统复位之后,生成一个菜单,根据选择,从相应的IIC 接口的 EEPROM 中加载它到XRAM当中,然后运行它。
 现在的问题是:如何让应用程序 代码定位在 08000H 开始呢 ?
               如何让操作系统 代码定位在 00000H 开始呢 ?

 本系统采用 冯诺依曼体系 , 使用 /PSEN and /RD 信号读取 代码和数据。
 使用 /WR 信号写入数据.

 恳请各位朋友帮忙解决这个问题。 我打算使用 Keil C51 编制程序。

 



使用通配符解决这个问题 :
-------------------------------------------------------------------------------------

QUESTION

Is there a way to use wildcards in the CODE and XDATA directives in the BL51 linker? 

ANSWER

Yes. In C51 V6.01, wildcard support was added to BL51 for the segment location directives (CODE, XDATA, DATA, and so on). For example: 

BL51 myfile.obj CODE (?pr?*?myfile (0x100))


in uVision2: Under the options for target, select the BL51 Locate tab and in the code section put this: 
 ?pr?*?myfile (0x100)


locates all program segments (functions) found in the myfile.obj OMF file starting at address 0100h. 

-------------------------------------------------------------------------------------

  
5楼:shangdawei 2003年5月20日20:06
 [quote][b]以下是引用[i]sh
以下是引用shangdawei在2003-5-20 20:04:41的发言:
[quote]以下是引用shangdawei在2003-5-19 20:36:12的发言:
 [原创]   C51 函数的绝对定位?我有一个项目,使用 SST89C58 单片机,有 32 KB Flash ROM, 我想用它来做一个 小小的操作系统, 提供 键盘扫描, LCD 显示, 串口通讯等等。这可能用不到 32 KB 内存。
  我想用它来加载 存储在 24C512 的应用程序。我使用 64KB 的 XRAM. 我想把程序加载在64KB 中的 高 32 KB 空间。64KB 中的 低 32 KB 空间用作 XRAM. 64KB 中的 最高 4 KB 空间 用作 I/O . 我想在编制程序的时候,在一块连接。 生成代码之后, 分割存放。操作系统 在片内, 应用程序 在片外 IIC 接口的 EEPROM 当中(可能有多个)。
  在系统复位之后,生成一个菜单,根据选择,从相应的IIC 接口的 EEPROM 中加载它到XRAM当中,然后运行它。
  现在的问题是:如何让应用程序 代码定位在 08000H 开始呢 ?
                如何让操作系统 代码定位在 00000H 开始呢 ?

  本系统采用 冯诺依曼体系 , 使用 /PSEN and /RD 信号读取 代码和数据。
  使用 /WR 信号写入数据.

  恳请各位朋友帮忙解决这个问题。 我打算使用 Keil C51 编制程序。

  
 [/quote]

 
 使用通配符解决这个问题 :
 -------------------------------------------------------------------------------------

 QUESTION

 Is there a way to use wildcards in the CODE and XDATA directives in the BL51 linker? 

 ANSWER

 Yes. In C51 V6.01, wildcard support was added to BL51 for the segment location directives (CODE, XDATA, DATA, and so on). For example: 

 BL51 myfile.obj CODE (?pr?*?myfile (0x100))

 
 in uVision2: Under the options for target, select the BL51 Locate tab and in the code section put this: 
  ?pr?*?myfile (0x100)

 
 locates all program segments (functions) found in the myfile.obj OMF file starting at address 0100h. 

 -------------------------------------------------------------------------------------
 


参见 

 -------------------------------------------------------------------------------------
BL51: LOCATING FUNCTIONS AT ASCENDING ADDRESSES
QUESTION

When I link my C51 application I would like to locate the functions in a source module in ascending order starting at a specific address. I know I can use the linker CODE directive to do this for each individual function, but can I do it for all the functions in a module? 

ANSWER

No. This is not possible with C51 Version 5. It has been added in C51 V6.01. Refer to BL51: USING WILDCARDS IN SEGMENT NAMES for more information. 
 -------------------------------------------------------------------------------------


  
6楼:guest 2003年5月21日16:33
 简单~~~~~~
有答案了吗?如没有,可发mail到cwb2003mr@yahoo.com.cn我目前有空和你切磋
  
7楼:shangdawei 2003年5月22日18:59
 [讨论] 函数的定位问题 ?
操作系统的函数如何被应用程序调用 ?

是对每一个 APP 都与 OS 编译绑定, 还是在 OS 中设一个跳转表

在应用程序中 使用行数指针绝对调用 ?

还有其他方法么? 各种方法的利弊在那里 ?

望指教 !


>>>>>>对该主题发表你的看法

本主题贴数7,分页: [第1页]


[上一篇主题]:知道AD8302达人狂入!

[下一篇主题]:紧急寻求取3个2字节数的中间值的子程序