본문 바로가기
프로그래밍/Keil RTX

[C/RL-ARM KEIL] 포인터 사용하기 (malloc 대체)

by 채연2 2022. 12. 1.

keil에서 malloc을 사용하면 계속 hard fault error가 난다....

삽푸다가 결국 알아낸 방법.

rtx 함수를 이용하는 것이다!

 

 

// 1
#include <RTL.h>

// 2
typedef struct {
	PILOT_STATE m_state;
	
	PILOT_STATE (*GetState)(void);
	void (*SetState)(PILOT_STATE pstate);
} Pilot;

// 3
_declare_box(g_poolPilot, sizeof(Pilot), 1);

1 : RTL.h 함수 선언

2 : 사용하려는 포인터 구조체 선언

3 : _declare_box(pool 변수 이름, 포인터 구조체 사이즈, 포인터 개수)

 

 

 

위와 같이 전역으로 선언을 해줬으면, 초기화를 해주자.

// 1
Pilot* g_pilot;

void PilotInit(void)
{    
	// 2
	_init_box(g_poolPilot, sizeof(g_poolPilot), sizeof(g_pilot));

	// 3
	g_pilot = (Pilot *)_alloc_box(g_poolPilot);
}

1 : 포인터 변수 선언

2 : pool 초기화 - _init_box(생성한 pool 변수, pool size, 포인터 사이즈)

3 : 포인터 생성 - (구조체 포인터)_alloc_box(pool 변수);

 

 

위와 같이 하면 포인터를 사용할 수 있다!

요렇게 ^.^~

	g_pilot->m_state = PILOT_STATE_P12;
	g_pilot->GetState = GetPState;
	g_pilot->SetState = SetPState;
320x100

댓글