#include "main.hpp" #include #include // #include "sdk/os/zos.hpp" // // #include "sdk\components\cmdscheduler\cmd_scheduler.hpp" #include "sdk\components\eq_20_asb_motor\eq20_servomotor.hpp" #include "sdk\components\iflytop_can_slave_module_master_end\stepmotor.hpp" #include "sdk\components\iflytop_can_slave_v1\iflytop_can_master.hpp" #include "sdk\components\step_motor_45\step_motor_45.hpp" #include "sdk\components\step_motor_45\step_motor_45_scheduler.hpp" #include "sdk\components\zcancmder\zcanreceiver_master.hpp" // #include "sdk\components\cmdscheduler\cmd_scheduler_v2.hpp" #include "sdk\components\eq_20_asb_motor\script_cmder_eq20_servomotor.hpp" #include "sdk\components\mini_servo_motor\mini_servo_motor_ctrl_module.hpp" #include "sdk\components\mini_servo_motor\scirpt_cmder_mini_servo_motor_ctrl_module.hpp" #include "sdk\components\step_motor_45\script_cmder_step_motor_45.hpp" // #include "sdk\components\scriptcmder_module\xy_robot_script_cmder_module.hpp" // #include "sdk\components\zcancmder_master_module/zcan_master_step_motor_ctrl_module.hpp" // #include "sdk\components\zcancmder_master_module\zcan_xy_robot_master_module.hpp" #include "sdk\components\taojingchi_screen\taojingchi_screen_service.hpp" #include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp" #include "sdk\components\zprotocols\zcancmder_v2\protocol_proxy.hpp" #include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp" #include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_script_cmder_paser.hpp" // #define TAG "main" namespace iflytop { Main gmain; }; using namespace iflytop; using namespace std; #define CHECK_ARGC(n) \ if (argc != (n + 1)) { \ ZLOGE(TAG, "argc != %d", n); \ context->breakflag = true; \ return; \ } extern "C" { void StartDefaultTask(void const* argument) { iflytop::gmain.run(); } } /******************************************************************************* * 配置 * *******************************************************************************/ static chip_cfg_t chipcfg = { .us_dleay_tim = &DELAY_US_TIMER, .tim_irq_scheduler_tim = &TIM_IRQ_SCHEDULER_TIMER, .huart = &DEBUG_UART, .debuglight = DEBUG_LIGHT_GPIO, }; namespace iflytop { /******************************************************************************* * 基础组件 * *******************************************************************************/ ZCanCommnaderMaster m_zcanCommnaderMaster; // can总线 ModbusBlockHost g_modbusblockhost; // modbus总线 CmdSchedulerV2 g_cmdScheduler; // 串口字符串指令总线 MicroComputerModuleDeviceScriptCmderPaser g_zmodule_device_script_cmder_paser; // 用于解析所有的设备指令 ZModuleDeviceManager g_zmodule_device_manager; // 设备管理器 /******************************************************************************* * CAN设备 * *******************************************************************************/ ZIProtocolProxy protocolProxy[30]; } // namespace iflytop extern "C" { extern DMA_HandleTypeDef hdma_usart3_rx; extern DMA_HandleTypeDef hdma_usart3_tx; } extern "C" {} extern DMA_HandleTypeDef hdma_usart2_rx; extern DMA_HandleTypeDef hdma_usart2_tx; extern void script_reg_fn(); void regfn() { script_reg_fn(); } extern void step_motor_cmd_reg(); void Main::run() { // PB13 /******************************************************************************* * 系统初始化 * *******************************************************************************/ chip_init(&chipcfg); zos_cfg_t zoscfg; zos_init(&zoscfg); /******************************************************************************* * 总线初始化 * *******************************************************************************/ auto* cfg = m_zcanCommnaderMaster.createCFG(); // can总线配置 m_zcanCommnaderMaster.init(cfg); // can总线 g_zmodule_device_manager.initialize(&m_zcanCommnaderMaster); /******************************************************************************* * 设备构造和初始化 * *******************************************************************************/ for (size_t i = 0; i < ZARRAY_SIZE(protocolProxy); i++) { protocolProxy[i].initialize(i + 1, &m_zcanCommnaderMaster); g_zmodule_device_manager.registerModule(&protocolProxy[i]); } /******************************************************************************* * 串口字符串指令总线 * *******************************************************************************/ g_cmdScheduler.initialize(&DEBUG_UART, 1000); // g_zmodule_device_script_cmder_paser.initialize(&g_cmdScheduler, &g_zmodule_device_manager); #if 0 step_motor_cmd_reg(); #endif while (true) { OSDefaultSchduler::getInstance()->loop(); g_cmdScheduler.schedule(); osDelay(1); } }