你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

AliOS Things入门(1) 基于STM32L4与MDK搭建AliOS Things2.1.0开发环境

[复制链接]
X-JING 发布时间:2019-9-26 06:10
1 前言" }% u, k. ?! }  G% U, S8 ~' P

     随着2016年NB-IoT技术标准的冻结,物联网(IoT)整个领域迎来新一轮的快速发展,行业机构预测物联网技术(IoT)在2017~2021期间将持续火爆。同时随着十几年互联网技术、大数据、云计算、IoT技术等进一步发展与成熟、芯片存储成本的降低、IoT应用的快速普及等等,物联网RTOS作为IoT设备的基础软件,在一定程度上可以破解物联网下游的碎片化困局,加快下游物联网应用的开发进程,因此RTOS插上物联网的翅膀再次焕发新生。8 B5 J% h0 [" n6 e9 ~# |3 e# j
     物联网RTOS相比嵌入式RTOS(linux、安卓…)面向物联网的应用范畴更为广泛,但是目前阶段,物联网终端应用很多都是基于MCU的裸机开发(Bare-metal)模式,而基于MCU开发,国内开发者更多是基于Window系统,习惯使用的开发工具是IDE(KEIL\IAR等),而不是linux的命令行方式。基于两种平台的开发方式各有千秋,主要还是看个人技术积累与使用习惯。) d2 ?; Y( N3 L! ]* P
     本文主要描述了基于Window系统,使用STM32L476与MDK5来搭建Alios Things(以下简称为 AOS )系统的基础软件开发环境。主要内容涉及:

  • AliOS Things 2.1.0代码仓库的组织架构说明
    8 ~/ z9 N% h- e8 V2 ^. b( Ha. AliOS Things MDK开发调试方式
  • 基于STM32L与MDK搭建AliOS Things的软硬件开发环境搭建; Z* S+ X7 y( h2 [5 ~9 R* V
    a. AliOS Things MDK工程生成方式
    9 s8 ~. Q. M, Q6 t; v8 C- E$ s0 Zb. STM32L476RG-Nucleo的hello world MDK工程搭建实例/ c4 n" w+ ]* Z- o, ]( f
2 AliOS Things入门知识2.1 AliOS Things代码仓库的组织架构* J" R$ r6 {: E' x; J( {

    AliOS Things源代码组织架构符合分层架构与组件化架构。
" C+ {& Y% l& @" d# g

AliOS Things架构至下(层)而上(层),分别是& A% J6 J: w* ~
  • 板级支持包(BSP):主要由SoC供应商开发和维护
  • 硬件抽象层(HAL):比如WiFi和UART、SPI
  • 内核(Kernel):包括Rhino实时操作系统内核、Yloop, VFS, KV 存储…
  • 协议栈(Protocol Stack):包括TCP/IP协议栈(LwIP),uMesh网络协议栈,Bluetooth、LoRaWAN…
  • 安全(Security):安全传输层协议(TLS),可信服务框架(TFS)、可信运行环境(TEE)
  • AOS API:提供可供应用软件和中间件使用的API…
  • 中间件(Middleware):包括常见的物联网组件和阿里巴巴增值服务中间件,比如AT组件、Alink、MQTT、Udata…
  • 示例应用(App):阿里自主开发的示例代码,以及通过了完备测试的应用程序(比如helloworld、Alinkapp)3 S. O+ T" h! X, i4 p
( C3 o$ O& k3 Q3 F0 |' D
2.2 AliOS Things文件夹目录树
- S6 _- Y$ Z5 `

    AliOS Things源代码主要托管在Github上,可以从github下载的源码 AliOS Things latest version,截止2019年6月份,当前最新release版本为2.1.0 http://github.com/alibaba/AliOS-Things/tree/rel_2.1.0


9 O2 A. @7 |4 P+ w3 _# T2 ~8 u
. U$ t, C0 ~# l3 ^9 J
AOS源代码目录树 - AliOS Things 2.1.0文件夹架构
分层
所属文件夹
说明
APP
app
该目录下包含了example 代码示例,通过了完备测试的应用程序(比如Alink)
APP
project
IDE工程目录。比如KEIL、IAR、GCC、e2studio
APP
test
UT测试用例
APP
utility
IoT通用软件库,比如 cJSON
APP
include
该目录下包含了AliOS Things内核、各组件的头文件
中间件
middleware
IoT 通用组件,主要有
! a8 F$ m" N2 @' A& e- linkkit
* \4 }; Y6 B+ T0 ^$ u9 M; |6 z- udata
( Y' f3 @1 v' }; K2 T" b- ulocation" i4 C( G/ Q: c5 T) T9 q* T
- uagent
AOS API
osal
AOS API,提供可供应用软件和中间件使用的API
安全组件
security
包括TLS,TFS, TEE在内的安全组件
应用驱动
drivers
该目录下包含了应用驱动代码,主要有
3 d& |; ]) P( s2 m- sensor
) A! d% Z+ \; i% T4 D2 B0 X; r- sal6 ^0 W3 L: _* ~1 x
- gprs
; Y# q* Y% Y7 A2 m, D) |# f! H- wifi
网络连接
network
该目录下包含了当前支持的网络协议栈
7 Q4 `6 W; q7 d8 w) l1 H- bluetooth9 H  H( z7 `8 Y' ]" O3 @
- breeze" I( e& g$ a3 l2 z# p; o
- bt_host
% k1 D) Z! V+ m( X# |- bt_mesh
; O2 n7 s! x9 T, m. I0 ?- canopen9 ], f0 u: o3 r# q
- lwip
( q2 _/ o( `/ \0 V. y- lorawan# h3 T" h1 l. J
- umesh
* N! R" K6 u# y4 z4 [4 Q- nal
5 O$ \  n& e2 l9 O! X1 x- atparse
5 {, e' A" A; R- r- athost
3 P& [8 W. d* H% D- netmgr
6 n& K3 l6 l3 K5 W5 i# H/ A( w2 L- yloop
3 ?& i3 h& a8 x: ~- …
AOS内核
kernel
该目录下包含了Rhino、命令行(CLI)
HAL
board
实际硬件开发平台,包括评估板、用户自己的硬件平台等(如STM32L496G-Discovery)
BSP
platform
该目录下包含了mcu与arch文件夹1 y7 j, `6 |( L$ @1 J, H
- mcu
  g0 G4 ~3 b3 _; v1 B) j7 {8 ?- 该目录主要存放厂商提供的芯片底层软件库代码(如STM32L4xx_cube库),主要由SoC供应商开发和维护,以及二进制文件,如系统启动、驱动、编译/链接脚本等。mcu下的目录结构按“厂商/芯片系列”进行区分% _4 f8 J$ g6 z: ^/ I
- arch
4 ^+ f  l0 T$ @- 主要存放硬件体系架构所需要的移植接口实现文件,如任务切换、启动、开关中断等(即arch/include/port.h中所定义的接口),硬件体系架构如arm、risc-v、linux、misp…
7 l) J5 k* X* X/ l) M$ K4 _- 示例(armv7m):- 头文件:arch/arm/armv7m/gcc/m4/port*.h,代码示例; P# r, Y4 r: I5 C9 ?$ {! f! E) |
- 源代码:arch/arm/armv7m/gcc/m4/下的.c文件和汇编文件,代码示例
# s; p0 K" H. i) Y5 ]1 B- 注:arch下的目录结构按CPU架构区分,请参照已有目录。
Tool
build
编译框架,包含了ucube.py、makefile、编译规则、编译py脚本等文件
Tool
tools
用于建立远程设备中心的testbed工具、doxygen生成文件

$ x8 t# Y' N2 x  F5 j5 ?  _2.3 AliOS Things开发与调试方式
! @+ P2 M. h0 a. b  E
5 A/ k5 R; R  X9 B- H

AliOS Things支持多种调试手段,针对不同的功能模块,不同的使用场景,开发者可以根据需要自己选择:


; ]  ]& G0 f4 i9 F; \) g1 u
  • linux host模拟环境:适合于硬件无关的模块或者代码,可以使用gdb,valgrind等流行的工具
  • CLI环境:适合板上轻度调试,使用系统的各种内存调试工具
  • JTAG环境:适合板上调试,利用硬件调试能力与IDE功能(MDK\IAR\AOS Studio)本身提供的在线调试功能, y2 G: C9 `; e1 l! W, W+ r. S
- E8 h# [, B. C8 O" [6 b* i

具体可参看《AliOS-Things调试概述 Debugging-Overview


7 u- ?- w# M$ U, \  z3 AliOS Things MDK环境搭建+ x4 p3 p, B  W0 ?

! c: e4 u1 L2 J) q/ ~  S# r

AliOS Things MDK环境搭建目前可以有两种方式,一种是通过aos-cube工具(aos-cube 是 AliOS Things 在 Python 下面开发的项目管理工具包)通过aos make等构建命令自动生成MDK工程,另外一种是使用MDK自己新建工程,添加项目文件。

AliOS Things uCube ≈ RT-Thread ENV (都是基于命令行的项目管理工具包)9 o6 f1 j% s% o' O5 v, o4 {$ d& L
目前这块RT-Thread支持的比较成熟,通过ENV工具的Scons快速编译生成KEIL工程,同时对于新的平台,也可以通过现有的文件,快速修改得到。

" ~" K6 U; o5 m/ o5 ?
3.1 aos-cube自动生成MDK, a& {! M" f7 Y9 ^% ~

Alios-things 支持将特定的目标转化成keil和iar来进行开发。自动生成keil或iar工程的命令就是在原有构建命令的基础上加上 IDE=keil 或 IDE=iar 的选项,会自动生成一个keil工程或者iar工程。构建命令:

  1. aos make mqttapp@b_l475e IDE=keil+ K8 C' [2 Z- a4 v/ t. h
  2. aos make mqttapp@b_l475e IDE=iar
复制代码

当前使用aos-cube工具自动生成MDK的板子还比较少,具体可以参看《AliOS-Things自动生成KEIL\IAR工程 Auto-generate-keil-iar-project》这篇文章

支持情况
% Y* F7 l5 Y9 S
  • 目前支持 b_l475e 和 startkit 两个board工程自动生成。其他stm32系列的自动生成的工程可能需要人为做一些修改。
  • 转化出的工程默认未开优化选项
  • 工程内存信息,可能与board实际的有所差别,需要完善$ k2 }% p- o8 C' `" [

+ r+ e8 _+ T0 v+ k/ |' s3.1.1 AliOS Things 2.1版本KEIL工程* H! f- a1 D; F3 d* i$ w+ R5 d

从2.1.0版本,keil目录下已经不再包含示例工程,是通过aos-cube工具自动生成。


9 o+ L( y9 M4 S4 S6 N/ S3.2 手动新建MDK工程
, v$ \5 ~. N5 w

     虽说是手动搭建新工程,但最好还是找到源代码版本一致情况下的KEIL模板工程或者相似平台(比如采用上述提到的“aos-cube自动生成MDK”工程),直接复制,重命名,然后再根据实际修改。
& U  R; D" M) Z9 H+ `4 C因为AliOS Things最新发布2.1.0代码库中,KEIL默认采用自动生成方式,project目录下里面没有包含KEIL工程,当前采用的办法是参考之前版本(包含了KEIL示例工程)(可以到develop等分支下载),由于AliOS Things 2.1.0版本与之前版本对文件目录结构等做了不少调整,因此不能直接使用,需要适当修改。
4 p) Y; W0 }' ^$ ]相比于之前版本,2.1版本的变化如:

  • 从直接mcu文件夹中分离出board相关文件,放在新增加了board文件夹内,这样有利于共用mcu中的文件
  • kernel文件夹删去子文件夹core分类
  • arch增加了common文件夹,用来存放port_c.c
  • 新增了osal文件夹,用于存放aos api文件
    , \  O2 F( B, p
3 `) f5 C) q2 a. z$ L$ C

接下来第4部分内容,将详细说明MDK工程的搭建过程与可能遇到的问题。

4 y) ^( @9 M$ d2 A* k
4 搭建AliOS Things第一个MDK工程3 Y2 O1 p4 N9 t1 n" u4 B
+ |+ S1 f5 G9 U5 z3 {7 u

     以手动搭建AliOS Things 2.1.0版本中 STM32L476RG-Nucleo的hello world MDK工程为例
: X+ ~! f; \: h& O首先直接拷贝之前版本的AliOS-Things\project\STM32L476RG-Nucleo\helloworld到2.1.0相同路径下面, L4 V5 l8 y1 S: u! d. h; x  J& V


; z9 [0 z3 `& F; r2 ]' O# z4.1 AliOS Things系统所需基础依赖文件4 o* U: u' R3 `; Y" E

     基于MDK与STM32L4,AliOS Things 2.1.0系统所需的基础依赖文件主要包括如下内容,下面具体展开的是移植中比较容易出错的部分文件:

  • 具体应用文件
    # w0 X# b7 M8 n" Y
    • example
        Y1 U# X0 h7 ?3 |. J: F
      • helloworld
        " @3 Z$ d7 J0 u7 ]5 i8 n3 ?
  • AOS API文件,应用层或者中间件通过这层API接口访问内核: H5 t2 c$ ~% I. H
    • osal\aos% _+ X0 H. H3 u7 A$ I
      • rhino.c# E# e4 u8 S& j
        • aos_init初始化入口
        • aos_start 内核启动入口
        • aos_msleep 系统延时
        • *aos_malloc、aos_free…
          0 t/ C9 ~7 T9 z- Y8 V
  • 具体硬件平台文件! i0 B0 H0 `  w1 C/ X7 j
    • board\STM32L476RG-Nucleo
      . d; O- @/ M: O6 z6 `7 V9 ^! K4 u
      • 启动文件startup_stm32l476xx_keil.s
      • 分散加载文件STM32L476RGTx_FLASH.sct
        2 {/ e* J* F# o% [
    • board\STM32L476RG-Nucleo\aos
      % |. p; H2 K, E7 ?  J7 [1 {9 X  Q
      • 内核特性移植与裁剪文件k_config.h,通过修改k_config.h来使能kernel的功能模块
        ( Z/ v% @* h# J
  • 堆分配等文件6 P* A% u" O* z8 N
    • utility\libc\compilers\armlibc\armcc_lib.c
        \1 b: u$ m3 k+ z0 \- Q
  • 内核特性移植相关文件.soc_impl.c、aos.c' [  f2 @: x) K
    • platform\mcu\stm32l4xx\aos- J  {8 \! t4 C5 D* M
      • soc_impl.c里面必须要实现的是内存分配这块的配置g_mm_region
      • aos.c包含了main入口函数
        6 z- B- c1 @9 d8 N; S, E
  • 内核文件
    6 F8 y6 [: k' R" ~* C6 b
    • kenerl\rhino
      3 J8 P0 q4 m; Y) I! J
      • 内核初始化文件
        " r% E+ ~. u. N
        • kernel\rhino\core\init\aos_init.c
          ! P0 j8 u/ X6 _" R, ^5 b: R
  • 面向板级的HAL驱动文件
    6 H3 J0 q8 f( G0 F2 m) _$ R  ~
    • platform\mcu\stm32l4xx_cube\hal& Q9 f% b$ \8 N
  • STM32L4 cube库文件
    3 ?; E6 r& t/ u0 X! B/ H9 j6 E
    • platform\mcu\stm32l4xx_cube\Drivers\STM32L4xx_HAL_Driver\Src* ~- O6 G0 m; `/ W+ w, b
  • 硬件体系架构所需要的移植接口实现文件( @/ r* X- ^7 z  m
    • platform\arch\arm\armv7m\armcc\m4\port_s.S
    • platform\arch\arm\armv7m\common\port_c.c
      ! [" A2 L! {% x! {

8 c' x7 W4 @/ O1 c, Z4 J! r0 N4.2 可能遇到的问题5 b* ?- I9 a6 z- M3 q, M- s7 `

     打开STM32L476RGTx.uvprojx工程,会发现有左边的工程文件很多感叹,主要是因为文件路径发生变化,可以对STM32L476RGTx.uvprojx使用文本编辑器打开(比如Sublime Text3…),将相关出现感叹号的文件替换为新版本的对应路径。
3 ]( ]6 j* W( m3 U- |+ V具体方法是:

  • 点击出现感叹号的文件,会弹出提示框,根据对应当前老版本的文件路径调整,然后修改为新版本AliOS Things 2.1.0下的对应路径
  • 如果刚上手不熟悉AliOS Things,如何找到AliOS Things 2.1.0下的对应.c、.h文件路径?
  • 一种方式是在AliOS Things的github代码仓库搜索,github提供了非常强大搜索功能
  • github搜索示例:
  • 在文本编辑器中修改了STM32L476RGTx.uvprojx,保存后,切换会MDK工程,MDK会自动重载STM32L476RGTx.uvprojx中修改的文件。如果修改顺利,则可以看到文件的感叹号已有消失了。
    / i- ^8 R7 e9 w1 ^5 j/ D

/ e, ?' K$ ]$ a- V* m

$ X4 b$ J! X( {! S$ I+ `$ j8 o
4.2.1 core文件路径找不到 . ?6 m& K( I4 `

错误原因:由于2.1.0删去了core文件夹
* d" C, h. R) M解决方式:

\kernel\rhino\core

4 j& O& d+ [" ~1 B# o9 v: Z
修改为, J( g- v% V. [1 `  r3 s/ R' ^, i
\kernel\rhino

8 N" t$ t3 F, ]: r! O( f# r
4.2.2 soc_init.c路径找不到' o+ U7 L6 [2 h/ ~, g

错误原因:2.1.0文件结构调整

解决方式:

原始
) {- E4 e8 M6 Z8 f# b# ]& S1 M\platform\mcu\stm32l4xx\src\STM32L476RG-Nucleo\helloworld
" v6 H: i0 q& i* H8 M& [修改为
3 O" ]( h2 s7 K\board\stm32l476rg-nucleo\aos\

$ g5 C8 f0 Y0 M* f
4.2.3 stm32库路径重命名9 Z/ m3 A) U/ k/ T$ C
( R3 C5 a0 P6 e1 e8 r! j

错误原因:stm32库文件重命名4 q, g1 J& ?, {  v3 l1 I" L. V; v5 }
解决方式:

\mcu\stm32l4xx\Drivers\" R" A) H1 M# [" S6 V: A
修改为
8 S/ X. }. S2 m& U0 h, S\mcu\stm32l4xx_cube\Drivers\


& V/ w) T5 b4 G


" w( ?7 k/ \* n6 f- b; M! ~

错误原因:stm32库文件重命名


& _" x: o2 ^9 C解决方式:

\platform\mcu\stm32l4xx\aos4 Z& i% ^  o. K  L
修改为* u! q# n! V6 l. N4 h6 d) q
\platform\mcu\stm32l4xx_cube\aos\


6 I. T0 y+ K4 H! M; O4.2.4 新增board文件夹! H$ b5 w: f2 ~/ D

5 u. P: Q! y, X) E( E
错误原因:新增board文件夹' z! q9 f- ]+ j. k" W5 J. o
解决方式:

\platform\mcu\stm32l4xx\src\STM32L476RG-Nucleo\修改为
) ?" j5 w% ?/ Y2 r3 m\board\stm32l476rg-nucleo\

( w0 `% h) C, C: B8 I$ D+ C1 S
4.2.5 新增arch common文件夹
' O, f3 J; N2 @# \+ H3 H& s* f

, C1 K7 u1 ]( L
错误原因:新增arch common
/ e, w" u1 y6 m解决方式:

\platform\arch\arm\armv7m\armcc\m4
$ W- w: Y) E+ z& R0 G* \, i修改为( t+ u4 a1 B6 f; A5 U
\platform\arch\arm\armv7m\common

4.2.6 头文件找不到- e7 \. d/ Y# u( e2 @0 {* {

问题:

…\platform\mcu\stm32l4xx_cube\Drivers\STM32L4xx_HAL_Driver\Inc\stm32l4xx_hal.h(46): error: #5: cannot open source input file “stm32l4xx_hal_conf.h”: No such file or directory

解决方式:

添加board子路径
( z7 e1 A" ?( X…\board\stm32l476rg-nucleo\Inc


问题:

…\kernel\rhino\include\k_api.h(16): error: #5: cannot open source input file “k_config.h”: No such file or directory

解决方式:

添加board子路径
( Q" R" j# |0 j. R4 ]% E…\board\stm32l476rg-nucleo\aos


问题:

…\kernel\rhino\include\k_api.h(19): error: #5: cannot open source input file “k_types.h”: No such file or directory

解决方式:

添加common子路径
; ]7 w3 K( A8 I" h  p% J8 ?" `…\platform\arch\arm\armv7m\common


. _+ E7 d: ?& P


问题:

…\kernel\rhino\k_err.c(5): error: #5: cannot open source input file “debug_api.h”: No such file or directory

解决方式:

添加路径2 O4 m# W& C3 X, s  h6 u: x: k
…\kernel\debug\include


问题:

…\kernel\debug\include\debug_api.h(16): error: #5: cannot open source input file “debug_dft_config.h”: No such file or directory

解决方式:

添加路径) t1 D# F" H6 n9 s. Y7 C+ U
…\kernel\debug


问题:

…\board\stm32l476rg-nucleo\aos\soc_init.c(15): error: #5: cannot open source input file “hal_uart_stm32l4.h”: No such file or directory

解决方式:

…\board\stm32l476rg-nucleo\hal


问题:

…\platform\mcu\stm32l4xx_cube\aos\aos.c(5): error: #5: cannot open source input file “aos/kernel.h”: No such file or directory

解决方式:

…\include\aos


问题:

…\platform\mcu\stm32l4xx_cube\aos\aos.c(5): error: #5: cannot open source input file “aos/init.h”: No such file or directory

解决方式:

…\kernel\init\include

4.2.7 sct文件未定义
0 X) ]8 V$ c& g, E$ ~

问题:

STM32L476RGTx\STM32L476RGTx.axf: error: L6031U: Could not open scatter description file …\board\stm32l476rg-nucleo\STM32L476.sct: No such file or directory

解决方式:4 M  A5 d/ a( {. L; O4 l
>在工程的Options选项中,重新设定.sct路径+ p$ A7 d! o+ Y! h

' y# A# @/ e3 b5 i7 V
4.2.8 SysTick_Handler重定义
# A! R, _* W* x; u7 b& c' F

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by stm32l4xx_it.o and soc_init.o).

原因:

soc_init.c定义了SysTick_Handler实现OS系统心跳,上下文切换

解决方式:

工程中删去stm32l4xx_it.c文件


% ~$ ~: r/ O7 ~1 W! [. ?1 g* N4.2.9 PendSV_Handler重定义4 m0 w- E* @6 q- h6 ~  C/ A. O1 |

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by port_s.o and stm32l4xx_it.o).

原因:

port_s中定义了PendSV_Handler实现上下文切换

解决方式:

工程中删去stm32l4xx_it.c文件

% ~1 _7 Q7 s2 b8 d
4.2.10 main入口在哪里
6 f0 I+ s- q* E4 t6 b! l+ E& }% c% w% ]6 ^$ J# F9 w& B

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol main (referred from entry9a.o).

原因分析:

  • AliOS Things之前版本是放在具体的应用中,rhinorun.c中  ]! R8 U2 ?5 d7 V) w& e  b
  • int main(void)
    & x2 `# }' L' H: s) t
  • 2.1.0 开始放在AliOS-Things\platform\mcu\stm32l4xx_cube\aos\aos.c,放在通用库中,因此应用层代码可以统在application_start()处理- h6 M* L: P& b" {

  u( ]7 }! s1 i4 K3 R8 I4.2.11未定义aos api接口文件# V7 R9 T2 b* I: W; N! f

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_free (referred from armcc_libc.o).+ y8 o3 m+ V: J" T/ F4 y5 B
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_malloc (referred from armcc_libc.o).
! G' R+ x9 k' ISTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_realloc (referred from armcc_libc.o).
% \, O& Q% ]# N1 ]: J1 f* CSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_init (referred from aos.o)." z3 c6 u: G5 J
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_start (referred from aos.o).8 ]' u7 _* q' S# u$ I5 m" i/ P
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_msleep (referred from helloworld.o).5 [8 Q, d  m3 b8 ~: t# y$ ?5 N3 f
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_free (referred from hal_uart_stm32l4.o).6 {2 U4 N( {7 n( v. b, L& ]
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_is_valid (referred from hal_uart_stm32l4.o).5 l2 ]8 M0 M& W8 C4 d8 q! K6 j+ ]0 Y
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_lock (referred from hal_uart_stm32l4.o).
, ?+ a! l: @$ q6 Y0 R5 DSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_new (referred from hal_uart_stm32l4.o).
- `" e8 o6 S+ ?( V) D" kSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_unlock (referred from hal_uart_stm32l4.o).1 b0 I! c7 j8 s; C9 p# ]. P& Y
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_free (referred from hal_uart_stm32l4.o).* m' o1 ~: g; P8 j+ n
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_is_valid (referred from hal_uart_stm32l4.o).
, M3 o8 M1 e2 p$ Z: |! ASTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_new (referred from hal_uart_stm32l4.o).
* N1 ]% z2 Y) ~) SSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_signal (referred from hal_uart_stm32l4.o).
5 q2 W) N& \; Z6 E/ Q, u2 V/ {STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_wait (referred from hal_uart_stm32l4.o).


1 ^7 h0 N9 Q& _" ~

原因:

AliOS Things 2.1.0版本封装了一层AOS API接口,方便上层调用内核相关功能,增加osal\aos的rhino.c文件

解决方式:

增加osal\aos\rhino.c文件6 L( `3 [4 M1 y! ^

) w" G# o$ I8 Q3 ^4 N
4.2.12 内核初始化文件未定义
- V0 G* T4 I# }6 J: b

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_components_init (referred from aos.o).

解决方式:

增加kernel\rhino\core\init\aos_init.c文件


$ S4 n( x; y0 \" y! Y% Q4.2.13 wifi.h文件未定义5 G: P2 {- |5 J; x

问题:

…\kernel\init\aos_init.c(13): error: #5: cannot open source input file “hal/wifi.h”: No such file or directory

解决方式

增加路径 …\include\network


" U5 Z# `% I* ~, U. s  w4.2.14 启动文件.s文件未定义
9 T9 n0 K1 k* J5 f* n+ u

问题:

…\board\LR-Assistant-L476\STM32L476RGTx_FLASH.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.

原因:

工程中没有添加xx_startup.s启动文件

解决方式:

双击左边工程框的文件夹,添加Startup开头的.s文件即可,比如本文使用到的startup_stm32l476xx_keil


7 B! {5 w; u+ |& \, B. ?' u# x. K4.2.15 port_s.S汇编代码嵌入C代码异常! Q9 u9 z$ m% Z8 q

问题:
: B! H4 o# y( t5 Y# r" q! t

port_s.S中引入了宏语言" j( t9 B5 ]5 y6 _; i: z
8 T0 e4 W" n" a' @$ i
原因:

使用GCC可以通过.S后缀识别预处理语句,在编译的时候来进行预处理,但是armcc默认不行,需要其他参数设定

解决方式:

简单的一种处理方式是在MDK工程中,根据实际宏定义功能需求,屏蔽相应的C代码(宏定义、投入)

3 v5 {) Y7 B% [
5 参考
! p; W+ ~+ J9 S, _0 X" R( z/ D' b
" w1 D' L4 S* t5 K# M
$ |# D3 ?3 `) K2 I' T7 o0 H, G1 |9 }( P. f

  N% S' F) U* t8 e5 g& j+ t& l& E/ Q! h0 R2 U0 F

; B1 ^; ^1 Y, ~

AliOS-Things2.1.0-helloworld.zip

下载

6.89 MB, 下载次数: 8

mdk+stm32l4

收藏 1 评论0 发布时间:2019-9-26 06:10

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版