liteos C++支持(十七)

1 概述

1.1 基本概念

C++作为目前使用最广泛的编程语言之一,支持类、封装、重载等特性,是在C语言基础上开发的一种面向对象的编程语言。

1.2 运作机制

STL(Standard Template Library)标准模板库,是一些“容器”的集合,也是算法和其他一些组件的集合。其目的是标准化组件,使用标准化组件后就可以不用重新开发,直接使用现成的组件。

2 开发指导

2.1 功能

功能分类接口名描述
使用C++特性的前置条件LOS_CppSystemInitC++构造函数初始化

2.2 开发流程

使用C++特性之前,需要调用函数LOS_CppSystemInit,实现C ++ 构造函数初始化。

其中被初始化的构造函数存在init_array这个段中,段区间通过变量__init_array_start__、 __init_array_end__传递。

由于在分散加载应用场景下, C++ 初始化中涉及到的相关代码、数据段加载的时机会有所不同,所以在用户开启和不开启分散加载特性这两种情况下, C++ 初始化函数LOS_CppSystemInit的调用有所不同。

不开启分散加载特性
  • 如果用户在分散加载的快速启动阶段需要调用相关C++ 代码,则用户需要在该阶段调用C++ 代码之前以BEFORE_SCATTER参数如下调用LOS_CppSystemInit:
LOS_CppSystemInit((unsigned long)&__init_array_start__, (unsigned long)&__init_array_end__,BEFORE_SCATTER);
参数参数说明
init_array_start起始段
init_array_end结束段
BEFORE_SCATTER表示用户是在分散加载快速启动阶段调用的LOS_CppSystemInit

在分散加载的非快速启动阶段再以AFTER_SCATTER参数如下调用LOS_CppSystemInit:

LOS_CppSystemInit((unsigned long)&__init_array_start__, (unsigned long)&__init_array_end__, AFTER_SCATTER);
参数参数说明
init_array_start起始段
init_array_end结束段
AFTER_SCATTER表示用户是在分散加载非快速启动阶段调用的LOS_CppSystemInit
  • 如果用户在分散加载的快速启动阶段无须调用相关C++代码,除了使用以上的方式在快速启动阶段前和非快速启动阶段前分别调用LOS_CppSystemInit外,用户还可以在分散加载的非快速启动阶段,分别以BEFORE_SCATTER和AFTER_SCATTER参数连续两次调用LOS_CppSystemInit。
LOS_CppSystemInit((unsigned long)&__init_array_start__, (unsigned long)&__init_array_end__,BEFORE_SCATTER);

LOS_CppSystemInit((unsigned long)&__init_array_start__, (unsigned long)&__init_array_end__,AFTER_SCATTER);

或者以NO_SCATTER为参数调用一次LOS_CppSystemInit:

LOS_CppSystemInit((unsigned long)&__init_array_start__, (unsigned long)&__init_array_end__,NO_SCATTER);
调用C库函数

在C++中调用C程序的函数,注意在声明该函数的时候增加如下语句:

extern "C"

3 注意事项

  • Huawei LiteOS暂不支持C++异常机制、 RTTI。
  • Huawei LiteOS中, C++暂不支持I/O字符流、 I/O文件流等相关操作。

4 编程实例

4.1 实例描述

在代码初始化中,进行C++ 构造函数初始化,进而让程序可以使用C++特性。由于此处使用分散加载特性,所以需两次调用LOS_CppSystemInit

4.2 编程实例

void app_init(void)
{
    ......
    /* 分散加载快速启动阶段C++初始化 */
    LOS_CppSystemInit((UINT32)&__init_array_start__, (UINT32)&__init_array_end__,
    BEFORE_SCATTER);
    /* 分散加载 */
    LOS_ScatterLoad(0x100000, flash_read, NAND_READ_ALIGN_SIZE);
    /* 分散加载非快速启动阶段C++初始化 */
    LOS_CppSystemInit((UINT32)&__init_array_start__, (UINT32)&__init_array_end__,
    AFTER_SCATTER);
    ......
}

转载于:https://www.cnblogs.com/linhaostudy/p/11047449.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值