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

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

[复制链接]
X-JING 发布时间:2019-9-26 06:10
1 前言$ r4 h5 t' q* r

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

  • AliOS Things 2.1.0代码仓库的组织架构说明$ e9 Q/ o' h& ]- ~
    a. AliOS Things MDK开发调试方式
  • 基于STM32L与MDK搭建AliOS Things的软硬件开发环境搭建- m2 M6 H& R3 q/ W+ I9 O* U+ }* x/ ^
    a. AliOS Things MDK工程生成方式
    " R! r5 N1 T# I, b' [( ]b. STM32L476RG-Nucleo的hello world MDK工程搭建实例0 \7 m& ?3 ^0 T- Z7 I$ h
2 AliOS Things入门知识2.1 AliOS Things代码仓库的组织架构
: ?/ O$ x* z) C6 Z5 p; h  ]' O

    AliOS Things源代码组织架构符合分层架构与组件化架构。/ m6 d( E" G' v* }# Y

AliOS Things架构至下(层)而上(层),分别是
5 X/ o0 g9 `  j6 s
  • 板级支持包(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)
    4 f: f/ f  A5 k; [

. Y& l6 ]/ M5 S2.2 AliOS Things文件夹目录树
( ^4 J5 s$ H7 C' T: b+ Z

    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


" I& L/ ]* B; ]
- D( ~. o8 o2 T4 o* F& K4 V
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 通用组件,主要有2 w, Z- d" n2 w" t! N2 \3 A
- linkkit( Y- U$ l- d) X9 P
- udata/ W6 k% U& ^  n/ M4 `
- ulocation( e- s8 Q2 F% [& h2 O9 a
- uagent
AOS API
osal
AOS API,提供可供应用软件和中间件使用的API
安全组件
security
包括TLS,TFS, TEE在内的安全组件
应用驱动
drivers
该目录下包含了应用驱动代码,主要有
2 ?( F; [6 o1 i) h- sensor
  |( H) `: V% H- P- sal7 c- ]  v6 [9 r. @0 ^$ y
- gprs' V/ m9 V0 l; I: V" a
- wifi
网络连接
network
该目录下包含了当前支持的网络协议栈
! b5 v1 G8 \: l- M( d  u- bluetooth* ~, v. x6 {) Z% z0 x8 a
- breeze! r- V" K1 q5 _" w1 P+ Z' V
- bt_host) g! E9 b' F0 D# i* g& }5 D
- bt_mesh
+ r3 ^7 c; U! Z. i- canopen  s+ l- o- t' d; m4 _" g
- lwip; T( e  `( {/ L- x3 g) R
- lorawan$ T! F# l: w  Z9 g- j, q3 O9 l
- umesh6 h6 J1 w0 J$ c' Y5 a( g
- nal8 S  o) A- c! F& |: O# }: }# j! t
- atparse) T% `0 |/ A7 [8 Y
- athost2 M# O: }  C& {& }, D$ R
- netmgr& ?9 ]! K- ~& u- x" K6 D( q
- yloop
2 A2 m( `1 f  z4 x7 f- …
AOS内核
kernel
该目录下包含了Rhino、命令行(CLI)
HAL
board
实际硬件开发平台,包括评估板、用户自己的硬件平台等(如STM32L496G-Discovery)
BSP
platform
该目录下包含了mcu与arch文件夹
  d, v+ }6 d7 r8 r+ ~. `7 O  I; i- mcu
& [' Q* l) G( B; X6 n' d- 该目录主要存放厂商提供的芯片底层软件库代码(如STM32L4xx_cube库),主要由SoC供应商开发和维护,以及二进制文件,如系统启动、驱动、编译/链接脚本等。mcu下的目录结构按“厂商/芯片系列”进行区分9 C1 t, l) W' y; K2 O  L
- arch0 i( s4 t. q+ Y6 r7 g& f
- 主要存放硬件体系架构所需要的移植接口实现文件,如任务切换、启动、开关中断等(即arch/include/port.h中所定义的接口),硬件体系架构如arm、risc-v、linux、misp…
$ e0 Z+ p. s$ J3 u$ [- 示例(armv7m):- 头文件:arch/arm/armv7m/gcc/m4/port*.h,代码示例1 Y5 W8 N6 X5 P  q( G+ T8 C
- 源代码:arch/arm/armv7m/gcc/m4/下的.c文件和汇编文件,代码示例
5 H) [. _$ b) }8 R* i, ]' _- 注:arch下的目录结构按CPU架构区分,请参照已有目录。
Tool
build
编译框架,包含了ucube.py、makefile、编译规则、编译py脚本等文件
Tool
tools
用于建立远程设备中心的testbed工具、doxygen生成文件
: Z( \$ n' ^) D# M8 h- @
2.3 AliOS Things开发与调试方式
. l; B# x" c2 c% X! e9 W6 ]1 G, x: f5 K, z0 E' V

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

  O4 E. O; \9 r! Z! j* _* Z' B5 n
  • linux host模拟环境:适合于硬件无关的模块或者代码,可以使用gdb,valgrind等流行的工具
  • CLI环境:适合板上轻度调试,使用系统的各种内存调试工具
  • JTAG环境:适合板上调试,利用硬件调试能力与IDE功能(MDK\IAR\AOS Studio)本身提供的在线调试功能3 O  v* [, Y# N5 o! Y

( b) z% b3 L* n' Q% m2 d

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

1 p  _# l- B9 o8 F- z+ q. Z
3 AliOS Things MDK环境搭建
) F8 b- u# b% k/ U+ d, b! ~! M) S8 w. p: x; C

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

AliOS Things uCube ≈ RT-Thread ENV (都是基于命令行的项目管理工具包)$ ~3 L% H0 _% S3 t
目前这块RT-Thread支持的比较成熟,通过ENV工具的Scons快速编译生成KEIL工程,同时对于新的平台,也可以通过现有的文件,快速修改得到。

' X( U5 U3 k0 n! k) P
3.1 aos-cube自动生成MDK
) W) K% ]( ~, Q3 G

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

  1. aos make mqttapp@b_l475e IDE=keil0 q2 Z3 f2 m; j* g. i
  2. aos make mqttapp@b_l475e IDE=iar
复制代码

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

支持情况( m, g" ]0 T0 {4 V
  • 目前支持 b_l475e 和 startkit 两个board工程自动生成。其他stm32系列的自动生成的工程可能需要人为做一些修改。
  • 转化出的工程默认未开优化选项
  • 工程内存信息,可能与board实际的有所差别,需要完善0 T* |; S' ]- V) n
  Q3 w1 I9 g/ f- p# ~# @
3.1.1 AliOS Things 2.1版本KEIL工程/ N( F3 S- {" A- j/ C+ Q0 H3 u

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


: J- U3 |  C; J# X" W5 Y3.2 手动新建MDK工程' T' q- U0 N( K! P

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

  • 从直接mcu文件夹中分离出board相关文件,放在新增加了board文件夹内,这样有利于共用mcu中的文件
  • kernel文件夹删去子文件夹core分类
  • arch增加了common文件夹,用来存放port_c.c
  • 新增了osal文件夹,用于存放aos api文件0 u7 V. |! H5 k7 V+ G' ^
% R2 h2 `  B. s7 ?6 U

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


0 Q2 k& u) s3 @4 P7 k+ e4 搭建AliOS Things第一个MDK工程7 o6 k6 \% @+ D) T' X+ C

/ @, u. t) Q5 x* k- D' o

     以手动搭建AliOS Things 2.1.0版本中 STM32L476RG-Nucleo的hello world MDK工程为例
6 c4 ]0 ]6 H$ v首先直接拷贝之前版本的AliOS-Things\project\STM32L476RG-Nucleo\helloworld到2.1.0相同路径下面+ S+ @) j* w- ?0 e& a- W1 R" f

: _1 F9 I0 G" t2 M1 ?
4.1 AliOS Things系统所需基础依赖文件! \* D: y( u; i2 u7 A7 ]/ [$ f

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

  • 具体应用文件0 G& I) g! z, b5 I; F& |) B# B. ^0 C
    • example" W# k6 k" A$ X% \4 l: d6 y
      • helloworld1 x1 {" q6 j, r( _
  • AOS API文件,应用层或者中间件通过这层API接口访问内核! W; v- A2 B4 A- D4 c2 ~
    • osal\aos8 q2 p2 B2 |7 ?' Z8 Y) O0 k3 }6 \4 S
      • rhino.c
        ( y6 O+ h4 S/ ~* `" u& j
        • aos_init初始化入口
        • aos_start 内核启动入口
        • aos_msleep 系统延时
        • *aos_malloc、aos_free…
          1 ?4 ]- A7 k' Z/ d* ?6 d8 |
  • 具体硬件平台文件% ^" g2 V/ R% S' G2 n
    • board\STM32L476RG-Nucleo/ H, t6 }: }! l( i3 e% t; m
      • 启动文件startup_stm32l476xx_keil.s
      • 分散加载文件STM32L476RGTx_FLASH.sct
        $ ]/ \9 W* F: N
    • board\STM32L476RG-Nucleo\aos9 m; P0 e( w1 z+ C. F& b6 \
      • 内核特性移植与裁剪文件k_config.h,通过修改k_config.h来使能kernel的功能模块6 z0 g" m* ~4 e* D
  • 堆分配等文件
    1 b- i% H9 N! V
    • utility\libc\compilers\armlibc\armcc_lib.c4 b; a$ N+ n6 l7 N1 e  C
  • 内核特性移植相关文件.soc_impl.c、aos.c
    3 O. l3 K# B: O* O" o' b+ R; H
    • platform\mcu\stm32l4xx\aos5 o( n7 ~2 e% I
      • soc_impl.c里面必须要实现的是内存分配这块的配置g_mm_region
      • aos.c包含了main入口函数+ X; d3 _) E$ @
  • 内核文件+ R4 F9 ^. ?$ e, f; m; x9 \3 l# v
    • kenerl\rhino
      1 r) `- r9 C0 D+ |5 c5 v
      • 内核初始化文件
        ! {, @2 Z' ^* E1 O
        • kernel\rhino\core\init\aos_init.c4 Z% p7 r: M1 e  A1 Q$ @
  • 面向板级的HAL驱动文件
    ' f# c0 @& o9 u/ [% h! N
    • platform\mcu\stm32l4xx_cube\hal
      5 L# X' }8 C" t2 }9 x  q! ^6 t
  • STM32L4 cube库文件1 s. B; a- [" `4 f9 N& M  y: D
    • platform\mcu\stm32l4xx_cube\Drivers\STM32L4xx_HAL_Driver\Src; w  e  _% y4 `/ s* f
  • 硬件体系架构所需要的移植接口实现文件
    7 Q. m+ o+ ~4 `- G$ q) |- a3 n
    • platform\arch\arm\armv7m\armcc\m4\port_s.S
    • platform\arch\arm\armv7m\common\port_c.c
      9 l3 n0 Y4 e" |6 }! ?

8 a2 Q5 R7 k" }5 o5 A. [' r4.2 可能遇到的问题9 V5 ^6 Y0 r1 a  V, u

     打开STM32L476RGTx.uvprojx工程,会发现有左边的工程文件很多感叹,主要是因为文件路径发生变化,可以对STM32L476RGTx.uvprojx使用文本编辑器打开(比如Sublime Text3…),将相关出现感叹号的文件替换为新版本的对应路径。
- _. p" J7 F2 H6 @! V8 @* m具体方法是:

  • 点击出现感叹号的文件,会弹出提示框,根据对应当前老版本的文件路径调整,然后修改为新版本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中修改的文件。如果修改顺利,则可以看到文件的感叹号已有消失了。
    2 a0 ^% O5 t. b- i1 G

+ W1 D& C  L, ~


: z2 V3 g  R' F/ Z% n0 ^3 ]3 n" {4.2.1 core文件路径找不到 # W9 e) a  m0 _4 ], M/ k! E

错误原因:由于2.1.0删去了core文件夹 . v' ]! Q. R5 R8 J
解决方式:

\kernel\rhino\core

; i& s- n/ E3 Z% [1 X, i8 j3 [
修改为
& I6 S3 O, Z$ ]: E\kernel\rhino


4 y0 ]) r" d) C0 Z# r
4.2.2 soc_init.c路径找不到8 r. [: ^1 `5 X

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

解决方式:

原始
; P1 u- N) H" Z% |6 N- m0 ^\platform\mcu\stm32l4xx\src\STM32L476RG-Nucleo\helloworld
; L# S+ N2 Z+ p# S' l% g修改为5 \6 x& ]* T2 C
\board\stm32l476rg-nucleo\aos\

$ t9 X7 X" ?' J  _# f+ m
4.2.3 stm32库路径重命名+ [# ^1 }( @( W3 \( W+ b

: `% @$ Q. r9 W

错误原因:stm32库文件重命名
# D$ c3 }. A# T  h8 _3 k3 f0 v解决方式:

\mcu\stm32l4xx\Drivers\) V/ Q, E, |9 |* X/ U$ g& j
修改为. |% Q; Q) N( t9 a! q+ b
\mcu\stm32l4xx_cube\Drivers\

) _; m/ R4 w. L: m  Z


* n, M5 R! O- p4 u0 `/ a6 z

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


$ j' u: f0 {4 O% g解决方式:

\platform\mcu\stm32l4xx\aos
7 _% q. X: n  h% G( c& ?修改为" e5 |" Z, R# l) @3 ?' h5 E, V
\platform\mcu\stm32l4xx_cube\aos\

1 R+ R$ K0 m2 J2 V( F& T
4.2.4 新增board文件夹; P- q( q' b9 z; J' k) d! b

9 C/ Q+ p4 V) @" ~
错误原因:新增board文件夹
9 _8 C% I' Q( h5 ?解决方式:

\platform\mcu\stm32l4xx\src\STM32L476RG-Nucleo\修改为
$ E. g6 X& i4 b: X$ y* X% e8 }: p% M\board\stm32l476rg-nucleo\


1 G% Q2 V- B  S# b; g6 \# L4.2.5 新增arch common文件夹
) p- c$ Q2 k( i

4 c' [0 v2 T8 K( w& p
错误原因:新增arch common( S4 S% q6 `( N1 X2 S
解决方式:

\platform\arch\arm\armv7m\armcc\m4' `4 y: @7 ~$ F# I  V! Z
修改为3 f' d& X& y' S! ~2 E
\platform\arch\arm\armv7m\common

4.2.6 头文件找不到9 ^$ Q/ q$ p1 \/ X9 M

问题:

…\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子路径
& a* Y1 q3 ?- p- i9 e+ F" k…\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子路径
) b! |2 y3 v+ l6 _9 F( 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子路径
1 T/ P. f! U7 \) y/ R; ^: D0 g…\platform\arch\arm\armv7m\common

8 o( _7 i. x( \' `' v" ~- V% f


问题:

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

解决方式:

添加路径, I. q0 q. A" l5 F
…\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

解决方式:

添加路径9 L' V, L  j/ \0 j
…\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文件未定义; e! w8 L+ d8 w! W" y

问题:

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

解决方式:
( f3 k/ d! b* s, E( ~8 l, u>在工程的Options选项中,重新设定.sct路径
, o8 i# X% M8 h' W/ `( c3 s


. }. R) O* b6 d4.2.8 SysTick_Handler重定义
$ q/ D; h' |' E

问题:

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文件

$ N2 k  i3 J( Z. `) p( z( D
4.2.9 PendSV_Handler重定义
2 J* V3 h2 u# s7 R$ Z

问题:

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文件


) ]5 D5 e4 K( L* N+ K/ M: w4.2.10 main入口在哪里6 H  H0 A4 F; k

" k3 R( E& b, h0 d2 {" k- s

问题:

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

原因分析:

  • AliOS Things之前版本是放在具体的应用中,rhinorun.c中
    ) t6 j2 p$ I" h5 m2 ?
  • int main(void)
    : B, y% V/ d! D, M
  • 2.1.0 开始放在AliOS-Things\platform\mcu\stm32l4xx_cube\aos\aos.c,放在通用库中,因此应用层代码可以统在application_start()处理& \6 p# W) h, r* [# Z9 _( d, |

8 ^7 A3 _4 Z+ W1 {/ _" ^) ]/ ]4.2.11未定义aos api接口文件
  v% ?! Z7 c! H- L- K' o, Q

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_free (referred from armcc_libc.o).
" d' z" o" b0 S# HSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_malloc (referred from armcc_libc.o).+ b- {  M; n1 E7 C6 w# U
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_realloc (referred from armcc_libc.o).7 b$ r: y- Y( I/ F: f
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_init (referred from aos.o).
7 ?( o( `, Y, ?  V" a. l  }* q! `STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_start (referred from aos.o).
. U* H- }2 m+ H: z" ]4 p' _STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_msleep (referred from helloworld.o).
5 \! Z  o. Q' _' }STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_free (referred from hal_uart_stm32l4.o).
- N% o  h9 w% ]STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_is_valid (referred from hal_uart_stm32l4.o).+ t2 T# d4 _/ |" c) i
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_lock (referred from hal_uart_stm32l4.o).# f0 v1 Z2 C' D% `1 C
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_new (referred from hal_uart_stm32l4.o).% i& Z: F. p! k, o$ D; `  X
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_unlock (referred from hal_uart_stm32l4.o).
, ^1 U% _/ K/ H2 q3 {& QSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_free (referred from hal_uart_stm32l4.o).
5 ~# _; }) d) |) ^4 F! \/ aSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_is_valid (referred from hal_uart_stm32l4.o).+ @$ z) T  K1 _  {& b) ]
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_new (referred from hal_uart_stm32l4.o).
: u8 Z. }, H0 F$ bSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_signal (referred from hal_uart_stm32l4.o).- A- A; P9 D1 r  f& k
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_wait (referred from hal_uart_stm32l4.o).

( Y) A( i1 ~) }2 M

原因:

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

解决方式:

增加osal\aos\rhino.c文件9 z" j  N! y+ D6 q2 y


- K* F2 P  B1 m1 m' @9 u3 D' b( p4.2.12 内核初始化文件未定义/ E" C4 b4 _( X% C# I& D( y

问题:

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

解决方式:

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

2 h7 }) l  }! E
4.2.13 wifi.h文件未定义3 d0 M/ J/ M7 o9 p

问题:

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

解决方式

增加路径 …\include\network

& ^' l2 z, Q) w; i- w
4.2.14 启动文件.s文件未定义# _) q. _+ j6 X0 j: }* x* O9 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


" K! A* a6 ~* ]1 k8 R4 C, a# ?! O4.2.15 port_s.S汇编代码嵌入C代码异常- g, e6 J9 R" _, S

问题:
' k* ?& R7 J: l# ?% L- i- e

port_s.S中引入了宏语言
1 W. q+ s8 N+ Y- F) x
. p4 ~2 v! m8 L原因:

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

解决方式:

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


9 \- U! B3 F2 r# V- I" c. y5 参考1 A! `; ]/ Q5 A! ?9 B- Q
7 ]. c- K/ v) M

. s: s5 H( g% E0 [7 o6 e  D
5 N2 B" f" t5 g5 O( E' E7 ?" p8 M
8 B. K4 U) y1 Z4 x% v5 X' {
. N# `- K+ Y4 P" V* ?0 a* ^
8 p1 P) n1 X9 i" K2 H) T( ]9 H

AliOS-Things2.1.0-helloworld.zip

下载

6.89 MB, 下载次数: 8

mdk+stm32l4

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

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版