更新时间:2021-07-08 GMT+08:00
编程实例
实例描述
本实例实现了在Huawei LiteOS上运行C++的代码。
- 编写C++代码。
- 在运行C++代码之前,先在app_init函数里以NO_SCATTER参数调用LOS_CppSystemInit初始化C++构造函数。
- 在LOS_CppSystemInit之后调用编写好的C++代码。
编程示例
前提条件:通过make menuconfig使能C++支持。
C++代码实现如下:
#ifdef __cplusplus #if __cplusplus extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ using namespace std; class TestClass { public: TestClass(int arg); ~TestClass(void); void PrintTest(void); void StringTest(void); void MapTest(void); private: int intTest; string stringTest; map<string, int> mapTest; }; TestClass::TestClass(int arg) { cout << "TestClass is constructed here, arg = " << arg << endl; intTest = arg; } TestClass::~TestClass(void) { cout << "TestClass is destructed" << endl; } void TestClass::PrintTest(void) { cout << __FUNCTION__ << " enter" << endl; cout << " intTest = " << this->intTest << endl; } void TestClass::StringTest(void) { cout << __FUNCTION__ << " enter" << endl; string a("Lite"); string b("OS"); string c("LiteOS"); if (a != b) { cout << " " << a << " != " << b << endl; } a += b; if (a == c) { cout << " " << a << " == " << c << endl; } } void TestClass::MapTest(void) { cout << __FUNCTION__ << " enter" << endl; mapTest.insert(pair<string, int>("Huawei", 1)); mapTest.insert(pair<string, int>("LiteOS", 2)); mapTest.insert(pair<string, int>("Open", 3)); mapTest.insert(pair<string, int>("Source", 4)); cout << " show map key&value" << endl; for (auto &it : mapTest) { cout << " " << it.first << " " << it.second << endl; } mapTest["LiteOS"] = 8; /* 8: new value */ cout << " change value of \"LiteOS\" key" << endl; for (auto &it : mapTest) { cout << " " << it.first << " " << it.second << endl; } } void CppTestEntry(void) { cout << "LiteOS cpp sample start" << endl; TestClass test(123); test.PrintTest(); test.StringTest(); test.MapTest(); cout << "LiteOS cpp sample stop" << endl; } #ifdef __cplusplus #if __cplusplus } #endif /* __cplusplus */ #endif /* __cplusplus */
app_init中初始化C++构造函数后,调用C++代码,实现如下:
void app_init(void) { ...... /* 初始化C++构造函数 */ LOS_CppSystemInit((UINT32)&__init_array_start__, (UINT32)&__init_array_end__, NO_SCATTER); /* 调用C++代码 */ CppTestEntry(); ...... }
结果验证
运行CppTestEntry()函数,结果如下:
LiteOS cpp sample start TestClass is constructed here, arg = 123 PrintTest enter intTest = 123 StringTest enter Lite != OS LiteOS == LiteOS MapTest enter show map key&value Huawei 1 LiteOS 2 Open 3 Source 4 change value of "LiteOS" key Huawei 1 LiteOS 8 Open 3 Source 4 LiteOS cpp sample stop TestClass is destructed
完整实例代码
父主题: C++支持