diff --git a/CMakeLists.txt b/CMakeLists.txt index 513447d..7498d81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,3 @@ -if(CONFIG_FREERTOS) - add_definitions(-DCONFIG_FREERTOS) -endif() - enable_language(ASM) add_library(sdk STATIC) diff --git a/component/CMakeLists.txt b/component/CMakeLists.txt index cf8d6e0..f8e1631 100644 --- a/component/CMakeLists.txt +++ b/component/CMakeLists.txt @@ -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) diff --git a/component/mm/mem.c b/component/mm/mem.c index 9b63db6..6dc71a6 100755 --- a/component/mm/mem.c +++ b/component/mm/mem.c @@ -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 - -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 diff --git a/component/mm/mem.h b/component/mm/mem.h index 0656156..0cca337 100755 --- a/component/mm/mem.h +++ b/component/mm/mem.h @@ -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); diff --git a/component/shell/CMakeLists.txt b/component/shell/CMakeLists.txt index 14322f0..97f692e 100755 --- a/component/shell/CMakeLists.txt +++ b/component/shell/CMakeLists.txt @@ -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() diff --git a/component/shell/shell_freertos.c b/component/shell/shell_freertos.c deleted file mode 100755 index a9f68b5..0000000 --- a/component/shell/shell_freertos.c +++ /dev/null @@ -1,183 +0,0 @@ -#include "shell.h" -#include -#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); diff --git a/example/shell/shell_no_os/proj.conf b/example/shell/shell_no_os/proj.conf index f823f8d..c1a262e 100644 --- a/example/shell/shell_no_os/proj.conf +++ b/example/shell/shell_no_os/proj.conf @@ -1 +1 @@ -set(CONFIG_TLSF 1) +set(CONFIG_SHELL 1) diff --git a/project.build b/project.build index 955d246..5ff019b 100644 --- a/project.build +++ b/project.build @@ -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