• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

liteosC++支持(十七)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1 概述

1.1 基本概念

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

1.2 运作机制

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

2 开发指导

2.1 功能

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

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);
    ......
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
初尝C# 连接本地数据存储 SQLite发布时间:2022-07-13
下一篇:
[叩响C#之门]第1章初识编程1.6数据和内存发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap