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

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

[复制链接]
X-JING 发布时间:2019-9-26 06:10
1 前言6 L; @2 \5 _4 ^% Q4 |

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

  • AliOS Things 2.1.0代码仓库的组织架构说明
    2 o; ?; ?6 z5 C7 ]" r: {a. AliOS Things MDK开发调试方式
  • 基于STM32L与MDK搭建AliOS Things的软硬件开发环境搭建$ f6 {0 N! }9 m8 V$ a
    a. AliOS Things MDK工程生成方式
    ' D/ C6 u( a! I. G: zb. STM32L476RG-Nucleo的hello world MDK工程搭建实例! Y* g& P$ ]* y& M5 J
2 AliOS Things入门知识2.1 AliOS Things代码仓库的组织架构# `6 }5 b! `8 Y1 N* D

    AliOS Things源代码组织架构符合分层架构与组件化架构。' S/ H) W# C* P/ C9 H* l! H& Q

AliOS Things架构至下(层)而上(层),分别是
4 ?$ u- e/ D" M3 K, K
  • 板级支持包(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)
    $ Q! Z+ \9 H# j& k  @, ~* [

& K4 m- f/ M6 }0 i3 X6 l2.2 AliOS Things文件夹目录树& v' [- {( Z5 H* J) h+ M& X

    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


2 a: h1 |& L0 [- m. |9 S: y, y

# h$ R+ a( F6 r. ]
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 通用组件,主要有+ e4 h9 a. B9 I3 g
- linkkit4 T# {- c+ k  v8 O
- udata
. F0 D/ L' ~" D4 A& A  c, H- ulocation
. S2 d+ @/ ^0 e$ i1 r) U- uagent
AOS API
osal
AOS API,提供可供应用软件和中间件使用的API
安全组件
security
包括TLS,TFS, TEE在内的安全组件
应用驱动
drivers
该目录下包含了应用驱动代码,主要有
4 ^" R- Z3 ~# P# A7 z, N- sensor
7 I8 r! l! L( i/ g( x- sal
7 I% _3 j. I2 g- gprs
/ ]7 G4 X' w  [; z3 `/ O- wifi
网络连接
network
该目录下包含了当前支持的网络协议栈! w! ?4 O" V  \) F% G2 s
- bluetooth
5 c3 H$ v( t# n7 E! ^2 S- breeze
: K9 ^" Z& V+ I& D4 A& @- bt_host
; h/ z2 h6 n6 {2 |- bt_mesh6 [1 W6 ^  M0 _6 c$ @! ^8 R5 `
- canopen
0 H4 `- W# p3 _$ J0 `3 w- lwip/ w. k( g" d. Q* J0 L) M
- lorawan8 J" y- h3 q/ v3 T4 ]/ F  R
- umesh1 ^, r& U6 F, z4 Q
- nal
( j. f' h% X1 m- atparse/ a2 ^" @' J2 y  R, R% N1 e
- athost3 W6 `5 m; e! L9 L; c
- netmgr
! C5 A5 o' t% X) E- yloop" _) f0 Y: P& Q) T
- …
AOS内核
kernel
该目录下包含了Rhino、命令行(CLI)
HAL
board
实际硬件开发平台,包括评估板、用户自己的硬件平台等(如STM32L496G-Discovery)
BSP
platform
该目录下包含了mcu与arch文件夹
$ y' G6 f) y3 z3 W- mcu / H+ l. l( y' \4 m. k9 C
- 该目录主要存放厂商提供的芯片底层软件库代码(如STM32L4xx_cube库),主要由SoC供应商开发和维护,以及二进制文件,如系统启动、驱动、编译/链接脚本等。mcu下的目录结构按“厂商/芯片系列”进行区分0 Q- s/ ?3 k4 ]# o
- arch
) q9 K1 S# _, a' z: w- 主要存放硬件体系架构所需要的移植接口实现文件,如任务切换、启动、开关中断等(即arch/include/port.h中所定义的接口),硬件体系架构如arm、risc-v、linux、misp…
; {! U" s- g! k; [; [/ O/ R/ {- 示例(armv7m):- 头文件:arch/arm/armv7m/gcc/m4/port*.h,代码示例。
2 J7 e) s" p: g3 K( p- 源代码:arch/arm/armv7m/gcc/m4/下的.c文件和汇编文件,代码示例。
# z5 c/ M8 S! P% K/ o* S  _- 注:arch下的目录结构按CPU架构区分,请参照已有目录。
Tool
build
编译框架,包含了ucube.py、makefile、编译规则、编译py脚本等文件
Tool
tools
用于建立远程设备中心的testbed工具、doxygen生成文件

* d5 j9 ]: ]  G2.3 AliOS Things开发与调试方式
* z1 m3 `! Q/ O" M$ S- f* N" @& Z* L( P

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

8 R1 N' O$ ?, U& g# A: r
  • linux host模拟环境:适合于硬件无关的模块或者代码,可以使用gdb,valgrind等流行的工具
  • CLI环境:适合板上轻度调试,使用系统的各种内存调试工具
  • JTAG环境:适合板上调试,利用硬件调试能力与IDE功能(MDK\IAR\AOS Studio)本身提供的在线调试功能, Q* [$ G* M' L: t6 e3 I

" d1 D! r% {' |3 I7 m

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

: x# X% M7 O- ]
3 AliOS Things MDK环境搭建( ^( |( |8 _* v3 p2 N
; L, Y$ S+ j9 H9 S5 L3 E- g. A

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

AliOS Things uCube ≈ RT-Thread ENV (都是基于命令行的项目管理工具包)
( T& v' Y( V5 o" O4 U# V  U3 N+ A+ @目前这块RT-Thread支持的比较成熟,通过ENV工具的Scons快速编译生成KEIL工程,同时对于新的平台,也可以通过现有的文件,快速修改得到。

* E& r5 y- C' ~  I/ h2 p
3.1 aos-cube自动生成MDK
- t- q8 M- a7 w# o' }( N! V

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

  1. aos make mqttapp@b_l475e IDE=keil
    & Z4 ]; G1 T9 \* m+ p
  2. aos make mqttapp@b_l475e IDE=iar
复制代码

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

支持情况) e9 Q% T5 d' ~" C
  • 目前支持 b_l475e 和 startkit 两个board工程自动生成。其他stm32系列的自动生成的工程可能需要人为做一些修改。
  • 转化出的工程默认未开优化选项
  • 工程内存信息,可能与board实际的有所差别,需要完善
    " p+ R! y+ f* `0 F$ _
6 p! \2 }: F5 w) d% w
3.1.1 AliOS Things 2.1版本KEIL工程
8 x. v6 n( s6 C; l0 R9 S9 J- y/ t% D

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


2 V) g& ?0 f  N* V7 l3.2 手动新建MDK工程2 G: g% g! w2 \3 j  K. C

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

  • 从直接mcu文件夹中分离出board相关文件,放在新增加了board文件夹内,这样有利于共用mcu中的文件
  • kernel文件夹删去子文件夹core分类
  • arch增加了common文件夹,用来存放port_c.c
  • 新增了osal文件夹,用于存放aos api文件
    & Y. {  i, |# f& y
) k# s- E& x1 ]- u  l

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


6 E: P. \% f% F. b) W4 搭建AliOS Things第一个MDK工程6 R- Y. e0 f/ Y3 r3 h, S8 H% _1 s
4 o  [$ d' Z( U" `) r

     以手动搭建AliOS Things 2.1.0版本中 STM32L476RG-Nucleo的hello world MDK工程为例
4 n% Y6 Z! t2 b2 A& G首先直接拷贝之前版本的AliOS-Things\project\STM32L476RG-Nucleo\helloworld到2.1.0相同路径下面
  y( _2 U  {' B


6 a9 q+ Y" o6 n" y4.1 AliOS Things系统所需基础依赖文件0 S9 `1 D  R) s. J3 i" @  l

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

  • 具体应用文件/ K7 Q, W% a, v0 |
    • example
      ( X; [# }0 _( |- [
      • helloworld' D2 K: O) b; \( y$ q
  • AOS API文件,应用层或者中间件通过这层API接口访问内核+ O: `2 ]& G" f8 T& f; R' C
    • osal\aos1 S  P1 G$ I2 n; C2 Q/ C/ g0 e
      • rhino.c& _6 ~; e0 z# ^5 o& _* A
        • aos_init初始化入口
        • aos_start 内核启动入口
        • aos_msleep 系统延时
        • *aos_malloc、aos_free…2 c2 w, [9 }: ?3 \$ L0 x% L
  • 具体硬件平台文件% |1 U" }  R  \! k4 M* N% {& }
    • board\STM32L476RG-Nucleo$ t4 z# D0 k# K: B* ]
      • 启动文件startup_stm32l476xx_keil.s
      • 分散加载文件STM32L476RGTx_FLASH.sct" m# l2 E- I3 u5 r! C
    • board\STM32L476RG-Nucleo\aos
      ; n/ Q$ p# ]% C% u0 `! R
      • 内核特性移植与裁剪文件k_config.h,通过修改k_config.h来使能kernel的功能模块
        % @1 y* u2 x4 X0 H- Z' Q+ e6 [
  • 堆分配等文件1 c! Y7 O  c* E/ T+ x% U
    • utility\libc\compilers\armlibc\armcc_lib.c
      / t& k. B. q5 T0 s+ ?
  • 内核特性移植相关文件.soc_impl.c、aos.c
    3 R$ J3 D5 C4 D+ H( x% ~
    • platform\mcu\stm32l4xx\aos, z  C! p, A( ]* B& W/ x( M3 Z1 |
      • soc_impl.c里面必须要实现的是内存分配这块的配置g_mm_region
      • aos.c包含了main入口函数7 e, H9 ~: c' ]- I
  • 内核文件+ q5 I& N2 z* C0 e" E5 b6 ^
    • kenerl\rhino
      5 ~3 s( j* b7 M
      • 内核初始化文件2 S9 M7 ?0 U% A; r
        • kernel\rhino\core\init\aos_init.c
          ; o. e1 ^, `" a
  • 面向板级的HAL驱动文件' w0 w' h* [( d3 j' y# A
    • platform\mcu\stm32l4xx_cube\hal
      0 y  r0 e% ?$ s/ K
  • STM32L4 cube库文件
    2 x' _! }: ~: {+ a
    • platform\mcu\stm32l4xx_cube\Drivers\STM32L4xx_HAL_Driver\Src) M7 g) h7 v! ^  I* j; P
  • 硬件体系架构所需要的移植接口实现文件8 T  T" z# w& M6 W* m7 x
    • platform\arch\arm\armv7m\armcc\m4\port_s.S
    • platform\arch\arm\armv7m\common\port_c.c  Y3 ~. s0 L- D: ?1 a  H

2 x* R4 [$ g7 f! G) U' A4.2 可能遇到的问题
( K- D0 v! R% c" L1 J; r9 ^

     打开STM32L476RGTx.uvprojx工程,会发现有左边的工程文件很多感叹,主要是因为文件路径发生变化,可以对STM32L476RGTx.uvprojx使用文本编辑器打开(比如Sublime Text3…),将相关出现感叹号的文件替换为新版本的对应路径。2 P" L+ ?- N" h1 ]' P: |' ^4 r3 K
具体方法是:

  • 点击出现感叹号的文件,会弹出提示框,根据对应当前老版本的文件路径调整,然后修改为新版本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中修改的文件。如果修改顺利,则可以看到文件的感叹号已有消失了。' b% d; Y' ~# h* ^) x+ x% p


! d- n- ?% ?/ r& m$ B) p9 W  i( z

( M7 g( ?& o* u4 [4 u
4.2.1 core文件路径找不到 " ~7 F9 ]5 C8 `  l' s( r" @* Q9 [& @

错误原因:由于2.1.0删去了core文件夹 + y) l- \$ a; e8 g
解决方式:

\kernel\rhino\core

* N8 h- A  N0 [5 \6 m5 A
修改为. n3 P: }" q) f6 ^2 [( S: H
\kernel\rhino

% k. _" y9 I! h8 C7 M
4.2.2 soc_init.c路径找不到
& ~1 Z3 V' r( g" m" B- W! B

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

解决方式:

原始
, N" z% `8 F1 |( g# u# K\platform\mcu\stm32l4xx\src\STM32L476RG-Nucleo\helloworld, D; X  ?! u' i6 X  c- b
修改为
; f! ^2 N: I) E" j\board\stm32l476rg-nucleo\aos\

+ }0 ~2 ?" O! t* B
4.2.3 stm32库路径重命名
' C) S* r6 _+ }) d2 ]4 E$ W
* B9 Z# S0 W  `$ ~) L

错误原因:stm32库文件重命名9 T4 `: B, i% |6 `" P+ x  c
解决方式:

\mcu\stm32l4xx\Drivers\' O' t; o; A, S; h) X
修改为7 S- z% F4 F2 I0 d) h0 e2 h+ h
\mcu\stm32l4xx_cube\Drivers\

- O6 l) X, }) V# W0 l



' D4 L9 v+ l1 A

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


" _& F. ^9 X7 I7 K& ~/ J( d" L解决方式:

\platform\mcu\stm32l4xx\aos
8 b7 R. O3 c) `, k. f修改为' ~% O+ U% Z8 I5 ?. h! }  W
\platform\mcu\stm32l4xx_cube\aos\


+ J6 E$ w, n7 x; z9 F0 ~4.2.4 新增board文件夹
" ^/ A6 H- T) P8 U

# K& b0 M. i; |& ?
错误原因:新增board文件夹' v4 S& m# m5 v- X
解决方式:

\platform\mcu\stm32l4xx\src\STM32L476RG-Nucleo\修改为9 W7 H/ n' g8 b7 P2 O& Y( D
\board\stm32l476rg-nucleo\

3 S' n3 x8 ~% x, L( p8 O3 K$ B) X
4.2.5 新增arch common文件夹

/ b: Y6 T" `0 }/ }+ A8 ~

! n1 A" J! e* q) C& v$ F
错误原因:新增arch common- I  r) F2 o, ^7 w, C
解决方式:

\platform\arch\arm\armv7m\armcc\m4
. |* Z+ ?0 J  E( d1 K/ e+ k修改为
% ]8 g2 h# {  n3 F1 U$ M. c\platform\arch\arm\armv7m\common

4.2.6 头文件找不到' ^! Y/ [6 v. f& z: P- V9 A

问题:

…\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子路径& V* @$ i( H1 K0 Y% j; p' d
…\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子路径
5 S2 @' |' ~$ r, ^( W3 U8 w: L…\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子路径
( [9 C2 ~: T  X1 V…\platform\arch\arm\armv7m\common

5 |5 H5 T. ]. ~1 u* a  g


问题:

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

解决方式:

添加路径6 ?* V/ F$ C+ n  d7 f( k3 V
…\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

解决方式:

添加路径/ ^5 e4 O5 O# V2 r& a0 U- ^0 C( F
…\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文件未定义
, T7 d6 J  Y7 o1 \' }2 e) V

问题:

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

解决方式:
$ g0 k( Z  l1 k& J' Q5 x( S: m>在工程的Options选项中,重新设定.sct路径
+ K$ N* d2 J' j# ]0 ?/ m# }4 q

# T& P7 [& v3 k% O, e. E
4.2.8 SysTick_Handler重定义
$ w  G5 l. z" g% f/ R9 k

问题:

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


" f: C9 N+ _/ F$ \4 k0 M4.2.9 PendSV_Handler重定义4 K1 P" H$ h; a

问题:

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


. w' w. [) r( A* J4.2.10 main入口在哪里1 D" U* v' e* g. U+ k
- E/ N6 y: E( ]) X$ q- @

问题:

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

原因分析:

  • AliOS Things之前版本是放在具体的应用中,rhinorun.c中
    . X' o5 P4 E; h5 M& s; y, h
  • int main(void)3 B! c/ y( Z" X
  • 2.1.0 开始放在AliOS-Things\platform\mcu\stm32l4xx_cube\aos\aos.c,放在通用库中,因此应用层代码可以统在application_start()处理
    5 r! g( \9 d! h+ d" }2 Z+ Y
& }  J) F- e! D
4.2.11未定义aos api接口文件
) N: F, X' h+ y2 g% I

问题:

STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_free (referred from armcc_libc.o).
3 ?6 E7 G! Z8 [$ U9 }0 eSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_malloc (referred from armcc_libc.o).8 C8 B  d( q" q! A4 A+ x
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_realloc (referred from armcc_libc.o).
6 Y6 E) g3 F0 a* LSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_init (referred from aos.o)." w& ^: o% c/ J- @& F; e" G( @
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_start (referred from aos.o).3 Y* Z  }5 R, a/ y5 t# H
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_msleep (referred from helloworld.o).
* z8 g. \& w9 \9 O1 h; l  eSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_free (referred from hal_uart_stm32l4.o).
( ]0 b6 j0 O' }% x* O5 p3 G' L4 LSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_is_valid (referred from hal_uart_stm32l4.o).+ `* D; K5 s3 B' `
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_lock (referred from hal_uart_stm32l4.o).
2 z$ w7 N8 V) E6 E) a9 [STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_new (referred from hal_uart_stm32l4.o).
- K  {+ {: `( c8 |; hSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_mutex_unlock (referred from hal_uart_stm32l4.o).0 l  h0 v: P2 @; g2 @
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_free (referred from hal_uart_stm32l4.o).- t1 T! _( j5 H' r8 @* P( h
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_is_valid (referred from hal_uart_stm32l4.o).) j  _1 ^8 L* X+ i! K; C8 [
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_new (referred from hal_uart_stm32l4.o).2 k' c! Y4 T: Y- {
STM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_signal (referred from hal_uart_stm32l4.o).
# X3 z2 N5 O3 Y% E) \1 H1 ]8 w8 qSTM32L476RGTx\STM32L476RGTx.axf: Error: L6218E: Undefined symbol aos_sem_wait (referred from hal_uart_stm32l4.o).


+ x$ \  C9 w6 o! t" }( i

原因:

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

解决方式:

增加osal\aos\rhino.c文件
2 @2 g" t, q6 t+ s& @- p

# w, g# S& v, }" x( X
4.2.12 内核初始化文件未定义
- y% f$ z* h: X

问题:

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

解决方式:

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

9 u2 y' A+ x2 }3 r0 o! c+ S( Z
4.2.13 wifi.h文件未定义
! ?7 }! ~5 ?6 e; s: E

问题:

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

解决方式

增加路径 …\include\network


" t; x# W0 F4 v1 K. n' v" j8 G4.2.14 启动文件.s文件未定义
0 E: z. K5 K7 d. ?5 F  n

问题:

…\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

; \8 e$ t7 s1 x3 B% J
4.2.15 port_s.S汇编代码嵌入C代码异常
/ |( _3 h4 u+ K6 Y

问题:
% @+ x8 _& _! M5 ^1 ~9 u* I; v# t- w

port_s.S中引入了宏语言) I/ L& F" a) e% ^  I6 C
, l$ G! O& E1 D1 \* p
原因:

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

解决方式:

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

  S+ p" ]; B2 Q' n) B- y
5 参考
/ U- E4 Y4 Z) G' n  L$ f2 ^- {5 q* p+ H7 ~# Y6 l: F, i* R, I

0 y* Y" j6 U7 e
  o6 L3 }+ n" M  d5 W9 r+ y* X$ R/ ~7 D2 V3 U) T

; a/ i- a/ t' s# ^& p. O9 ?$ n% R! N/ |/ T

AliOS-Things2.1.0-helloworld.zip

下载

6.89 MB, 下载次数: 9

mdk+stm32l4

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版