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

liteos C++支持(十七)的更多相关文章

  1. Kafka、RabbitMQ、RocketMQ、ActiveMQ 17 个方面综合对比

    本文将从,Kafka.RabbitMQ.ZeroMQ.RocketMQ.ActiveMQ 17 个方面综合对比作为消息队列使用时的差异.(欢迎加入Java程序员群:630441304,一起学习交流会) ...

  2. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...

  3. 消息中间件 kafka rabbitmq 选型差异

    https://www.zhihu.com/question/43557507 https://baijiahao.baidu.com/s?id=1610644333184173190&wfr ...

  4. 综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    来源:http://t.cn/RVDWcfe 一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写 ...

  5. Kafka、RabbitMQ、RocketMQ、ActiveMQ

    一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现 ...

  6. 学习 Spring (十七) Spring 对 AspectJ 的支持 (完结)

    Spring入门篇 学习笔记 @AspectJ 的风格类似纯 java 注解的普通 java 类 Spring 可以使用 AspectJ 来做切入点解析 AOP 的运行时仍旧是纯的 Spring AO ...

  7. 学习Spring-Data-Jpa(十七)---对Web模块的支持

    Spring-Data还提供了Web模块的支持,这要求Web组件Spring-MVC的jar包位于classpath下.通常通过使用@EnableSpringDataWebSupport注解来启用继承 ...

  8. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知

    1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...

  9. 我的MYSQL学习心得(十七) 复制

    我的MYSQL学习心得(十七) 复制 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. JS基础语法---预解析

    预解析:就是在解析代码之前   1. 预解析做什么事? 把变量的声明提前了----提前到当前所在的作用域的最上面 函数的声明也会被提前---提前到当前所在的作用域的最上面   举例: function ...

  2. iOS引导页(镂空效果)

    推荐使用SDK:pod 'EAFeatureGuideView' 温馨提示:(引导的图片图标需要私人订制的可以用自己的,让UI提供) 参考链接:https://www.jianshu.com/p/c9 ...

  3. 【React Native】进阶指南之一(特定平台、图片加载、动画使用)

    一.特定平台代码 React Native提供了两种方法来区分平台: 使用Platform模块: 使用特定平台扩展名: 1.Platform模块 React Native提供了一个检测当前运行平台的模 ...

  4. Spring Boot 2 单元测试

    开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 IDEA新建一个Spring Boot项目后,pom.xml默认包含了Web应用和单元测试两个依赖包.如下 ...

  5. oracle表空间相关统计查询

    部分转自 https://www.cnblogs.com/xwdreamer/p/3511047.html--查询表空间使用情况SELECT UPPER(F.TABLESPACE_NAME) &quo ...

  6. Django 模板变量之 forloop

    1. 模板变量之forloop.counter:从1开始自增1 模板代码如下: {% for row in v %} <tr> <td>{{forloop.counter}}& ...

  7. android tween animation合集

    自己写的一些tween animation动画xml文件,可用于activity切换,图片切换动画等 http://files.cnblogs.com/zj2012zy/anim.rar

  8. CCSpriteFrameCache的使用

    配置环境:win7+Cocos2d-x.2.0.3+VS2012 CCSpriteFrameCache是帧缓存类. 通过plist文件导入图片 CCSpriteFrameCache::sharedSp ...

  9. LRU hashMap(拉链) + 双向链表 java实现

    //基于 hash (拉链法) + 双向链表,LRUcache //若改为开放寻址,线性探测法能更好使用cpuCache public class LRU { private class Node { ...

  10. NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver ...

    显卡驱动找不到解决方案:亲测有效 step1:sudo apt-get install dkms step2:   sudo dkms install -m nvidia -v 390.129 nvi ...