[feat] remove pmem_heap

This commit is contained in:
zhji 2025-07-05 17:48:58 +08:00
parent 78447ffd81
commit cd3c5062f7
8 changed files with 15 additions and 283 deletions

View File

@ -1,7 +1,3 @@
if(CONFIG_FREERTOS)
add_definitions(-DCONFIG_FREERTOS)
endif()
enable_language(ASM)
add_library(sdk STATIC)

View File

@ -13,8 +13,13 @@ target_link_libraries(${TARGET} INTERFACE printf)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/os os)
target_link_libraries(${TARGET} INTERFACE os)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/shell shell)
target_link_libraries(${TARGET} INTERFACE shell)
if (${CONFIG_SHELL})
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/shell shell)
target_link_libraries(${TARGET} INTERFACE shell)
set(CONFIG_TLSF 1)
endif()
if (${CONFIG_TLSF})
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/mm mm)

View File

@ -32,7 +32,6 @@
****************************************************************************/
struct mem_heap_s g_kmemheap;
struct mem_heap_s g_pmemheap;
/****************************************************************************
* Private Function Prototypes
@ -125,23 +124,6 @@ void *kcalloc(size_t size, size_t len)
return port_calloc(KMEM_HEAP, size, len);
}
/****************************************************************************
* Name: pmem_init
*
* Description:
* Allocate memory from the user heap.
*
* Input Parameters:
*
****************************************************************************/
void pmem_init(void *heapstart, size_t heapsize)
{
MEM_LOG("Heap: start=%p size=%u\r\n", heapstart, heapsize);
port_mem_init(PMEM_HEAP, heapstart, heapsize);
}
/****************************************************************************
* Name: malloc
*
@ -160,7 +142,7 @@ void *malloc(size_t size)
{
MEM_LOG("malloc %d\r\n", size);
return port_malloc(PMEM_HEAP, size);
return port_malloc(KMEM_HEAP, size);
}
/****************************************************************************
@ -180,7 +162,7 @@ void *malloc(size_t size)
void *realloc(void *old, size_t newlen)
{
return port_realloc(PMEM_HEAP, old, newlen);
return port_realloc(KMEM_HEAP, old, newlen);
}
/****************************************************************************
@ -199,7 +181,7 @@ void *realloc(void *old, size_t newlen)
void *calloc(size_t size, size_t len)
{
return port_calloc(PMEM_HEAP, size, len);
return port_calloc(KMEM_HEAP, size, len);
}
/****************************************************************************
@ -217,7 +199,7 @@ void *calloc(size_t size, size_t len)
void *memalign(size_t align, size_t size)
{
return port_malloc_align(PMEM_HEAP, align, size);
return port_malloc_align(KMEM_HEAP, align, size);
}
/****************************************************************************
@ -233,7 +215,7 @@ void free(void *addr)
{
MEM_LOG("free %p\r\n", addr);
port_free(PMEM_HEAP, addr);
port_free(KMEM_HEAP, addr);
}
@ -253,54 +235,3 @@ uint32_t kfree_size(void)
return info.free_size;
}
uint32_t pfree_size(void)
{
#if defined(CONFIG_PSRAM) && defined(BL616) // only for bl618
struct meminfo info;
port_mem_usage(PMEM_HEAP, &info);
return info.free_size;
#else
return 0;
#endif
}
#ifdef CONFIG_SHELL
#include <shell.h>
int cmd_free(int argc, char **argv)
{
const char *Header = "total free alloc mxblk frnode alnode \r\n";
struct meminfo info;
char *mem;
mem = malloc(64);
port_mem_usage(KMEM_HEAP, &info);
snprintf(mem, 64, "%-8d%-8d%-8d%-8d%-8d%-8d\r\n", info.total_size, info.free_size, info.used_size, info.max_free_size,
info.free_node, info.used_node);
printf(Header);
printf(mem);
free(mem);
#if defined(CONFIG_PSRAM) && defined(BL616) // only for bl618
mem = malloc(64);
port_mem_usage(PMEM_HEAP, &info);
snprintf(mem, 64, "%-8d%-8d%-8d%-8d%-8d%-8d\r\n", info.total_size, info.free_size, info.used_size, info.max_free_size,
info.free_node, info.used_node);
printf(Header);
printf(mem);
free(mem);
#endif
return 0;
}
SHELL_CMD_EXPORT_ALIAS(cmd_free, free, show memory usage);
#endif

View File

@ -48,11 +48,6 @@
#define MEM_IS_VALID(heap) ((heap) != NULL && (heap)->mem_impl != NULL)
#define KMEM_HEAP &g_kmemheap
#if defined(CONFIG_PSRAM) && (!defined(CONFIG_HEAP_ALWAYS_ON_KMEM))
#define PMEM_HEAP &g_pmemheap
#else
#define PMEM_HEAP &g_kmemheap
#endif
/****************************************************************************
* Public Types
@ -89,7 +84,6 @@ extern "C" {
#endif
EXTERN struct mem_heap_s g_kmemheap;
EXTERN struct mem_heap_s g_pmemheap;
/****************************************************************************
* Public Function Prototypes
@ -101,9 +95,6 @@ void *kcalloc(size_t size, size_t len);
void kfree(void *addr);
uint32_t kfree_size(void);
void pmem_init(void *heapstart, size_t heapsize);
uint32_t pfree_size(void);
/* private api for mm*/
void port_mem_init(struct mem_heap_s *heap, void *heapstart, size_t heapsize);

View File

@ -7,15 +7,6 @@ add_library(${TARGET} STATIC ${FILELIST})
target_include_directories(${TARGET} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
if(CONFIG_FREERTOS)
target_sources(${TARGET} PRIVATE shell_freertos.c)
endif()
target_compile_definitions(${TARGET} PRIVATE -DCONFIG_SHELL)
if(CONFIG_SHELL_EXEC_THREAD)
target_compile_definitions(${TARGET} PRIVATE -DCONFIG_SHELL_EXEC_THREAD)
endif()
if(CONFIG_SHELL_CMD_SIZE)
target_compile_definitions(${TARGET} PRIVATE -DSHELL_CMD_SIZE=${CONFIG_SHELL_CMD_SIZE})
endif()

View File

@ -1,183 +0,0 @@
#include "shell.h"
#include <FreeRTOS.h>
#include "semphr.h"
#include "ring_buffer.h"
#include "bflb_uart.h"
#include "mem.h"
#if defined(CONFIG_SHELL_EXEC_THREAD) && CONFIG_SHELL_EXEC_THREAD
static int shell_exec_argc;
static char *shell_exec_argv[SHELL_ARG_NUM + 1];
static char shell_exec_line[SHELL_CMD_SIZE];
static ptrdiff_t shell_exec_line_diff;
TaskHandle_t shell_exec_handle;
static ATTR_NOCACHE_RAM_SECTION volatile bool shell_exec_end = true;
static void shell_exec_task(void *pvParameters)
{
shell_exec_end = false;
__ASM volatile("fence");
((cmd_function_t)(pvParameters))(shell_exec_argc, shell_exec_argv);
shell_exec_end = true;
__ASM volatile("fence");
vTaskDelete(shell_exec_handle);
shell_exec_handle = NULL;
}
void shell_dup_line(char *cmd, uint32_t length)
{
memcpy(shell_exec_line, cmd, length + 1);
shell_exec_line_diff = shell_exec_line - cmd;
}
void shell_abort_exec(int sig)
{
(void)sig;
if (shell_exec_end == false) {
shell_exec_end = true;
__ASM volatile("fence");
vTaskDelete(shell_exec_handle);
shell_exec_handle = NULL;
}
}
int shell_start_exec(cmd_function_t func, int argc, char *argv[])
{
BaseType_t xReturned;
shell_abort_exec(SHELL_SIGINT);
shell_exec_argc = argc;
for (uint8_t i = 0; i < argc; i++) {
shell_exec_argv[i] = argv[i] + shell_exec_line_diff;
}
shell_exec_argv[argc] = NULL;
__ASM volatile("fence");
xReturned = xTaskCreate(shell_exec_task, (char *)"shell_exec_task", SHELL_EXEC_THREAD_STACK_SIZE, func, SHELL_EXEC_THREAD_PRIO, &shell_exec_handle);
if (xReturned == pdPASS) {
return 0;
} else {
shell_exec_end = true;
return -1;
}
}
#endif
static TaskHandle_t shell_handle;
SemaphoreHandle_t sem_shell = NULL;
Ring_Buffer_Type shell_rb;
uint8_t shell_buffer[512];
void shell_release_sem(void)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if (xPortIsInsideInterrupt()) {
int ret = xSemaphoreGiveFromISR(sem_shell, &xHigherPriorityTaskWoken);
if (ret == pdPASS) {
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
} else {
xSemaphoreGive(sem_shell);
}
}
struct bflb_device_s *uart_shell = NULL;
void uart_shell_isr(int irq, void *arg)
{
uint32_t intstatus = bflb_uart_get_intstatus(uart_shell);
if (intstatus & UART_INTSTS_RX_FIFO) {
while (bflb_uart_rxavailable(uart_shell)) {
Ring_Buffer_Write_Byte(&shell_rb, bflb_uart_getchar(uart_shell));
}
shell_release_sem();
}
if (intstatus & UART_INTSTS_RTO) {
while (bflb_uart_rxavailable(uart_shell)) {
Ring_Buffer_Write_Byte(&shell_rb, bflb_uart_getchar(uart_shell));
}
shell_release_sem();
bflb_uart_int_clear(uart_shell, UART_INTCLR_RTO);
}
}
static void shell_task(void *pvParameters)
{
uint8_t data;
uint32_t len;
bflb_uart_feature_control(uart_shell, UART_CMD_CLR_RX_FIFO, 0);
bflb_uart_rxint_mask(uart_shell, false);
bflb_irq_attach(uart_shell->irq_num, uart_shell_isr, NULL);
bflb_irq_enable(uart_shell->irq_num);
while (1) {
if (xSemaphoreTake(sem_shell, portMAX_DELAY) == pdTRUE) {
len = Ring_Buffer_Get_Length(&shell_rb);
for (uint32_t i = 0; i < len; i++) {
Ring_Buffer_Read_Byte(&shell_rb, &data);
shell_handler(data);
}
}
}
}
void shell_init_with_task(struct bflb_device_s *shell)
{
vSemaphoreCreateBinary(sem_shell);
uart_shell = shell;
Ring_Buffer_Init(&shell_rb, shell_buffer, sizeof(shell_buffer), NULL, NULL);
shell_init();
xTaskCreate(shell_task, (char *)"shell_task", SHELL_THREAD_STACK_SIZE, NULL, SHELL_THREAD_PRIO, &shell_handle);
}
void shell_exe_cmd(uint8_t *cmd, uint16_t len)
{
Ring_Buffer_Write(&shell_rb, cmd, len);
shell_release_sem();
}
static void ps_cmd(int argc, char **argv)
{
char *pcWriteBuffer, *info;
const char *const pcHeader = "State Priority Stack # Base\r\n********************************************************\r\n";
BaseType_t xSpacePadding;
info = malloc(1536);
if (NULL == info) {
return;
}
pcWriteBuffer = info;
/* Generate a table of task stats. */
if (strlcpy(pcWriteBuffer, "Task", 1536) >= 1536)
printf("[OS]: strlcpy truncated \r\n");
pcWriteBuffer += strlen(pcWriteBuffer);
/* Minus three for the null terminator and half the number of characters in
"Task" so the column lines up with the centre of the heading. */
for (xSpacePadding = strlen("Task"); xSpacePadding < (configMAX_TASK_NAME_LEN - 3); xSpacePadding++) {
/* Add a space to align columns after the task's name. */
*pcWriteBuffer = ' ';
pcWriteBuffer++;
/* Ensure always terminated. */
*pcWriteBuffer = 0x00;
}
if (strlcpy(pcWriteBuffer, pcHeader, 1536 - (pcWriteBuffer - info)) >=
1536 - (pcWriteBuffer - info))
printf("[OS]: strlcpy truncated \r\n");
vTaskList(pcWriteBuffer + strlen(pcHeader));
printf("\r\n");
printf(info);
free(info);
}
SHELL_CMD_EXPORT_ALIAS(ps_cmd, ps, shell ps);

View File

@ -1 +1 @@
set(CONFIG_TLSF 1)
set(CONFIG_SHELL 1)

View File

@ -57,6 +57,7 @@ cmake_definition+= -DEXAMPLE_BASE_DIR=$(EXAMPLE_BASE_DIR)
cmake_definition+= -DCONFIG_FREERTOS=$(CONFIG_FREERTOS)
cmake_definition+= -DCONFIG_TLSF=$(CONFIG_TLSF)
cmake_definition+= -DCONFIG_SHELL=$(CONFIG_SHELL)
FINAL_NAME_PRE := $(EXAMPLE_BASE_DIR)/build/$(EXAMPLE_NAME)
@ -85,7 +86,7 @@ build:Makefile
$(CMAKE) -S . -B build -G "Unix Makefiles" $(cmake_definition)
$(MAKE) -C build -j
clean::
clean:
$(RM) build
.PHONY:post build clean