美文网首页散文读书想法
超轻量操作系统OneOS-Lite对C++的支持

超轻量操作系统OneOS-Lite对C++的支持

作者: 罗蓁蓁 | 来源:发表于2021-11-08 10:39 被阅读0次

    简介

    c++组件是为了支持编译c++源文件。该组件把全局对象的构造函数放到了指定的段地址中,以支撑c++的正常使用与运行。

    因为OneOS-Lite是很精简的RTOS系统,因此提供的C++支撑比较简单。

    cpp_init.c源文件中,完成了C++系统的初始化工作:

    OS_WEAK int cpp_init(void)
    {
    
        typedef void(*pfunc)();
        extern pfunc __ctors_start__[];
        extern pfunc __ctors_end__[];
        pfunc *p;
    
        for (p = __ctors_start__; p < __ctors_end__; p++)
            (*p)();
    
        return 0;
    }
    OS_CMPOENT_INIT(cpp_init,OS_INIT_SUBLEVEL_LOW);
    

    其中的__ctors_start____ctors_end__在链接脚本中被指定位置:

    PROVIDE(__ctors_start__ = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array))
    PROVIDE(__ctors_end__ = .);
    

    可见,在cpp_init函数中,全局对象的构造函数就被一一的链接到了链接文件所分配到的段中。然后,OS_CMPOENT_INITOneOS-Lite组件初始化的宏,它会把cpp_init函数放到组件初始化的位置进行初始化工作。

    1. __ctors_start__:C++ 全局构造函数段的起始地址

    2. __ctors_end__:C++ 全局构造函数段的结束地址

    图形化配置

    (Top) → Components→ Cplusplus
    [*] cplusplus
    

    简单体验

    #include <iostream>  //包含头文件iostream
    using namespace std;  //使用命名空间std
    
    extern "C" 
    {
    int test(void);
    }
    int test( )
    {
        cout<<"This is a C++ program!";
        
        return 0;
    }
    

    编辑一个c++文件,并在main.c文件中,调用test函数,编译运行,既可以使用串口打印该信息。

    注意

    MicroLIB不支持c++,需要将optionsUse MicroLIB去掉勾选。

    支持c++会增大程序的ramflash

    最后,如果你需要使用到c++代码。那么,请在SConscript中,把cpp文件添加到编译系统中去。

    src = Glob('*.c') + Glob('*.cpp')
    

    关注&&联系

    gitee: https://gitee.com/cmcc-oneos/OneOS-Lite

    docs: https://oneos-lite.com/

    引用自:https://gitee.com/cmcc-oneos/OneOS-Lite/blob/dev/components/cplusplus/README.md

    相关文章

      网友评论

        本文标题:超轻量操作系统OneOS-Lite对C++的支持

        本文链接:https://www.haomeiwen.com/subject/siduzltx.html