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
'프로그래밍 > Keil RTX' 카테고리의 다른 글
[C/Keil RTX] CAN 통신 (22) | 2023.01.03 |
---|---|
[C/RL-ARM KEIL] event 처리 구현 (60) | 2022.12.28 |
WDT이란? Watchdog이란? (32) | 2022.12.28 |
[C/RL-ARM KEIL] thread 대신 os_tsk_create 사용하기 (1) | 2022.12.01 |
[C/Keil RTX] GPIO INPUT 이벤트 처리 (IRQHandler) (0) | 2022.12.01 |
댓글