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.
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久到个地方说:blog.chinaunix/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。