2017-09-08 36 views
1

STM32F107VCT 프로세서가있는 사용자 정의 보드에서 작업하고 있습니다. FreeRTOS를 사용하고 있습니다. & lwIPSTM32 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의 수치와의 관계는 무엇입니까?

누군가가 내게 어떻게 모든 것이 작동하는지에 대한 설명과 양을 확인하는 방법을 제공 할 수 있습니까? 작업에 사용할 수있는 RAM 등?

를 필요한 경우 내가 gitlab에 내 코드를 공유 할 수 있습니다

는 너무 감사

답변

0

이 lwIP 구성이 메모리를 사용하는 방법에 대해 언급 할 수는 없지만 까지 FreeRTOS에 관한 한 :

링커 스크립트에 정의 된 힙은 빌드에 heap_3.c를 포함 할 경우 FreeRTOS에서만 사용됩니다. FreeRTOS와 함께 제공되는 다른 모든 힙 구현은 정적으로 할당 된 배열에서 메모리를 가져옵니다. FreeRTOS 메모리 할당자를 사용하여 모든 메모리 할당이 완료되면 링커 스크립트에서 힙을 정의하면 사용하지 않을 RAM이 낭비됩니다. 자세한 내용은 http://www.freertos.org/a00111.html을 참조하십시오.

[on an STM32] 링커 스크립트로 정의 된 스택은 스케줄러가 시작되기 전에 main()에 의해 사용되며 스케줄러가 시작된 후에 인터럽트됩니다. FreeRTOS 작업은 각 작업이 만들어 질 때 자체 스택이 할당되므로 해당 스택을 사용하지 않습니다. xTaskCreate() 및 xTaskCreateStatic() API 함수에 대한 API 설명서를 참조하십시오. http://www.freertos.org/a00019.html

configassert()가 정의되어 있고 스택 오버플로 감지 기능이 켜져 있는지 확인하는 것이 좋습니다. "FreeRTOS"와 함께 해당 용어를 검색하면 해당 링크도 찾을 수 있습니다.