[C++] Add cplusplus component
This commit is contained in:
parent
0797e54f3f
commit
b84123b0b4
|
@ -0,0 +1,13 @@
|
|||
# C++ support for RT-Thread #
|
||||
|
||||
This is the C++ component in RT-Thread RTOS. In order to support C++ language, this component
|
||||
implement a basic environment, such as new/delete operators.
|
||||
|
||||
Because RT-Thread RTOS is used in embedded system mostly, there are some rules for C++ applications:
|
||||
1. DOES NOT use exception.
|
||||
2. DOES NOT use Run-Time Type Information (RTTI).
|
||||
3. Template is discouraged and it easily causes code text large.
|
||||
4. Static class variables are discouraged. The time and place to call their constructor function could not be precisely controlled and make multi-threaded programming a nightmare.
|
||||
5. Multiple inheritance is strongly discouraged, as it can cause intolerable confusion.
|
||||
|
||||
*NOTE*: For armcc compiler, the libc must be enable.
|
|
@ -0,0 +1,11 @@
|
|||
# RT-Thread building script for component
|
||||
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = Glob('*.cpp')
|
||||
CPPPATH = [cwd]
|
||||
|
||||
group = DefineGroup('CPlusPlus', src, depend = ['RT_USING_CPLUSPLUS'], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
|
@ -0,0 +1,27 @@
|
|||
#include <rtthread.h>
|
||||
#include "crt.h"
|
||||
|
||||
void *operator new(size_t size)
|
||||
{
|
||||
return rt_malloc(size);
|
||||
}
|
||||
|
||||
void *operator new[](size_t size)
|
||||
{
|
||||
return rt_malloc(size);
|
||||
}
|
||||
|
||||
void operator delete(void *ptr)
|
||||
{
|
||||
rt_free(ptr);
|
||||
}
|
||||
|
||||
void operator delete[] (void *ptr)
|
||||
{
|
||||
return rt_free(ptr);
|
||||
}
|
||||
|
||||
void __cxa_pure_virtual(void)
|
||||
{
|
||||
rt_kprintf("Illegal to call a pure virtual function.\n");
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef CRT_H_
|
||||
#define CRT_H_
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void *operator new(size_t size);
|
||||
void *operator new[](size_t size);
|
||||
|
||||
void operator delete(void * ptr);
|
||||
void operator delete[] (void *ptr);
|
||||
|
||||
extern "C" void __cxa_pure_virtual(void);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue