1.优化自动初始化宏。

This commit is contained in:
MacRsh
2023-05-25 14:56:19 +08:00
parent 0db6cb0d36
commit f4dc2b87e9
8 changed files with 73 additions and 42 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -8,47 +8,75 @@
* 2023-04-23 MacRsh first version
*/
#include <mrlib.h>
#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;