liteos C++支持(十七)
时间:2019-06-18
本文章向大家介绍liteos C++支持(十七),主要包括liteos C++支持(十七)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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);
......
}
原文地址:https://www.cnblogs.com/linhaostudy/p/11047449.html
- Python的dict实现原理及与Java的比较探究
- 关于位域如何节省内存(C++)
- mysql的小知识点(关于数据库的导入导出 对于windows)
- Python网络编程中的套接字名和DNS解析
- hdu 4009 Transfer water(最小型树图)
- NumPy二元运算的broadcasting机制
- md5算法原理一窥(其一)
- 实现属于自己的TensorFlow(一) - 计算图与前向传播
- 基于Sanic的微服务基础架构
- hdu 3038 How Many Answers Are Wrong ( 带 权 并 查 集 )
- Java 基础知识点(必知必会其二)
- Java 基础知识点(必知必会其一)
- PyQt5 GUI应用程序工具包入门(3)—信号槽
- web基础之hibernate(一篇)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端基础:ECMAScript 6
- 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
- 前端基础:Boostrap
- 设计模式(10)[JS版]-JavaScript如何实现组合模式???
- JavaWeb - Servlet:基本概念,HTTP 协议,Tomcat 服务器
- 漫画:设计模式之 “工厂模式”
- 设计模式(11)[JS版]-JavaScript中的注解之装饰器模式
- JavaWeb - Servlet:重定向和转发,状态管理
- 设计模式(12)[JS版]--JavaScript必会设计模式之外观模式(Façade Pattern)
- JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式
- kill -9 导致 Kakfa 重启失败的惨痛经历!
- 图解 DataX 核心设计原理
- 不会吧不会吧,你不会还不知道这些提高JS代码质量的骚操作吧?
- Flask架站基础篇(一)--环境配置
- Flask架站基础篇(三)--Flask生成文件内容和文件夹详解