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);
......
}
liteos C++支持(十七)的更多相关文章
- Kafka、RabbitMQ、RocketMQ、ActiveMQ 17 个方面综合对比
本文将从,Kafka.RabbitMQ.ZeroMQ.RocketMQ.ActiveMQ 17 个方面综合对比作为消息队列使用时的差异.(欢迎加入Java程序员群:630441304,一起学习交流会) ...
- 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...
- 消息中间件 kafka rabbitmq 选型差异
https://www.zhihu.com/question/43557507 https://baijiahao.baidu.com/s?id=1610644333184173190&wfr ...
- 综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
来源:http://t.cn/RVDWcfe 一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写 ...
- Kafka、RabbitMQ、RocketMQ、ActiveMQ
一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现 ...
- 学习 Spring (十七) Spring 对 AspectJ 的支持 (完结)
Spring入门篇 学习笔记 @AspectJ 的风格类似纯 java 注解的普通 java 类 Spring 可以使用 AspectJ 来做切入点解析 AOP 的运行时仍旧是纯的 Spring AO ...
- 学习Spring-Data-Jpa(十七)---对Web模块的支持
Spring-Data还提供了Web模块的支持,这要求Web组件Spring-MVC的jar包位于classpath下.通常通过使用@EnableSpringDataWebSupport注解来启用继承 ...
- Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知
1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...
- 我的MYSQL学习心得(十七) 复制
我的MYSQL学习心得(十七) 复制 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
随机推荐
- Matlab实现直方图均衡化
G=imread('aini555.jpg'); I=rgb2gray(G); J=histeq(I); %直方图均衡化,这一个函数就可以做到均衡化的效果 figure, subplot(),imsh ...
- bay——安装_Oracle 12C-RAC-Centos7.txt
★★★____★☆★〓〓〓〓→2019年6月26日10:29:42 bayaim-RAC ——搭建第4次VMware vSphere Client6.0 ----------------------- ...
- linux 的swap、swappiness及kswapd原理【转】
本文讨论的 swap基于Linux4.4内核代码 .Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑. 希望本文能让读者了解Linux对swap的使用大概是什么样子.阅读完 ...
- Linuxautofs自动挂载服务
autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统.将信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autof ...
- Linux下基于shell脚本实现学生信息管理系统
#该管理系统是参考两位博主(时间有点远了,我忘了,请博主看到后联系我)后自行修改添加的.登录过程还有很多不完善,我就抛砖引玉啦. 废话不多,直接上码! #!/bin/bash# 学生管理系统# @ve ...
- 前端常用的css代码
1.垂直居中对齐 .vc{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); } .vc{ position: ...
- 201871010102-常龙龙《面向对象程序设计(java)》第一周学习总结
博文正文开头:(3分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/p/11435127.html 这个作业的要求在哪里 https://e ...
- LeetCode解题笔记 - 3. Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- <Graph> Topological + Undirected Graph 310 Union Find 261 + 323 + (hard)305
310. Minimum Height Trees queue: degree为1的顶点 degree[ i ] : 和 i 顶点关联的边数. 先添加整个图,然后BFS删除每一层degree为1的节 ...
- Eclipse maven创建web项目报错Could not resolve archetype
1.下载http://repo1.maven.org/maven2/archetype-catalog.xml 通过eclipse下载和网页下载我这里都比较慢,最后用的迅雷下载 2.将本地xml文件配 ...