From f4dc2b87e97cddda98b46e78496f87870b3afb8a Mon Sep 17 00:00:00 2001 From: MacRsh <1063220965@qq.com> Date: Thu, 25 May 2023 14:56:19 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E8=87=AA=E5=8A=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=AE=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/wch/driver/drv_adc.c | 2 +- bsp/wch/driver/drv_dac.c | 2 +- bsp/wch/driver/drv_gpio.c | 2 +- bsp/wch/driver/drv_spi.c | 2 +- bsp/wch/driver/drv_uart.c | 2 +- include/mrconfig.h | 15 +++++--- include/mrdef.h | 12 +++--- src/kservice.c | 78 +++++++++++++++++++++++++++------------ 8 files changed, 73 insertions(+), 42 deletions(-) diff --git a/bsp/wch/driver/drv_adc.c b/bsp/wch/driver/drv_adc.c index 41b1f08..ed96c86 100644 --- a/bsp/wch/driver/drv_adc.c +++ b/bsp/wch/driver/drv_adc.c @@ -130,6 +130,6 @@ mr_err_t mr_hw_adc_init(void) return MR_ERR_OK; } -INIT_BOARD_EXPORT(mr_hw_adc_init); +AUTO_INIT_DRIVER_EXPORT(mr_hw_adc_init); #endif \ No newline at end of file diff --git a/bsp/wch/driver/drv_dac.c b/bsp/wch/driver/drv_dac.c index 6fc982b..9f71128 100644 --- a/bsp/wch/driver/drv_dac.c +++ b/bsp/wch/driver/drv_dac.c @@ -122,6 +122,6 @@ mr_err_t mr_hw_dac_init(void) return MR_ERR_OK; } -INIT_BOARD_EXPORT(mr_hw_dac_init); +AUTO_INIT_DRIVER_EXPORT(mr_hw_dac_init); #endif \ No newline at end of file diff --git a/bsp/wch/driver/drv_gpio.c b/bsp/wch/driver/drv_gpio.c index 412e24d..5efbebf 100644 --- a/bsp/wch/driver/drv_gpio.c +++ b/bsp/wch/driver/drv_gpio.c @@ -307,6 +307,6 @@ mr_err_t mr_hw_gpio_init(void) return MR_ERR_OK; } -INIT_BOARD_EXPORT(mr_hw_gpio_init); +AUTO_INIT_DRIVER_EXPORT(mr_hw_gpio_init); #endif \ No newline at end of file diff --git a/bsp/wch/driver/drv_spi.c b/bsp/wch/driver/drv_spi.c index 5005380..a2fc07c 100644 --- a/bsp/wch/driver/drv_spi.c +++ b/bsp/wch/driver/drv_spi.c @@ -232,6 +232,6 @@ mr_err_t mr_hw_spi_init(void) return MR_ERR_OK; } -INIT_BOARD_EXPORT(mr_hw_spi_init); +AUTO_INIT_DRIVER_EXPORT(mr_hw_spi_init); #endif \ No newline at end of file diff --git a/bsp/wch/driver/drv_uart.c b/bsp/wch/driver/drv_uart.c index 955195f..cfe929c 100644 --- a/bsp/wch/driver/drv_uart.c +++ b/bsp/wch/driver/drv_uart.c @@ -382,6 +382,6 @@ mr_err_t mr_hw_uart_init(void) return MR_ERR_OK; } -INIT_BOARD_EXPORT(mr_hw_uart_init); +AUTO_INIT_DRIVER_EXPORT(mr_hw_uart_init); #endif \ No newline at end of file diff --git a/include/mrconfig.h b/include/mrconfig.h index 2699ea5..61e7201 100644 --- a/include/mrconfig.h +++ b/include/mrconfig.h @@ -16,9 +16,12 @@ //<---------------------------- Kernel --------------------------------------> #define MR_CONF_NAME_MAX 12 +#define MR_CONF_CONSOLE MR_CONF_ENABLE +#define MR_CONF_CONSOLE_BUFSZ 64 +#define MR_CONF_CONSOLE_NAME "uart1" //<<< Log >>> -#define MR_CONF_LOG_OUTPUT MR_CONF_DISABLE +#define MR_CONF_LOG_OUTPUT MR_CONF_ENABLE #define MR_CONF_LOG_BUFSZ 64 #define MR_CONF_LOG_ASSERT MR_CONF_ENABLE #define MR_CONF_LOG_LEVEL MR_CONF_LOG_LEVEL_DEBUG @@ -28,18 +31,18 @@ //<---------------------------- Device --------------------------------------> //<<< GPIO >>> -#define MR_CONF_PIN MR_CONF_DISABLE +#define MR_CONF_PIN MR_CONF_ENABLE //<<< SERIAL >>> -#define MR_CONF_SERIAL MR_CONF_DISABLE +#define MR_CONF_SERIAL MR_CONF_ENABLE #define MR_CONF_SERIAL_BUFSZ 64 //<<< SPI >>> -#define MR_CONF_SPI MR_CONF_DISABLE +#define MR_CONF_SPI MR_CONF_ENABLE //<<< I2C >>> #define MR_CONF_I2C MR_CONF_DISABLE //<<< ADC >>> -#define MR_CONF_ADC MR_CONF_DISABLE +#define MR_CONF_ADC MR_CONF_ENABLE //<<< DAC >>> -#define MR_CONF_DAC MR_CONF_DISABLE +#define MR_CONF_DAC MR_CONF_ENABLE //<<< TIMER >>> #define MR_CONF_TIMER MR_CONF_DISABLE diff --git a/include/mrdef.h b/include/mrdef.h index 462fb47..cac5989 100644 --- a/include/mrdef.h +++ b/include/mrdef.h @@ -26,7 +26,6 @@ #define mr_strncpy strncpy #define mr_memset memset #define mr_memcpy memcpy -#define mr_printf printf /* mr-library version information */ #define MR_LIBRARY_VERSION "0.0.2" @@ -143,13 +142,12 @@ typedef mr_int8_t mr_lock_t; /**< Type fo * Auto-Init */ typedef int (*init_fn_t)(void); -#define INIT_EXPORT(fn,level) \ - mr_used const init_fn_t _mr_init_##fn mr_section(".mri_fn."level) = fn +#define AUTO_INIT_EXPORT(fn,level) \ + mr_used const init_fn_t _mr_auto_init_##fn mr_section(".auto_init."level) = fn -#define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1") -#define INIT_DEV_EXPORT(fn) INIT_EXPORT(fn, "2") -#define INIT_ENV_EXPORT(fn) INIT_EXPORT(fn, "3") -#define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "4") +#define AUTO_INIT_DRIVER_EXPORT(fn) AUTO_INIT_EXPORT(fn, "1") +#define AUTO_INIT_DEVICE_EXPORT(fn) AUTO_INIT_EXPORT(fn, "2") +#define AUTO_INIT_MODULE_EXPORT(fn) AUTO_INIT_EXPORT(fn, "3") /** * Double-list diff --git a/src/kservice.c b/src/kservice.c index fa5c04f..1c44a4f 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -8,47 +8,75 @@ * 2023-04-23 MacRsh first version */ -#include +#include "mrlib.h" -static int mri_start(void) +static mr_device_t console_device = MR_NULL; + +static int start(void) { return 0; } -INIT_EXPORT(mri_start, "0"); +AUTO_INIT_EXPORT(start, "0"); -static int mri_board_start(void) +static int driver_state(void) { return 0; } -INIT_EXPORT(mri_board_start, "0.end"); +AUTO_INIT_EXPORT(driver_state, "0.end"); -static int mri_board_end(void) +static int driver_end(void) { return 0; } -INIT_EXPORT(mri_board_end, "1.end"); +AUTO_INIT_EXPORT(driver_end, "1.end"); -static int mri_end(void) +static int end(void) { return 0; } -INIT_EXPORT(mri_end,"6.end"); +AUTO_INIT_EXPORT(end, "3.end"); void mr_auto_init(void) { volatile const init_fn_t *fn_ptr; - /* auto-init-board */ - for (fn_ptr = &_mr_init_mri_start; fn_ptr < &_mr_init_mri_board_end; fn_ptr++) + /* auto-init */ + for (fn_ptr = &_mr_auto_init_start; fn_ptr < &_mr_auto_init_end; fn_ptr ++) { (*fn_ptr)(); } +} - /* auto-init-other */ - for (fn_ptr = &_mr_init_mri_board_end; fn_ptr < &_mr_init_mri_end; fn_ptr++) - { - (*fn_ptr)(); - } +mr_weak mr_size_t mr_printf_output(const char *str, mr_size_t length) +{ + return 0; +} + +mr_err_t mr_printf_init(void) +{ + console_device = mr_device_find(MR_CONF_CONSOLE_NAME); + MR_ASSERT(console_device != MR_NULL); + + return MR_ERR_OK; +} +AUTO_INIT_DEVICE_EXPORT(mr_printf_init); + +mr_weak mr_size_t mr_printf(const char *fmt, ...) +{ + char str_buffer[MR_CONF_CONSOLE_BUFSZ]; + mr_size_t length = 0; + + va_list arg; + va_start(arg, fmt); + length = vsnprintf(str_buffer, sizeof(str_buffer) - 1, fmt, arg); +#if (MR_CONF_CONSOLE == MR_ENABLE && MR_CONF_SERIAL == MR_ENABLE) + mr_device_write(console_device, 0, str_buffer, length); +#else + mr_printf_output(str_buffer, length); +#endif + va_end(arg); + + return length; } static mr_int8_t mr_avl_get_height(mr_avl_t node) @@ -188,10 +216,11 @@ mr_uint32_t mr_strhase(const char *str) { mr_uint32_t value = 0; - while (*str) { - value ^= value << 15; - value ^= value >> 10; - value ^= *str++; + while (*str) + { + value ^= value << 15; + value ^= value >> 10; + value ^= *str ++; } value ^= value << 3; value ^= value >> 6; @@ -205,10 +234,11 @@ mr_uint32_t mr_strnhase(const char *str, mr_size_t length) { mr_uint32_t value = 0; - while (length--) { - value ^= value << 15; - value ^= value >> 10; - value ^= *str++; + while (length --) + { + value ^= value << 15; + value ^= value >> 10; + value ^= *str ++; } value ^= value << 3; value ^= value >> 6;