제퍼에서 제공하는 Memory management 기능은 여러 가지가 있는데
k_malloc()과 k_free() 정도만 알면 될 것 같아.
사실 나머지는 어디서 어떻게 사용되는지 잘 모르겠거든 ㅋㅋ
누가 잘 아는 사람은 알려주고 ㅎ
k_malloc()과 k_free()는 특별한 사용법이 없어.
malloc, free랑 동일하거든.
다만 prj.conf 에서
CONFIG_HEAP_MEM_POOL_SIZE(힙 크기) 만 설정해주면 끝이야.
굳이 이상한 예제를 만들어보자면
👇👇
//prj.conf
CONFIG_HEAP_MEM_POOL_SIZE=1024
//main.c
void main(void)
{
for(;;){
k_sleep(K_MSEC(1000));
uint8_t* ptr = k_malloc(100);
if(ptr){
printk("Memory Allocated: %x\n",ptr);
sprintf(ptr,"Hello World");
printk("%s\n",ptr);
k_free(ptr);
} else {
printk("Memory Not Allocated: %x\n",ptr);
}
}
}
1초 마다 memory 할당하고 sprintf로 문자열 삽입하고 printk로 출력했어.
뭐... 당연하게 잘 동작하겠지? ㅎ
이제 설정한 힙 크기(1024)보다 더 크게 malloc해보자구.
👇👇👇
//prj.conf
CONFIG_HEAP_MEM_POOL_SIZE=1024
//main.c
void main(void)
{
for(;;){
k_sleep(K_MSEC(1000));
uint8_t* ptr = k_malloc(1025);
if(ptr){
printk("Memory Allocated: %x\n",ptr);
sprintf(ptr,"Hello World");
printk("%s\n",ptr);
k_free(ptr);
} else {
printk("Memory Not Allocated: %x\n",ptr);
}
}
}
그러면 당연히? ㅎㅎ 실패하겠지!!
암튼 이런식으로 각 thread가 메모리를 "동적 할당"할 수 있는거지 ㅋㅋ
오랜만에 써보네 ㅋㅋ 동적 할당이라는 말을 ㅋㅋㅋ
Dynamic allocation!!
안녕!
2023.06.03 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #10. Time management
반응형
'임베디드 소프트웨어 > Zephyr' 카테고리의 다른 글
[nRF52840 + Zephyr] #11. Inter-task communication A (0) | 2023.06.03 |
---|---|
[nRF52840 + Zephyr] #10. Time management (0) | 2023.06.03 |
[nRF52840 + Zephyr] #8. Thread Management (0) | 2023.05.30 |
[nRF52840 + Zephyr] #7. RTOS 기본 (0) | 2023.05.24 |
[nRF52840 + Zephyr] #6. KConfig (0) | 2023.05.22 |