Error: Ram start overlaps rom binary

本文详细描述了解决在使用友善2440板子的WINCE6.0 BSP进行编译时遇到的RAM与ROM空间重叠错误的过程。通过调整config.bib文件中的ROMSIZE和RAM起始地址,成功解决了编译问题。此外,文章还提供了多种解决此类错误的方法,并附上了调整后的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久都没有动WINCE了,以前买了友善之臂的板子跑的是5.0,只是搞过一段时间。由于公司的原因,今天在网上下载了友善2440的板子WINCE6.0bsp。今次友善提供的是一个安装包,去安装bsp和6.0的工程(工程有两个)。我选了一个带QQ的工程就重新编译了一下。

10多分钟过去了(呵呵,新进的小黑速度性能还可以,曾经还是在香港排行性能第一的机子哦),编译好了但是出错。

出错内容如下:

 

 

仔细看了一下错误,找到了

Error: Ram start overlaps rom binary

Ram的空间与ROM的空间重叠了。

在5.0的时候Ram与ROM的大小设置在config.bib文件里面的。

但是,我在vs2005的工程里面却没找到,害到我直接去BSP目录底下找才找到。

(如果网友知道在vs2005中如何找到config.bib麻烦告知一下,PB5.0可以直接在项目里面找到的)

打开config.bib文件,发现内容如下

  

可以看到

 

     NK      80200000  01e00000  RAMIMAGE   ;01e00000  30M(注释是本人加上去的)
    RAM     82000000  01e00000  RAM   

  ROMSTART=80200000
  ROMWIDTH=32
  ROMSIZE=01e00000         ;01e00000  30M(注释是本人加上去的)

 

看一下出错信息,ROM总共是多大。

Total ROM size:          02156260 (  34955872)

这个大概是33M左右的大小,超过了设置的ROMSIZE规定的大小,

同时,82356260=80200000(ROMSTART)  +02156260 (ROMSIZE),82356260明显超过了RAM的起始地址82000000。

因此,现在问题来了,有两个步骤。

1、把ROMSIZE的大小放大。

2、根据ROMSIZE的大小重新调整RAM的起始地址

我的调整结果如下:

 我将ROMSIZE设置成35M的大小。

 

当然解决这个问题的方法还有其他方法

可以参考

http://blog.csdn.net/joyzml/archive/2010/01/18/5207176.aspx

这个网址。

 

设置完成后,将重新打包NK就行了。

### 解决 XlsxWriter 中合并单元格时出现的 `OverlappingRange` 错误 当使用 Python 的 `xlsxwriter` 库来处理 Excel 文件时,如果尝试在一个已经部分或完全被其他合并区域覆盖的位置再次创建新的合并单元格,则会触发 `OverlappingRange` 错误。为了避免这种情况发生,在编写程序逻辑之前应该先理解如何检测以及预防这种冲突。 为了防止此类错误的发生,可以采取以下策略: #### 方法一:手动追踪已使用的区域 通过维护一个列表或其他数据结构记录已经被占用过的坐标区间,每次准备执行新一次合并前检查目标位置是否与其他已有条目存在交集。具体实现方式如下所示: ```python from collections import namedtuple # 定义用于存储区间的命名元组 Interval = namedtuple('Interval', ['start_row', 'end_row', 'start_col', 'end_col']) def is_overlap(interval_a, interval_b): """判断两个矩形是否有重叠""" return not (interval_a.end_row < interval_b.start_row or \ interval_a.start_row > interval_b.end_row or \ interval_a.end_col < interval_b.start_col or \ interval_a.start_col > interval_b.end_col) used_intervals = [] def add_merge(worksheet, start_row, end_row, start_col, end_col, data=None): new_interval = Interval(start_row=start_row, end_row=end_row, start_col=start_col, end_col=end_col) # 检查是否存在任何重叠情况 for existing in used_intervals: if is_overlap(existing, new_interval): raise ValueError(f"Merging would cause overlap with previously merged cells {existing}.") worksheet.merge_range(new_interval.start_row, new_interval.start_col, new_interval.end_row, new_interval.end_col, data) # 将当前合并后的区间加入到跟踪列表中 used_intervals.append(new_interval) workbook = Workbook() worksheet = workbook.add_worksheet() try: add_merge(worksheet, 0, 1, 0, 0, "A2:A3") # 此处假设试图在此范围内进行合并操作 except Exception as e: print(e) workbook.close() ``` 这种方法虽然有效但是效率较低,并且随着文件规模增大可能会变得难以管理。因此更推荐采用第二种方法来自动生成唯一的非重复区间来进行合并。 #### 方法二:利用辅助函数自动分配不相交的空间 可以通过设计专门负责规划可用空间的功能模块来简化流程。这个功能可以根据现有的布局动态计算出下一个合适的空白区域供后续调用者安全地完成合并动作而不用担心越界问题。 以上两种方案都可以有效地帮助开发者避开因合并单元格而导致的 `OverlappingRange` 异常状况。选择哪种取决于实际应用场景和个人偏好[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值