硬盘坏道 file record segment *** is unreadable 问题

本文提供了解决笔记本磁盘分区常见问题的方法,包括使用PE工具格式化D盘,遇到系统错误时的修复策略,以及使用DOS工具箱修复坏道的技术。虽然方法导致D盘数据丢失,但适用于D盘原本没有重要数据的情况。

开机时,显示 'one of your disk may need to checked for conistency'
CHKDSK 后显示
file record segment *** is unreadable
......
file record segment *** is unreadable
file record segment***is unreadable
file record segment *** is unreadable
重启后 跳过硬盘自检进入系统,出现系统卡机现象.无法正常操作.D盘打不开.
解决办法如下:
进入PE ,格式化D盘,发现系统错误.提示无法顺利进行格式化.删除逻辑分区,再重新格式化仍然
无效.后用winPM 硬盘分区管理工具PPM 将其删除后,重新格式化.重启.问题解决.
另DOS工具箱有许多修复坏道的工具.都可以适用. 以上方法,的直接结果是D盘数据全部丢失.不过
D盘原现就没什么数据,所以我采用第一种方法. 
问题解决..
本本磁盘分区常会遇见这种问题.. 

<think> 嗯,用户这次遇到了Keil编译器的L110错误,具体是"CANNOT FIND SEGMENT: REMOVEUNUSED"。从用户提供的引用材料来看,之前讨论过107和104错误,说明用户正在嵌入式开发中调试程序。 用户可能正在使用8051架构开发,因为引用中提到了data存储空间限制这个典型8051特性。L110错误比较特殊,它不是内存溢出或重复定义,而是链接器找不到特定段。用户应该已经检查过基础配置,但问题仍未解决,所以需要更深入的解决方案。 让我拆解这个错误的核心:链接器在"REMOVEUNUSED"环节找不到某个段。这种情况常见于:自定义段名拼写错误、启动文件配置冲突、分散加载文件(scatter file)错误、或者优化选项冲突。考虑到用户之前遇到过存储模式问题,还需要确认是否因内存不足导致段被异常移除。 准备给用户五个层次的解决方案: 第一层先检查最基础的段名拼写和启动文件包含情况,这是新手容易出错的地方; 第二层涉及编译器优化设置,因为REMOVEUNUSED本身就是优化环节; 第三层要检查分散加载文件,这是高级用户常配置的; 第四层针对特殊编译器版本bug,用户可能不知道需要升级; 最后建议用map文件分析具体缺失段,这是终极调试手段。 用户看起来有一定开发经验(能提供具体错误号),但可能不熟悉链接器工作原理。回复时要避免过多术语,比如解释"REMOVEUNUSED"其实是链接阶段移除未引用代码的步骤。在注意事项里要强调备份配置,因为修改scatter文件有风险。 突然想到还有种可能:用户是否混用了不同厂商的库文件?比如NXP和ST的启动文件混用会导致段名不一致。这个放在第三步检查比较合适。另外要提醒.map文件查看方法,毕竟这是最直接的线索。 </think> Keil编译器的`ERROR L110: CANNOT FIND SEGMENT: REMOVEUNUSED`错误通常由链接器配置问题或内存优化冲突引起。以下是系统化的解决方案: --- ### **错误原因分析** 该错误表明链接器在`REMOVEUNUSED`阶段无法定位某个程序段(SEGMENT),常见原因包括: 1. **分散加载文件(Scatter File)错误**:未正确定义或引用了不存在的内存段 2. **优化选项冲突**:启用了`--remove_unused`但目标段被错误排除 3. **启动文件缺失**:未包含芯片对应的启动文件(如`startup_xxx.s`) 4. **库文件路径错误**:第三方库或自定义段未正确链接 --- ### **解决方案步骤** #### 1. **检查分散加载文件(Scatter File)** ```scatter ; 示例片段:确认所有段名定义正确 LR_IROM1 0x08000000 0x00080000 { ; 加载区域 ER_IROM1 0x08000000 0x00080000 { ; 执行区域 *.o (RESET, +First) ; 必须包含RESET段 * (InRoot$$Sections) ; 关键系统段 .ANY (+RO) ; 只读数据 } RW_IRAM1 0x20000000 0x00010000 { ; 需与实际RAM地址匹配 .ANY (+RW +ZI) } } ``` - 核对`REMOVEUNUSED`涉及的段名是否在文件中正确定义 - 确保芯片型号与地址范围匹配(参考芯片手册) #### 2. **关闭冲突的优化选项** - 在`Options for Target > Linker`中: - 取消勾选`Use Memory Layout from Target Dialog` - 手动指定正确的分散加载文件(`.sct`) - 在`Options for Target > C/C++`中: - 临时禁用`--remove_unused`优化: ```plaintext ; 在Misc Controls中添加: --no_remove ``` #### 3. **验证启动文件** - 在工程中检查是否包含芯片对应的启动文件(如`startup_stm32f4xx.s`) - 右键点击启动文件 → `Options for File` → 确认`Include in Target Build`已勾选 #### 4. **检查库文件链接** - 在`Options for Target > Linker`的`Misc Controls`添加: ```plaintext --keep=section_name ; 强制保留特定段 ``` - 若使用第三方库,检查库路径: `Project > Manage > Project Items` → 确认库文件路径有效 #### 5. **重建工程索引** - 执行`Project > Clean`清除临时文件 - 使用`Project > Rebuild all target files`重新编译 #### 6. **更新工具链** - 检查Keil µVision版本更新(Help → Check for Updates) - 更新设备支持包:`Pack Installer` → 更新对应芯片系列 --- ### **注意事项** 1. **内存布局一致性**:分散加载文件中的地址范围需与`Options for Target > Target`选项卡的设置匹配 2. **自定义段声明**:若使用`__attribute__((section("name")))`自定义段,需在`.sct`文件中明确定义 3. **链接顺序问题**:调整文件链接顺序(右键文件 → `Options for File` → 修改Link Order) > **调试技巧**:生成`map`文件(`Options for Target > Linker` → 勾选`Generate Map File`),检查`REMOVEUNUSED`报错段是否被误删除[^1]。 --- ### **相关问题** 1. Keil中分散加载文件(scatter file)的编写规范有哪些? 2. 如何解决Keil链接阶段的`ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT`错误? 3. Keil优化选项`--optmize`与`--remove_unused`的区别是什么? 4. 嵌入式开发中如何合理规划内存段以规避链接错误? [^1]: 参考Keil官方文档《ARM Compiler v6 User Guide》及《Scatter File Loading》相关章节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值