【发布时间】:2018-02-17 04:42:54
【问题描述】:
我正在使用 STM32F107VCT 处理器开发定制板。我正在使用 FreeRTOS 和 lwIP
我正在使用 tinyxml2 库并读取/写入 EEPROM 并遇到奇怪的损坏问题和崩溃。我怀疑我可能内存不足。我是相当新的嵌入式电子产品和 FreeRTOS,所以不确定我应该去哪里。
我像这样创建了几个线程:
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 512);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
osThreadDef(RfTask, StartRfTask, osPriorityNormal, 0, 700);
RfTaskHandle = osThreadCreate(osThread(RfTask), NULL);
osThreadDef(DiscoveryTask, StartDiscoveryTask, osPriorityNormal, 0, 256);
DisoveryTaskHandle = osThreadCreate(osThread(DiscoveryTask), NULL);
这是我的一些与堆/堆栈相关的定义
FreeRTOS.h
define configTOTAL_HEAP_SIZE ((size_t)1024*24)
Flash.id
_estack = 0x20010000; /* end of RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x200; /* required amount of stack */
我并没有真正理解堆/堆栈理论是什么,以及它与 flash.id 和 FreeRTOS.h 中的数字有何关系
有人能给我解释一下这一切是如何工作的,以及检查任务可用内存量等的任何方法吗?
如果需要,我可以在 gitlab 上分享我的代码
非常感谢
【问题讨论】: