我从事嵌入式系统工作。一般情况下,我使用64-512 KB RAM和128-1024 KB闪存的小微控制器,如STM32。我喜欢使用C++来编程这些系统。但是我还没有找到一种可接受的方法来处理常见的数据结构,如栈、队列、映射等。
当然,STL包含了所有这些数据结构以及许多其他方便的功能,但大多数STL容器需要支持异常和动态内存分配,这在嵌入式编程中通常是不可取的。
我知道我们可以通过使用自定义分配器来避免这个问题,我们可以从静态对象池或类似的地方分配内存。然而,我认为主要的问题是我们无法可靠地处理这样一种情况:在向容器插入新元素时没有足够的分配空间。STL和其他类似STL的库只提供了两个选项:
换句话说,我想要像这样的东西:
有人有如何处理这件事情的建议吗?
当然,STL包含了所有这些数据结构以及许多其他方便的功能,但大多数STL容器需要支持异常和动态内存分配,这在嵌入式编程中通常是不可取的。
我知道我们可以通过使用自定义分配器来避免这个问题,我们可以从静态对象池或类似的地方分配内存。然而,我认为主要的问题是我们无法可靠地处理这样一种情况:在向容器插入新元素时没有足够的分配空间。STL和其他类似STL的库只提供了两个选项:
- asserts. Which means system fails when it's not enough allocated space.
callbacks. A bit better but isn't still convenient for me.
q.push(newElem); /* fails or just calls predefined callback * when not enough space in queue. */
换句话说,我想要像这样的东西:
queue<uint32_t, 128> q;
// some code ...
queue::status sts = q.push(newElem);
if (sts != queue::OK)
LOG("Not enough space in queue\r\n");
// continue normal program execution ...
有人有如何处理这件事情的建议吗?