mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-16 12:02:11 +02:00
docs: Add more info to the internal design
This commit is contained in:
@ -2,11 +2,58 @@
|
||||
|
||||
## Design decisions
|
||||
|
||||
* Use C++ (lambdas) wit C API
|
||||
* Use C++ (lambdas, templates) with additional C API
|
||||
|
||||
| esp-modem in C | esp-modem in C++ |
|
||||
|----------------|---------------|
|
||||
```
|
||||
+2282
|
||||
-3908
|
||||
```
|
||||
|
||||
* Use exceptions (implement nothrow? possibly using `assert()`)
|
||||
* Initializes and allocates in the constructor (might throw)
|
||||
|
||||
| exceptions off | exceptions on |
|
||||
|----------------|---------------|
|
||||
```
|
||||
Difference is counted as <CURRENT> - <REFERENCE>, i.e. a positive number means that <CURRENT> is larger.
|
||||
Total sizes of <CURRENT>: <REFERENCE> Difference
|
||||
DRAM .data size: 10996 bytes 10996
|
||||
DRAM .bss size: 12552 bytes 12488 +64
|
||||
Used static DRAM: 23548 bytes ( 157188 available, 13.0% used) 23484 +64 ( -64 available, +0 total)
|
||||
Used static IRAM: 54145 bytes ( 76927 available, 41.3% used) 54093 +52 ( -52 available, +0 total)
|
||||
Flash code: 603979 bytes 595551 +8428
|
||||
Flash rodata: 187772 bytes 177852 +9920
|
||||
Total image size:~ 869444 bytes (.bin may be padded larger) 850980 +18464
|
||||
```
|
||||
| exceptions on | RTTI on |
|
||||
|----------------|---------------|
|
||||
```
|
||||
Total sizes of <CURRENT>: <REFERENCE> Difference
|
||||
DRAM .data size: 10996 bytes 10996
|
||||
DRAM .bss size: 12552 bytes 12552
|
||||
Used static DRAM: 23548 bytes ( 157188 available, 13.0% used) 23548 ( +0 available, +0 total)
|
||||
Used static IRAM: 54145 bytes ( 76927 available, 41.3% used) 54145 ( +0 available, +0 total)
|
||||
Flash code: 605331 bytes 603979 +1352
|
||||
Flash rodata: 196788 bytes 187772 +9016
|
||||
Total image size:~ 879812 bytes (.bin may be padded larger) 869444 +10368
|
||||
```
|
||||
* Initializes and allocates in the constructor (might throw)
|
||||
- easier code with exceptions ON, with exceptions OFF alloc/init failures are not treated as runtime error (program aborts)
|
||||
* Implements different devices with template specialization
|
||||
* Specific device abstraction overrides methods, but does not use virtual function dispatch (modeled as `DCE<SpecificModule>`)
|
||||
- Specific device abstraction overrides methods, but does not use virtual function dispatch (modeled as `DCE<SpecificModule>`)
|
||||
- Use cases: Implement a minimal device (ModuleIf), add new AT commands (oOnly in compile time).
|
||||
- Possibly use Module with DTE only (no DCE, no Netif) for sending AT commands without network
|
||||
|
||||
Example:
|
||||
```
|
||||
class SIM7600: public GenericModule {
|
||||
using GenericModule::GenericModule;
|
||||
public:
|
||||
command_result get_module_name(std::string& name); // overrides, but is no virtual
|
||||
};
|
||||
```
|
||||
method `get_module_name()` reimplements the *same* method in `GenericModule`
|
||||
|
||||
## DCE collaboration model
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||
#define TRY_CATCH_RET_NULL(block) \
|
||||
try { block } \
|
||||
try { block \
|
||||
} catch (std::bad_alloc& e) { \
|
||||
ESP_LOGE(TAG, "Out of memory"); \
|
||||
return nullptr; \
|
||||
|
@ -11,6 +11,8 @@
|
||||
|
||||
struct PdpContext;
|
||||
|
||||
static const char *TAG = "modem_api";
|
||||
|
||||
std::shared_ptr<DTE> create_uart_dte(const esp_modem_dte_config *config)
|
||||
{
|
||||
TRY_CATCH_RET_NULL(
|
||||
|
Reference in New Issue
Block a user