STM32 + cJSON + FreeRTOS 에서 분석 하거나 출력 한 결과 가 NULL 인 문 제 를 해결 합 니 다.

1131 단어 FreeRTOS
하드웨어 플랫폼 STM32F103ZET 6 개발 도구 KEIL 5 작업 스 택 1024 프로그램 논리: 1 초 에 json 문자열 을 만 든 다음 직렬 로 보 냅 니 다.문제 설명: 처음 몇 분 이면 되 는데 그 후에 문제 가 생 겼 습 니 다. 매번 제 이 슨 을 구성 한 후에 cJSON 을 호출 합 니 다.PrintUnformatted 함 수 는 항상 NULL 을 되 돌려 줍 니 다.시스템 도 무 너 지지 않 습 니 다.이 퀘 스 트 남 은 창고 888.
문제 조사, cJSON 추적PrintUnformatted 소스 코드 는 모든 노드 가 성공 적 으로 만 들 어 졌 으 나 마지막 으로 전체 json 문자열 을 구성 할 때 메모리 공간 을 신청 하 는 데 실 패 했 고 돌아 올 때마다 NULL 입 니 다.코드 의 메모리 방출 부분 을 검사 한 결과, 호출 된 free 함 수 는 FreeRTOS 를 사용 한 후 vPort Free 함 수 를 사용 하여 메모 리 를 방출 해 야 합 니 다.vPort Free 함수 로 수정 한 후 다시 테스트 합 니 다. 문제 가 다시 발생 하지 않 았 습 니 다.이에 특별히 기록 합 니 다
cJSON 에서 FreeRTOS 를 사용 하여 메모리 관리 에 관 한 수정 부분 은 다음 과 같 습 니 다. 수정 내용 은 모두 cjson. c 에 있 습 니 다.
    :
static void *(*cJSON_malloc)(size_t sz) = pvPortMalloc;
static void (*cJSON_free)(void *ptr) = vPortFree;
    :
void cJSON_InitHooks(cJSON_Hooks* hooks)
{
    if (!hooks) { /* Reset hooks */
        cJSON_malloc = pvPortMalloc;
        cJSON_free = vPortFree;
        return;
    }
	cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:pvPortMalloc;
	cJSON_free	 = (hooks->free_fn)?hooks->free_fn:vPortFree;
}

좋은 웹페이지 즐겨찾기