219 lines
6.4 KiB
C
219 lines
6.4 KiB
C
/******************************************************************************
|
||
* @file cmsis_armcc.h
|
||
* @brief ?????????????
|
||
* @version V5.0.4
|
||
* @copyright
|
||
******************************************************************************/
|
||
#include "task_register.h"
|
||
|
||
task_array_t tcp_server_task[W5500_MODBUS_NUM]; // __attribute__((section (".CCM_RAM")));
|
||
OS_STK tcp_server_stk[W5500_MODBUS_NUM][300];
|
||
extern const UintArgFunCall tcp_server_poll[W5500_MODBUS_NUM];
|
||
const uint8_t tcp_server_task_name[W5500_MODBUS_NUM][14] =
|
||
{
|
||
"tcp_server1", "tcp_server2"};
|
||
|
||
void poll_1ms_task_init(void);
|
||
void poll_10ms_task_init(void);
|
||
void poll_mqtt_init(void);
|
||
|
||
bool is_first_run = false;
|
||
static int a = 0;
|
||
void task_1ms_handler(uint32_t base_time)
|
||
{
|
||
bms_poll_w5500();
|
||
}
|
||
|
||
void task_can1_handler(uint32_t base_time)
|
||
{
|
||
protocol_can_poll(base_time, INTER_CAN_PORT);
|
||
protocol_can_poll(base_time, EXTER_CAN_PORT);
|
||
}
|
||
|
||
SN_BMS_INIT_CALL user_task_call;
|
||
void task_10ms_handler(uint32_t base_time)
|
||
{
|
||
bms_poll_cur_hv(base_time);
|
||
bms_poll_signal(base_time);
|
||
|
||
#ifdef LIB_CREAT
|
||
user_task_call(base_time);
|
||
#endif
|
||
}
|
||
|
||
void bms_poll_bmu_handler(uint32_t base_time)
|
||
{
|
||
bms_poll_bmu(base_time);
|
||
}
|
||
|
||
void task_mqtt_handler(uint32_t base_time)
|
||
{
|
||
mqtt_publish_bms_data(base_time);
|
||
}
|
||
|
||
void task_100ms_handler(uint32_t base_time)
|
||
{
|
||
static uint32_t cout100ms = 0;
|
||
cout100ms++;
|
||
bms_poll_iso(base_time);
|
||
// bms_poll_adc(); THis was originally commented.
|
||
bms_poll_adc(base_time);
|
||
bms_poll_statistic(base_time);
|
||
bms_poll_run_status(base_time);
|
||
bms_poll_sop(base_time);
|
||
bms_poll_soh(base_time);
|
||
task_mqtt_handler(base_time);
|
||
is_first_run = true;
|
||
}
|
||
|
||
GLOBAL_TASK_VARS_CCM(poll_1ms_task, 4, 1, 5000, 400, poll_1ms_task_init, task_1ms_handler, NULL);
|
||
GLOBAL_TASK_VARS_CCM(poll_100ms_task, 1, 100, 2000, 400, NULL, task_100ms_handler, NULL);
|
||
|
||
GLOBAL_TASK_VARS_CCM(poll_10ms_task, 3, 100, 2000, 400, poll_10ms_task_init, task_10ms_handler, NULL);
|
||
GLOBAL_TASK_VARS_CCM(ord_ctrl_task, 2, 100, 2000, 400, NULL, task_dido_ctrl_handle, NULL);
|
||
|
||
GLOBAL_TASK_VARS(modbus_rtu_task1, 6, 50, 5000, 400, NULL, modbus_rtu_inter_handler, NULL);
|
||
GLOBAL_TASK_VARS_CCM(modbus_rtu_task2, 7, 50, 5000, 400, NULL, modbus_rtu_extern_handler, NULL);
|
||
GLOBAL_TASK_VARS_CCM(modbus_rtu_task3, 8, 50, 5000, 400, NULL, modbus_rtu_externII_handler, NULL);
|
||
|
||
GLOBAL_TASK_VARS_CCM(ord_comm_can_task, 5, 100, 5000, 400, NULL, task_can1_handler, NULL);
|
||
GLOBAL_TASK_VARS_CCM(bms_poll_bmu_task, 9, 100, 5000, 400, bms_bmu_init, bms_poll_bmu_handler, NULL);
|
||
|
||
GLOBAL_TASK_VARS_CCM(bms_poll_mqtt_task, 9, 1000, 5000, 400, poll_mqtt_init, task_mqtt_handler, NULL);
|
||
|
||
#define BMU_FINISH_BIT (0u)
|
||
#define SIGNAL_FINISH_BIT (1u)
|
||
|
||
uint8_t is_data_ok = 0;
|
||
extern const DoLogic doLogicArray[kDoType_End];
|
||
extern const DoLogic bmsCircuitCtrl[kDoCtrlStrategy_End];
|
||
void poll_1ms_task_init(void)
|
||
{
|
||
#if (OS_TASK_STAT_EN > 0)
|
||
OSStatInit();
|
||
#endif
|
||
|
||
#ifdef CPU_CFG_INT_DIS_MEAS_EN
|
||
CPU_IntDisMeasMaxCurReset();
|
||
#endif
|
||
|
||
bms_init_gpio();
|
||
bms_init_eeprom();
|
||
// bms_init_adc(); THis was originally commented.
|
||
// bms_init_adc();
|
||
bms_init_tag();
|
||
bms_init_run();
|
||
bms_init_comm();
|
||
|
||
// 2-17 new add
|
||
// task_dido_ctrl_handle(1000);
|
||
|
||
bms_init_di_do(bmsCircuitCtrl, kDoCtrlStrategy_End, doLogicArray);
|
||
bsp_create_task(&poll_10ms_task, (uint8_t *)"10ms");
|
||
|
||
// KIT_PRINTF("cur_hv init start \r\n");
|
||
|
||
// debug here is no more run
|
||
bms_init_cur_hv();
|
||
|
||
// KIT_PRINTF("cur_hv init ok \r\n");
|
||
|
||
while (KIT_GET_BIT_32(is_data_ok, BMU_FINISH_BIT) == 0)
|
||
{
|
||
bsp_task_delay_ms(10);
|
||
}
|
||
// ???????? ??300ms ??????????
|
||
// KIT_PRINTF("signal init start \r\n");
|
||
|
||
bms_poll_statistic(0);
|
||
|
||
bms_init_signal();
|
||
// ????????? ??????<3F>V?????????????do???
|
||
task_dido_ctrl_handle(1000);
|
||
// KIT_PRINTF("signal init ok \r\n");
|
||
KIT_SET_BIT_MASK_32(is_data_ok, SIGNAL_FINISH_BIT);
|
||
bsp_create_task(&ord_ctrl_task, (uint8_t *)"ctrl");
|
||
|
||
poll_mqtt_init();
|
||
}
|
||
|
||
void poll_10ms_task_init(void)
|
||
{
|
||
|
||
uint8_t i = 0;
|
||
bms_init_fdb();
|
||
// ???????? ????????<3F><>???????? ??500ms???????????????? ??1300ms(???)
|
||
KIT_PRINTF("bmu init start \r\n");
|
||
// bms_init_chain_bmu();
|
||
KIT_PRINTF("bmu init ok \r\n");
|
||
bms_poll_statistic(0);
|
||
// SOC???????????????
|
||
bms_init_soc();
|
||
// ?????<3F><>???SOC????????????????<3F><>??????
|
||
drv_misc_cfg_pwr_off_interrupt(APP_CFG_INT_PRIO_PWR_OFF, kPwrOffVolt_2_9, bms_pwr_off_save);
|
||
|
||
KIT_SET_BIT_MASK_32(is_data_ok, BMU_FINISH_BIT);
|
||
// next line is originally commented.
|
||
while (KIT_GET_BIT_32(is_data_ok, SIGNAL_FINISH_BIT) == 0)
|
||
{
|
||
bsp_task_delay_ms(10);
|
||
}
|
||
KIT_PRINTF("data init ok \r\n");
|
||
|
||
protocol_comm_init();
|
||
|
||
bms_init_sop();
|
||
bms_init_iso();
|
||
// bsp_create_task(&poll_100ms_task, (uint8_t *)"100ms");,THis was originally commented.
|
||
bsp_create_task(&poll_100ms_task, (uint8_t *)"100ms");
|
||
bsp_create_task(&bms_poll_bmu_task, (uint8_t *)"100ms");
|
||
bsp_create_task(&ord_comm_can_task, (uint8_t *)"100ms");
|
||
bsp_create_task(&modbus_rtu_task1, (uint8_t *)"inter_modbus");
|
||
bsp_create_task(&modbus_rtu_task2, (uint8_t *)"exter1_modbus");
|
||
bsp_create_task(&modbus_rtu_task3, (uint8_t *)"exter2_modbus");
|
||
|
||
bms_w5500_net_protocol();
|
||
for (i = 0; i < W5500_MODBUS_NUM; i++)
|
||
{
|
||
tcp_server_task[i].task_id = i + 10;
|
||
tcp_server_task[i].stk_size = 300;
|
||
tcp_server_task[i].stk_array = tcp_server_stk[i];
|
||
tcp_server_task[i].interval = 100;
|
||
tcp_server_task[i].timeout = 1000;
|
||
tcp_server_task[i].handler_func = tcp_server_poll[i];
|
||
bsp_create_task(&tcp_server_task[i], (uint8_t *)&tcp_server_task_name[i][0]);
|
||
}
|
||
}
|
||
|
||
void poll_mqtt_init(void)
|
||
{
|
||
static uint16_t qfc41d_init_count = 0;
|
||
static uint16_t mqtt_init_count = 0;
|
||
while (drv_qfc41d_init() && qfc41d_init_count < 10)
|
||
{
|
||
drv_wdog_feed();
|
||
kit_time_dly_ms(100);
|
||
qfc41d_init_count++;
|
||
}
|
||
|
||
// MQTT ?????
|
||
while (drv_mqtt_init() && mqtt_init_count < 10)
|
||
{
|
||
drv_wdog_feed();
|
||
kit_time_dly_ms(100);
|
||
mqtt_init_count++;
|
||
}
|
||
}
|
||
/*****************************************************************************
|
||
* @brief ucos???<3F><>???
|
||
* @param[in] void: ??
|
||
* @return void
|
||
*****************************************************************************/
|
||
void ucos_irq_handler(void)
|
||
{
|
||
OSIntEnter();
|
||
kit_time_beat();
|
||
bsp_task_beat_wdog();
|
||
OSIntExit();
|
||
}
|