MDK错误More than one section matches selector - cannot all be FIRSTLAST

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、MDK错误More than one section matches selector - cannot all be FIRST/LAST 2009年12月19日星期六01:21
本来是就按照3210B开发板的那个工程来搭建自己的工程,然后看了下两个开发板的对比。

发现LCD不一样,3210B那个搭建好ucGUI的LCD驱动又和ucGUI的配置混在一起。

于是乎就想换个入手点,又从3210C开发板的basic example为标准来搭建。

完全按照basic example里面的文件重构了一个新的project
但是Build的Link阶段
.\Obj\uCOS-II.sct(7): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.
开始有些undefined或者其他问题的时候,
Options for Target里的C/C++
Define中填加了几个USE_STDPERIPH_DRIVER, STM32F10X_CL, USE_STM3210C_EVAL,LCD_Debug宏就好了
但是这个sct文件,和正常build的例程对比
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00040000 { ; load region size_region
ER_IROM1 0x08000000 0x00040000 { ; load address = execution address *.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
}
完全一模一样呀。

纠结了N久找到个地方说:
/u2/78250/showart_1901146.html
1:error : No section matches selector –no section to be FIRST/LAST.
把原来的Init 代码段名修改成RESET:
; AREA Init,CODE,READONLY
AREA RESET,CODE,READONLY
于是乎在project里面找AREA,这才发现人家是RESET错写成了Init,而我是把
startup_stm32f10x_cl.s
startup_stm32f10x_hd.s
startup_stm32f10x_md.s
startup_stm32f10x_ld.s
四个都加在里面的。

(原来那个项目也是都加了这几个文件呀,肯定有个地方来选择用哪个,但是我没找到在哪改。


导致多个RESET匹配,所以报错More than one section matches selector
我昏,我发现怎么弄了。

(在写这篇文章的时候突然想到)
我就觉得
startup_stm32f10x_hd.s
startup_stm32f10x_md.s
startup_stm32f10x_ld.s
这几个文件图片前面怎么会有一个长得不一样三块红点,应该是有什么特殊的设置
点右键Options for File'***',勾去灰化的Include in Target Build和Always Build
所以才不会重复在里面的吗~
唉。

原来这样
2、function 'assert_param' declared implicitly的警告和错误
这个问题原因是由一个宏开关没有打开!这个宏USE_STDPERIPH_DRIVER开关需要打开,就不会有这个告警、错误,Options->C/C++ Compiler的Preprocessor页的Defined symbols 中加上USE_STDPERIPH_DRIVER
USE_STDPERIPH_DRIVER又是定义在哪里,干什么用?
USE_STDPERIPH_DRIVER定义在stm32f10x.h中
#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD)
/* #define STM32F10X_LD */ /*!< STM32 Low density devices */
/* #define STM32F10X_MD */ /*!< STM32 Medium density devices */
#define STM32F10X_HD /*!< STM32 High density devices */
#endif
把这个宏打开,也是解决连接出错的一种方法。

那它到底和assert_param有什么关系呢?我们继续查找这个文件中的USE_STDPERIPH_DRIVER,发现
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
而stm32f10x_conf.h中就定义了assert_param。

相关文档
最新文档