1.优化自动初始化宏。
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user