mcu_hi3321_watch/tjd/task/task_manage.c
2025-05-26 20:15:20 +08:00

235 lines
6.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*----------------------------------------------------------------------------
* Copyright (c) Fenda Technologies Co., Ltd. 2020. All rights reserved.
*
* Description: task_manage.c
*
* Author: saimen
*
* Create: 2022-7-16
*--------------------------------------------------------------------------*/
//lib
//os
//sdk
//drv
#include "rtc_api.h"
#include "adc_api.h"
#include "motor_api.h"
#include "ppg_api.h"
#include "gsensor_api.h"
#include "pressure_api.h"
#include "airbag_api.h"
#include "display_api.h"
#include "tp_api.h"
#include "psram_api.h"
#include "flash_api.h"
#include "log_api.h"
#include "fs_api.h"
#include "fs_user_init.h"
#if (PRJ_FOR_FS_SPECIAL_TEST == ON)
#include "fs_test_server.h"
#endif
//user
#include "cm_backtrace.h"
#include "sys_config.h"
#include "sys_rtos.h"
#include "sys_restart.h"
#include "task_manage.h"
#include "task_watchdog.h"
#include "task_display.h"
#include "task_touchpad.h"
#include "task_ate.h"
#include "task_radio.h"
#include "task_rtc.h"
#include "task_charge.h"
#include "task_ui.h"
#include "task_ble.h"
#include "task_alg.h"
#include "task_fit.h"
#include "task_ancillary.h"
#include "user_adapter.h"
//#include "user_charge.h"
#include "charge_api.h"
//#include "user_dtm.h"
#include "ble_management_server.h"
#include "ble_file_trans.h"
#include "sql_message.h"
#define ENABLE_STATIC_PRINT false
extern uint32_t am_util_stdio_printf(const char *pcFmt, ...);
#define static_print_remind(...) am_util_stdio_printf(__VA_ARGS__)
#if ENABLE_STATIC_PRINT
#define static_print_info(...) am_util_stdio_printf(__VA_ARGS__)
#else
#define static_print_info(...)
#endif
extern void user_page_bootup_logo_refresh(void);
extern void user_gps_creat_mutex(void);
extern void user_ble_creat_send_data_mutex(void);
static void init_before_task(void)
{
#if 1
// 检查状态是否需要跳转到DTM程序初始化时间4ms
// user_check_dtm_data();
// 对cm_backtrace初始化 PRO_INFO_BASE_NAME --->ble_freertos_amota
cm_backtrace_init("ble_freertos_amota", PRO_INFO_DEVICE_MODEL, DEVICE_SOFT_VERSION);
// 对MCU一些相关内容进行初始化初始化时间17ms
user_init_mcu_someth();
// PSRAM初始化时间960ms
psram_api_init();
#ifdef EXTERNAL_MEMORY_XIPMM_MODE
psram_api_mapping();
#endif
// Set the default cache configuration
am_hal_cachectrl_config(&am_hal_cachectrl_defaults);
am_hal_cachectrl_enable();
// 外部flash
flash_api_init();
//flash_api_test();
// 文件系统及设备保存信息的初始化初始化时间445ms
fs_user_init(false);
//fs_user_init(true);
// 对保存在MCU ROM的某些数据进行开机恢复不操作外设。
sys_restart_data_recover();
// 充电IC
user_chg_chip_init();
// 按键GPIO口初始化
button_api_deinit();
// 马达GPIO口初始化
motor_api_deinit();
// A+G
gsensor_api_init();
// PPG
ppg_api_init();
// Pressure
pressure_api_init();
// GPS -- 因为cxd560x GPS芯片启动需要超过1秒所以放到任务中启动GPS芯片并获取固件版本等信息.
// user_gps_init();
// TP
touchpad_api_init(touchpad_api_callback);
// 显示屏 -- init()内有open()的动作初始化时间670ms刷LOGO显示LOGO所以耗时
display_api_open();
// user_page_bootup_logo_refresh(); // 刷LOGO显示LOGO
// 掉电后恢复RTC时间
system_rtc_por_recover();
// 蓝牙传输文件与消息通知初始化初始化时间1199ms
FileTransInit();
sql_message_init();
BleConifgInit();
#endif
}
// task最高优先级为configMAX_PRIORITIES - 1 另2021-10-25统计当前所有任务的任务栈占用空间约为62KB(task) + QUEUE + 18Timers + other。
// 为方便堆栈及优先级管理,所有用户 task 全部在此创建。
static void user_task_init(void)
{
#if (PRJ_FOR_FS_SPECIAL_TEST == ON)
task_rtc_init(128, 1);
// This task used by ble stack.
task_radio_init((4 * 256), 4);
// 应用层蓝牙协议数据传输任务ota use it
task_ble_init((8 * 256), 1);
// 文件系统测试任务
// CreateFsTestTask((64 * 256), 4);
task_ate_init((4 * 256), 1);
// MCU看门狗task
task_watchdog_init(128, 0);
#else
task_rtc_init(128, 1);
// This task used by ble stack.
task_radio_init((4 * 256), 4);
// 应用层蓝牙协议数据传输任务ota use it
task_ble_init((8 * 256), 1);
// 充电IC、电源管理task
task_charge_init((2 * 256), 4);
// 算法task
task_alg_create((32 * 256), 5);
// 健康task
task_fit_create((10 * 256), 3);
// 显示任务
task_ui_init((10 * 256), 3);
task_display_init((2 * 256), 4);
task_touchpad_init((2 * 256), 4);
// system common task
task_ancillary_init((6 * 256), 2);
// ate产测task
task_ate_init((15 * 256), 1);
// MCU看门狗task
task_watchdog_init(128, 0);
#endif
}
//互斥锁创建
static void user_lock_init(void)
{
rtc_api_creat_lock();
user_ble_creat_send_data_mutex();
adc_api_mutex_handle_init();
charge_api_create_mutex();
display_port_ui_create_mutex();
touchpad_api_creat_mutex();
psram_api_create_mutex();
// gsensor_creat_mutex();
// ppg_creat_mutex();
//// user_gps_creat_mutex(); //gps驱动暂时用不到互斥锁
flash_api_create_lock();
fs_api_create_lock();
log_api_create_lock();
}
void user_run(void)
{
static_print_remind("name: %s version: %s\r\n", user_get_mcu_name(), user_get_mcu_sw_ver());
// user_update_bootup_stat(DEVICE_BOOTUPING);
// 以下三行代码必须位置顺序固定
init_before_task();
user_task_init();
user_lock_init();
// Start the scheduler.
vTaskStartScheduler();
}