Files
ESPC3-wireless/main/main.c

117 lines
2.8 KiB
C
Raw Normal View History

2024-03-28 12:19:52 +08:00
/**
* @file main.c
* @author LokLiang
* @brief APP void work_app_main(void *arg)
* @version 0.1
* @date 2023-11-24
*
* @copyright Copyright (c) 2023
*
*/
#include "os/os.h"
#include "app_main.h"
#include "ota.h"
#include "nvs_flash.h"
#include "esp_err.h"
#undef SYS_LOG_DOMAIN
#define SYS_LOG_DOMAIN "OS"
#include "os_util.h"
#ifndef CONFIG_OS_THREAD_MAIN_STACK_SIZE
#define CONFIG_OS_THREAD_MAIN_STACK_SIZE 0x1C00
#endif
#ifndef CONFIG_OS_THREAD_MAIN_PRIORITY
#define CONFIG_OS_THREAD_MAIN_PRIORITY OS_PRIORITY_NORMAL
#endif
static unsigned s_int_nest;
static unsigned _port_interrupt_save(void)
{
if (s_int_nest == 0)
{
os_interrupt_disable();
}
return s_int_nest++;
}
static void _port_interrupt_restore(unsigned nest)
{
s_int_nest = nest;
if (nest == 0)
{
os_interrupt_enable();
}
}
static k_work_q_t *_port_get_work_q_hdl(void)
{
struct os_thread_handle *thread_handle = os_thread_get_self();
os_work_q_list_t *work_q_list = thread_handle->work_q_list;
return &work_q_list->work_q_handle;
}
static void _port_thread_sleep(k_tick_t sleep_ticks)
{
vTaskDelay(sleep_ticks);
}
static void _os_init(void)
{
static k_init_t const init_struct = {
.malloc = os_malloc,
.free = os_free,
.get_sys_ticks = os_get_sys_ticks,
.interrupt_save = _port_interrupt_save,
.interrupt_restore = _port_interrupt_restore,
.scheduler_disable = os_scheduler_suspend,
.scheduler_enable = os_scheduler_resume,
.get_work_q_hdl = _port_get_work_q_hdl,
.thread_sleep = _port_thread_sleep,
};
k_init(&init_struct);
os_work_q_create(default_os_work_q_hdl,
"app-work_q",
CONFIG_OS_THREAD_MAIN_STACK_SIZE,
CONFIG_OS_THREAD_MAIN_PRIORITY);
extern void work_app_main(void *arg);
static os_work_t _work_hdl_init;
os_work_create(&_work_hdl_init, "work-main", work_app_main, NULL, 3);
os_work_submit(default_os_work_q_hdl, &_work_hdl_init, 0);
}
static void _init_prev_nvs(void)
{
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
// OTA app partition table has a smaller NVS partition size than the
// non-OTA partition table. This size mismatch may cause NVS
// initialization to fail. If this happens, we erase NVS partition and
// initialize NVS again.
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
}
int app_main(void)
{
/* ota */
ota_partition_check();
/* 初始化平台相关 */
_init_prev_nvs();
/* 初始化 os 抽象层 */
_os_init();
return 0;
}