[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