From ca8dbca12ba3d048f84312d6a52b1cd50f55b59d Mon Sep 17 00:00:00 2001 From: wujunchao Date: Wed, 21 Aug 2024 10:41:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 + CH395Q/ch395.c | 398 ++++----- CH395Q/ch395cmd.c | 462 +++++----- CH395Q/ch395inc.h | 332 ++++---- MDK-ARM/VOQC.uvguix.admin | 164 ++-- MDK-ARM/VOQC.uvoptx | 5 + MDK-ARM/VOQC/VOQC.axf | Bin 1056876 -> 1056880 bytes MDK-ARM/VOQC/VOQC.build_log.htm | 6 +- MDK-ARM/VOQC/VOQC.hex | 1406 +++++++++++++++---------------- MDK-ARM/VOQC/VOQC.htm | 54 +- MDK-ARM/VOQC/VOQC.map | 462 +++++----- MDK-ARM/VOQC/VOQC_VOQC.dep | 6 +- MDK-ARM/VOQC/encoder.crf | Bin 918972 -> 918972 bytes MDK-ARM/VOQC/encoder.o | Bin 1023368 -> 1023368 bytes MDK-ARM/VOQC/main.crf | Bin 940409 -> 940409 bytes MDK-ARM/VOQC/main.o | Bin 1057796 -> 1057796 bytes MDK-ARM/VOQC/provalctrl.crf | Bin 921259 -> 921259 bytes MDK-ARM/VOQC/provalctrl.o | Bin 1030112 -> 1030116 bytes board/Src/mf.c | 80 +- board/Src/mf5803.c | 110 +-- board/Src/ms5803.c | 94 +-- modbus/Src/modbus.c | 48 +- modbus/Src/modbus_rtu.c | 218 ++--- modbus/Src/modbus_tcp.c | 178 ++-- users/Src/adcs.c | 12 +- users/Src/encoder.c | 22 +- users/Src/gpios.c | 8 +- users/Src/provalctrl.c | 2 +- users/Src/timer.c | 2 +- users/Src/uarts.c | 6 +- 30 files changed, 2053 insertions(+), 2025 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..70e34ec --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.errorSquiggles": "disabled" +} \ No newline at end of file diff --git a/CH395Q/ch395.c b/CH395Q/ch395.c index 63e74ed..daedcca 100644 --- a/CH395Q/ch395.c +++ b/CH395Q/ch395.c @@ -4,45 +4,45 @@ struct ch395q_t g_ch395q_sta; /** - * @brief ch395_gpioʼ - * @param - * @retval + * @brief ch395_gpio初始化 + * @param 无 + * @retval 无 */ void ch395_gpio_init( void ) { GPIO_InitTypeDef gpio_init_struct; - CH395_SCS_GPIO_CLK_ENABLE(); /* ʹSCSʱ */ - CH395_INT_GPIO_CLK_ENABLE(); /* ʹINTʱ */ - CH395_RST_GPIO_CLK_ENABLE(); /* ʹRSTʱ */ + CH395_SCS_GPIO_CLK_ENABLE(); /* 使能SCS时钟 */ + CH395_INT_GPIO_CLK_ENABLE(); /* 使能INT时钟 */ + CH395_RST_GPIO_CLK_ENABLE(); /* 使能RST时钟 */ /* SCS */ gpio_init_struct.Pin = CH395_SCS_GPIO_PIN; gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM; - gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* */ + gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推拉输出 */ HAL_GPIO_Init( CH395_SCS_GPIO_PORT, &gpio_init_struct ); ch395_scs_low; - /* ʼж */ + /* 初始化中断引脚 */ gpio_init_struct.Pin = CH395_INT_GPIO_PIN; - gpio_init_struct.Mode = GPIO_MODE_INPUT; /* */ - gpio_init_struct.Pull = GPIO_PULLUP; /* */ - gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* */ + gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 输入 */ + gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */ + gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */ HAL_GPIO_Init( CH395_INT_GPIO_PORT, &gpio_init_struct ); gpio_init_struct.Pin = CH395_RST_GPIO_PIN; - gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* */ - gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* */ - gpio_init_struct.Pull = GPIO_PULLUP; /* */ + gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 输出 */ + gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */ + gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */ HAL_GPIO_Init( CH395_RST_GPIO_PORT, &gpio_init_struct ); HAL_GPIO_WritePin(CH395_RST_GPIO_PORT, CH395_RST_GPIO_PIN, GPIO_PIN_SET); HAL_Delay(20); } /** - * @brief ch395رspi - * @param - * @retval + * @brief ch395关闭spi + * @param 无 + * @retval 无 */ void ch395_spi_off( void ) { @@ -53,76 +53,76 @@ void ch395_spi_off( void ) /* SCK\SDI\SDO */ gpio_init_struct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM; - gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD; /* © */ + gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD; /* 开漏输出 */ HAL_GPIO_Init( GPIOC, &gpio_init_struct ); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET); } /** - * @brief SPI1дһֽ - * @param txdata : Ҫ͵(1ֽ) - * @retval յ(1ֽ) + * @brief SPI1读写一个字节数据 + * @param txdata : 要发送的数据(1字节) + * @retval 接收到的数据(1字节) */ uint8_t spi2_read_write_byte(uint8_t txdata) { uint8_t rxdata; HAL_SPI_TransmitReceive(&hspi2, &txdata, &rxdata, 1, 1000); - return rxdata; /* յ */ + return rxdata; /* 返回收到的数据 */ } /** - * @brief ӲSPI8λ - * @param d:Ҫ뵽ch395 - * @retval + * @brief 硬件SPI输出且输入8个位数据 + * @param d:将要送入到ch395的数据 + * @retval 无 */ uint8_t ch395_read_write_byte( uint8_t data ) { uint8_t rxdata; - rxdata = spi2_read_write_byte(data); /* SPIдһCH395Qݲһ */ - return rxdata; /* յ */ + rxdata = spi2_read_write_byte(data); /* SPI写入一个CH395Q数据并返回一个数据 */ + return rxdata; /* 返回收到的数据 */ } /** - * @brief ch395д - * @param Ҫдch395 - * @retval + * @brief 向ch395写命令 + * @param 将要写入ch395的命令码 + * @retval 无 */ void ch395_write_cmd( uint8_t mcmd ) { - ch395_scs_hign; /* ֹCSԭΪͣȽCSø */ - ch395_scs_low; /* ʼCS */ + ch395_scs_hign; /* 防止CS原来为低,先将CS置高 */ + ch395_scs_low; /* 命令开始,CS拉低 */ delay_us(2); - ch395_read_write_byte(mcmd); /* SPI */ - delay_us(2); /* Ҫʱ,ʱ1.5uSȷдڲС1.5uS */ + ch395_read_write_byte(mcmd); /* SPI发送命令码 */ + delay_us(2); /* 必要延时,延时1.5uS确保读写周期不小于1.5uS */ } /** - * @brief ch395д - * @param Ҫдch395 - * @retval + * @brief 向ch395写数据 + * @param 将要写入ch395的数据 + * @retval 无 */ void ch395_write_data( uint8_t mdata ) { - ch395_read_write_byte(mdata); /* SPI */ + ch395_read_write_byte(mdata); /* SPI发送数据 */ } /** - * @brief ch395 - * @param - * @retval ضȡ + * @brief 从ch395读数据 + * @param 无 + * @retval 返回读取的数据 */ uint8_t ch395_read_data( void ) { uint8_t i; - i = ch395_read_write_byte(0xff); /* SPI */ + i = ch395_read_write_byte(0xff); /* SPI读数据 */ return i; } /** - * @brief ch395_keeplive_set ʱ - * @param - * @retval + * @brief ch395_keeplive_set 保活定时器参数设置 + * @param 无 + * @retval 无 */ void ch395_keeplive_set(void) { @@ -132,9 +132,9 @@ void ch395_keeplive_set(void) } /** - * @brief ch395 socket - * @param ch395_sokectSocketϢ - * @retval + * @brief ch395 socket配置 + * @param ch395_sokect:Socket配置信息 + * @retval 无 */ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect) { @@ -143,7 +143,7 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect) return 0; } -// if (g_ch395q_sta.dhcp_status == DHCP_UP) /* DHCPȡɹ״̬ */ +// if (g_ch395q_sta.dhcp_status == DHCP_UP) /* DHCP获取成功状态 */ // { // ch395_sokect->net_info.ip[0] = g_ch395q_sta.ipinf_buf[0]; // ch395_sokect->net_info.ip[1] = g_ch395q_sta.ipinf_buf[1]; @@ -170,12 +170,12 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect) // ch395_sokect->net_info.dns2[2] = g_ch395q_sta.ipinf_buf[18]; // ch395_sokect->net_info.dns2[3] = g_ch395q_sta.ipinf_buf[19]; // } -// else /* DHCPȡʧ״̬þ̬IPַϢ */ +// else /* DHCP获取失败状态,设置静态IP地址信息 */ // { -// ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* CH395IPַ */ -// ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* صַ */ -// ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 룬ĬΪ255.255.255.0*/ -// printf("̬IPϢ.....................................\r\n"); +// ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */ +// ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */ +// ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码,默认为255.255.255.0*/ +// printf("静态IP信息.....................................\r\n"); // printf("IP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.ipaddr[0], (uint16_t)ch395_sokect->net_config.ipaddr[1], (uint16_t)ch395_sokect->net_config.ipaddr[2], (uint16_t)ch395_sokect->net_config.ipaddr[3]); // printf("GWIP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.gwipaddr[0], (uint16_t)ch395_sokect->net_config.gwipaddr[1], (uint16_t)ch395_sokect->net_config.gwipaddr[2], (uint16_t)ch395_sokect->net_config.gwipaddr[3]); // printf("Mask:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.maskaddr[0], (uint16_t)ch395_sokect->net_config.maskaddr[1], (uint16_t)ch395_sokect->net_config.maskaddr[2], (uint16_t)ch395_sokect->net_config.maskaddr[3]); @@ -183,51 +183,51 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect) // HAL_Delay(10); // } - ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* CH395IPַ */ - ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* صַ */ - ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 룬ĬΪ255.255.255.0*/ - printf("̬IPϢ.....................................\r\n"); + ch395_cmd_set_ipaddr(ch395_sokect->net_config.ipaddr); /* 设置CH395的IP地址 */ + ch395_cmd_set_gw_ipaddr(ch395_sokect->net_config.gwipaddr); /* 设置网关地址 */ + ch395_cmd_set_maskaddr(ch395_sokect->net_config.maskaddr); /* 设置子网掩码,默认为255.255.255.0*/ + printf("静态IP信息.....................................\r\n"); printf("IP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.ipaddr[0], (uint16_t)ch395_sokect->net_config.ipaddr[1], (uint16_t)ch395_sokect->net_config.ipaddr[2], (uint16_t)ch395_sokect->net_config.ipaddr[3]); printf("GWIP:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.gwipaddr[0], (uint16_t)ch395_sokect->net_config.gwipaddr[1], (uint16_t)ch395_sokect->net_config.gwipaddr[2], (uint16_t)ch395_sokect->net_config.gwipaddr[3]); printf("Mask:%02d.%02d.%02d.%02d\r\n", (uint16_t)ch395_sokect->net_config.maskaddr[0], (uint16_t)ch395_sokect->net_config.maskaddr[1], (uint16_t)ch395_sokect->net_config.maskaddr[2], (uint16_t)ch395_sokect->net_config.maskaddr[3]); ch395_cmd_init(); HAL_Delay(10); - //ch395_cmd_set_macaddr(ch395_sokect->net_config.macaddr); /* MACַ */ + //ch395_cmd_set_macaddr(ch395_sokect->net_config.macaddr); /* 设置MAC地址 */ memcpy(&g_ch395q_sta.socket[ch395_sokect->socket_index].config, ch395_sokect, sizeof(ch395_socket)); switch(ch395_sokect->proto) { case CH395Q_SOCKET_UDP: - /* socket ΪUDPģʽ */ - ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* socket 0ĿIPַ */ - ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_UDP); /* socket 0Э */ - ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* socket 0ĿĶ˿ */ - ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* socket 0Դ˿ */ - g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* Ƿɹ */ + /* socket 为UDP模式 */ + ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */ + ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_UDP); /* 设置socket 0协议类型 */ + ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* 设置socket 0目的端口 */ + ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */ + g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查是否成功 */ break; case CH395Q_SOCKET_TCP_CLIENT: - /* socket ΪTCPClientģʽ */ - ch395_keeplive_set(); /* */ - ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* socket 0ĿIPַ */ - ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* socket 0Э */ - ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* socket 0ĿĶ˿ */ - ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* socket 0Դ˿ */ - g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* sokectǷ򿪳ɹ */ - g_ch395q_sta.ch395_error(ch395_tcp_connect(ch395_sokect->socket_index)); /* tcpǷɹ */ + /* socket 为TCPClient模式 */ + ch395_keeplive_set(); /* 保活设置 */ + ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */ + ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */ + ch395_set_socket_desport(ch395_sokect->socket_index, ch395_sokect->des_port); /* 设置socket 0目的端口 */ + ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */ + g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */ + g_ch395q_sta.ch395_error(ch395_tcp_connect(ch395_sokect->socket_index)); /* 检查tcp连接是否成功 */ break; case CH395Q_SOCKET_TCP_SERVER: - /* socket ΪTCPServerģʽ */ - //ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* socket 0ĿIPַ */ - ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* socket 0Э */ - ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* socket 0Դ˿ */ - g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* sokectǷ򿪳ɹ */ - g_ch395q_sta.ch395_error(ch395_tcp_listen(ch395_sokect->socket_index)); /* tcp */ + /* socket 为TCPServer模式 */ + //ch395_set_socket_desip(ch395_sokect->socket_index, ch395_sokect->des_ip); /* 设置socket 0目标IP地址 */ + ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */ + ch395_set_socket_sourport(ch395_sokect->socket_index, ch395_sokect->sour_port); /* 设置socket 0源端口 */ + g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */ + g_ch395q_sta.ch395_error(ch395_tcp_listen(ch395_sokect->socket_index)); /* 监听tcp连接 */ break; case CH395Q_SOCKET_MAC_RAW: - ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_MAC_RAW); /* socket 0Э */ - g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* sokectǷ򿪳ɹ */ + ch395_set_socket_prot_type(ch395_sokect->socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */ + g_ch395q_sta.ch395_error(ch395_open_socket(ch395_sokect->socket_index)); /* 检查sokect是否打开成功 */ break; } @@ -235,18 +235,18 @@ uint8_t ch395q_socket_config(ch395_socket * ch395_sokect) } /** - * @brief ʹãʾ룬ͣ - * @param ierror - * @retval + * @brief 调试使用,显示错误代码,并停机 + * @param ierror 检测命令 + * @retval 无 */ void ch395_error(uint8_t ierror) { if (ierror == CMD_ERR_SUCCESS) { - return; /* ɹ */ + return; /* 操作成功 */ } - printf("Error: %02X\r\n", (uint16_t)ierror); /* ʾ */ + printf("Error: %02X\r\n", (uint16_t)ierror); /* 显示错误 */ // while ( 1 ) // { @@ -256,9 +256,9 @@ void ch395_error(uint8_t ierror) } /** - * @brief CH395 PHY״̬ - * @param phy_statusPHY״ֵ̬ - * @retval + * @brief CH395 PHY状态 + * @param phy_status:PHY状态值 + * @retval 无 */ void ch395_phy_status(uint8_t phy_status) { @@ -287,13 +287,13 @@ void ch395_phy_status(uint8_t phy_status) } /** - * @brief socketӿڵĽ뷢ͻ - * @param - * @retval + * @brief 设置socket接口的接收与发送缓冲区 + * @param 无 + * @retval 无 */ void ch395_socket_r_s_buf_modify(void) { - ch395_set_socket_recv_buf(0,0,4); /* Socket 0 ջ4*512 = 2Kͻ2*512 = 1K*/ + ch395_set_socket_recv_buf(0,0,4); /* Socket 0 ,接收缓冲区4*512 = 2K,发送缓冲区2*512 = 1K*/ ch395_set_socket_send_buf(0,4,2); ch395_set_socket_recv_buf(1,6,4); /* Socket 1 */ @@ -320,9 +320,9 @@ void ch395_socket_r_s_buf_modify(void) int re_cnt = 0; /** - * @brief ch395_tcpʼ - * @param - * @retval + * @brief ch395_tcp初始化 + * @param 无 + * @retval 无 */ void ch395_hardware_init(void) { @@ -335,25 +335,25 @@ void ch395_hardware_init(void) g_ch395q_sta.ch395_reconnection = ch395_reconnection; g_ch395q_sta.dhcp_status = DHCP_STA; - i = ch395_cmd_check_exist(0x65); /* ڲӲԼӿͨѶ */ + i = ch395_cmd_check_exist(0x65); /* 测试命令,用于测试硬件以及接口通讯 */ if (i != 0x9a) { - g_ch395q_sta.ch395_error(i); /* ch395q */ + g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */ } - ch395_cmd_reset(); /* ch395qλ */ - HAL_Delay(100); /* ȴ100ʱ */ + ch395_cmd_reset(); /* 对ch395q复位 */ + HAL_Delay(100); /* 这里必须等待100以上延时 */ - g_ch395q_sta.ch395_error(ch395_cmd_init()); /* ʼch395q */ + g_ch395q_sta.ch395_error(ch395_cmd_init()); /* 初始化ch395q命令 */ ch395_socket_r_s_buf_modify(); // ch395_set_tcpmss(536); // ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE); do { - g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* ȡPHY״̬ */ - g_ch395q_sta.ch395_phy_cb(g_ch395q_sta.phy_status); /* ж˫ģʽ */ + g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */ + g_ch395q_sta.ch395_phy_cb(g_ch395q_sta.phy_status); /* 判断双工和网速模式 */ re_cnt++; if(re_cnt > 50) @@ -362,58 +362,58 @@ void ch395_hardware_init(void) } while(g_ch395q_sta.phy_status == PHY_DISCONN); - g_ch395q_sta.version = ch395_cmd_get_ver(); /* ȡ汾 */ + g_ch395q_sta.version = ch395_cmd_get_ver(); /* 获取版本 */ printf("CH395VER : %2x\r\n", (uint16_t)g_ch395q_sta.version); -// i = ch395_dhcp_enable(1); /* DHCP */ -// g_ch395q_sta.ch395_error(i); /* ch395q */ +// i = ch395_dhcp_enable(1); /* 开启DHCP */ +// g_ch395q_sta.ch395_error(i); /* ch395q检测错误 */ - HAL_Delay(1000); /* ch395qʼʱ */ + HAL_Delay(1000); /* ch395q初始化延时 */ } /** - * @brief CH395 socket ж,ȫжб - * @param sockindex 0~7 - * @retval + * @brief CH395 socket 中断,在全局中断中被调用 + * @param sockindex (0~7) + * @retval 无 */ void ch395_socket_interrupt(uint8_t sockindex) { uint8_t sock_int_socket; uint16_t rx_len = 0; - sock_int_socket = ch395_get_socket_int(sockindex); /* ȡsocket ж״̬ */ + sock_int_socket = ch395_get_socket_int(sockindex); /* 获取socket 的中断状态 */ - if (sock_int_socket & SINT_STAT_SENBUF_FREE) /* ͻУԼдҪ͵ */ + if (sock_int_socket & SINT_STAT_SENBUF_FREE) /* 发送缓冲区空闲,可以继续写入要发送的数据 */ { } - if (sock_int_socket & SINT_STAT_SEND_OK) /* ж */ + if (sock_int_socket & SINT_STAT_SEND_OK) /* 发送完成中断 */ { } - if (sock_int_socket & SINT_STAT_RECV) /* ж */ + if (sock_int_socket & SINT_STAT_RECV) /* 接收中断 */ { - g_ch395q_sta.socket[sockindex].config.recv.size = ch395_get_recv_length(sockindex); /* ȡǰݳ */ + g_ch395q_sta.socket[sockindex].config.recv.size = ch395_get_recv_length(sockindex); /* 获取当前缓冲区内数据长度 */ rx_len = g_ch395q_sta.socket[sockindex].config.recv.size; - ch395_get_recv_data(sockindex, rx_len, g_ch395q_sta.socket[sockindex].config.recv.buf); /* ȡ */ + ch395_get_recv_data(sockindex, rx_len, g_ch395q_sta.socket[sockindex].config.recv.buf); /* 读取数据 */ g_ch395q_sta.socket[sockindex].config.recv.buf[rx_len] = '\0'; modbus_process_tcp(); printf("%s", g_ch395q_sta.socket[sockindex].config.recv.buf); g_ch395q_sta.socket[sockindex].config.recv.recv_flag |= 0x04; } - if (sock_int_socket & SINT_STAT_CONNECT) /* жϣTCPģʽЧ */ + if (sock_int_socket & SINT_STAT_CONNECT) /* 连接中断,仅在TCP模式下有效 */ { if (g_ch395q_sta.socket[sockindex].config.proto == CH395Q_SOCKET_TCP_CLIENT) { - ch395_set_keeplive(sockindex,1); /* KEEPALIVEʱ */ - ch395_setttl_num(sockindex,60); /* TTL */ + ch395_set_keeplive(sockindex,1); /* 打开KEEPALIVE保活定时器 */ + ch395_setttl_num(sockindex,60); /* 设置TTL */ } } - if (sock_int_socket & SINT_STAT_DISCONNECT) /* ϿжϣTCPģʽЧ */ + if (sock_int_socket & SINT_STAT_DISCONNECT) /* 断开中断,仅在TCP模式下有效 */ { g_ch395q_sta.ch395_error(ch395_open_socket(g_ch395q_sta.socket[sockindex].config.socket_index)); @@ -428,14 +428,14 @@ void ch395_socket_interrupt(uint8_t sockindex) default: break; } - HAL_Delay(200); /* ʱ200MSٴԣûбҪƵ */ + HAL_Delay(200); /* 延时200MS后再次重试,没有必要过于频繁连接 */ } - if (sock_int_socket & SINT_STAT_TIM_OUT) /* ʱжϣTCPģʽЧ */ + if (sock_int_socket & SINT_STAT_TIM_OUT) /* 超时中断,仅在TCP模式下有效 */ { if (g_ch395q_sta.socket[sockindex].config.proto == CH395Q_SOCKET_TCP_CLIENT) { - HAL_Delay(200); /* ʱ200MSٴԣûбҪƵ */ + HAL_Delay(200); /* 延时200MS后再次重试,没有必要过于频繁连接 */ g_ch395q_sta.ch395_error(ch395_open_socket(g_ch395q_sta.socket[sockindex].config.socket_index)); g_ch395q_sta.ch395_error(ch395_tcp_connect(g_ch395q_sta.socket[sockindex].config.socket_index)); } @@ -443,9 +443,9 @@ void ch395_socket_interrupt(uint8_t sockindex) } /** - * @brief CH395ȫжϺ - * @param - * @retval + * @brief CH395全局中断函数 + * @param 无 + * @retval 无 */ void ch395_interrupt_handler(void) { @@ -454,22 +454,22 @@ void ch395_interrupt_handler(void) init_status = ch395_cmd_get_glob_int_status_all(); - if (init_status & GINT_STAT_UNREACH) /* ɴжϣȡɴϢ */ + if (init_status & GINT_STAT_UNREACH) /* 不可达中断,读取不可达信息 */ { ch395_cmd_get_unreachippt(g_ch395q_sta.ipinf_buf); } - if (init_status & GINT_STAT_IP_CONFLI) /* IPͻжϣ޸CH395 IPʼCH395 */ + if (init_status & GINT_STAT_IP_CONFLI) /* 产生IP冲突中断,建议重新修改CH395的 IP,并初始化CH395 */ { } - if (init_status & GINT_STAT_PHY_CHANGE) /* PHYıж */ + if (init_status & GINT_STAT_PHY_CHANGE) /* 产生PHY改变中断 */ { - g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* ȡPHY״̬ */ + g_ch395q_sta.phy_status = ch395_cmd_get_phy_status(); /* 获取PHY状态 */ } - if (init_status & GINT_STAT_DHCP) /* DHCPж */ + if (init_status & GINT_STAT_DHCP) /* 处理DHCP中断 */ { g_ch395q_sta.dhcp_status = DHCP_DOWN; return; @@ -488,72 +488,72 @@ void ch395_interrupt_handler(void) // break; // default: // g_ch395q_sta.dhcp_status = DHCP_DOWN; -// /* ĬIPַϢ */ -// printf("̬IPϢ.....................................\r\n"); +// /* 设置默认IP地址信息 */ +// printf("静态IP信息.....................................\r\n"); // break; // } } if (init_status & GINT_STAT_SOCK0) { - ch395_socket_interrupt(CH395Q_SOCKET_0); /* socket 0ж */ + ch395_socket_interrupt(CH395Q_SOCKET_0); /* 处理socket 0中断 */ } if (init_status & GINT_STAT_SOCK1) { - ch395_socket_interrupt(CH395Q_SOCKET_1); /* socket 1ж */ + ch395_socket_interrupt(CH395Q_SOCKET_1); /* 处理socket 1中断 */ } if (init_status & GINT_STAT_SOCK2) { - ch395_socket_interrupt(CH395Q_SOCKET_2); /* socket 2ж */ + ch395_socket_interrupt(CH395Q_SOCKET_2); /* 处理socket 2中断 */ } if (init_status & GINT_STAT_SOCK3) { - ch395_socket_interrupt(CH395Q_SOCKET_3); /* socket 3ж */ + ch395_socket_interrupt(CH395Q_SOCKET_3); /* 处理socket 3中断 */ } if (init_status & GINT_STAT_SOCK4) { - ch395_socket_interrupt(CH395Q_SOCKET_4); /* socket 4ж */ + ch395_socket_interrupt(CH395Q_SOCKET_4); /* 处理socket 4中断 */ } if (init_status & GINT_STAT_SOCK5) { - ch395_socket_interrupt(CH395Q_SOCKET_5); /* socket 5ж */ + ch395_socket_interrupt(CH395Q_SOCKET_5); /* 处理socket 5中断 */ } if (init_status & GINT_STAT_SOCK6) { - ch395_socket_interrupt(CH395Q_SOCKET_6); /* socket 6ж */ + ch395_socket_interrupt(CH395Q_SOCKET_6); /* 处理socket 6中断 */ } if (init_status & GINT_STAT_SOCK7) { - ch395_socket_interrupt(CH395Q_SOCKET_7); /* socket 7ж */ + ch395_socket_interrupt(CH395Q_SOCKET_7); /* 处理socket 7中断 */ } } /** - * @brief CH395ȫֹ - * @param - * @retval + * @brief CH395全局管理函数 + * @param 无 + * @retval 无 */ void ch395q_handler(void) { if (ch395_int_pin_wire == 0) { - ch395_interrupt_handler(); /* жϴ */ + ch395_interrupt_handler(); /* 中断处理函数 */ } - g_ch395q_sta.ch395_reconnection(); /* PHY״̬ */ + g_ch395q_sta.ch395_reconnection(); /* 检测PHY状态,并重新连接 */ } /** - * @brief PHY״̬ - * @param - * @retval + * @brief 检测PHY状态,并重新连接 + * @param 无 + * @retval 无 */ void ch395_reconnection(void) { @@ -564,7 +564,7 @@ void ch395_reconnection(void) if (g_ch395q_sta.socket[socket_index].config.socket_enable == CH395Q_ENABLE) { ch395_close_socket(g_ch395q_sta.socket[socket_index].config.socket_index); - g_ch395q_sta.ch395_error(ch395_dhcp_enable(0)); /* ch395q */ + g_ch395q_sta.ch395_error(ch395_dhcp_enable(0)); /* ch395q检测错误 */ g_ch395q_sta.socket[socket_index].config.socket_enable = CH395Q_DISABLE; g_ch395q_sta.dhcp_status = DHCP_STA; } @@ -575,60 +575,60 @@ void ch395_reconnection(void) { if (g_ch395q_sta.dhcp_status == DHCP_STA) { - ch395_cmd_reset(); /* ch395qλ */ - HAL_Delay(100); /* ȴ100ʱ */ + ch395_cmd_reset(); /* 对ch395q复位 */ + HAL_Delay(100); /* 这里必须等待100以上延时 */ ch395_cmd_init(); - HAL_Delay(100); /* ȴ100ʱ */ + HAL_Delay(100); /* 这里必须等待100以上延时 */ ch395_socket_r_s_buf_modify(); // ch395_set_tcpmss(536); // ch395_set_start_para(FUN_PARA_FLAG_TCP_SERVER | SOCK_CTRL_FLAG_SOCKET_CLOSE); - g_ch395q_sta.ch395_error(ch395_dhcp_enable(1)); /* DHCP */ + g_ch395q_sta.ch395_error(ch395_dhcp_enable(1)); /* 开启DHCP */ } do { if (ch395_int_pin_wire == 0) { - ch395_interrupt_handler(); /* жϴ */ + ch395_interrupt_handler(); /* 中断处理函数 */ } } - while (g_ch395q_sta.dhcp_status == DHCP_STA); /* ȡDHCP */ + while (g_ch395q_sta.dhcp_status == DHCP_STA); /* 获取DHCP */ switch(g_ch395q_sta.socket[socket_index].config.proto) { case CH395Q_SOCKET_UDP: - /* socket ΪUDPģʽ */ - ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* socket 0ĿIPַ */ - ch395_set_socket_prot_type(socket_index, PROTO_TYPE_UDP); /* socket 0Э */ - ch395_set_socket_desport(socket_index, g_ch395q_sta.socket[socket_index].config.des_port); /* socket 0ĿĶ˿ */ - ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* socket 0Դ˿ */ - g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* Ƿɹ */ + /* socket 为UDP模式 */ + ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */ + ch395_set_socket_prot_type(socket_index, PROTO_TYPE_UDP); /* 设置socket 0协议类型 */ + ch395_set_socket_desport(socket_index, g_ch395q_sta.socket[socket_index].config.des_port); /* 设置socket 0目的端口 */ + ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */ + g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查是否成功 */ break; case CH395Q_SOCKET_TCP_CLIENT: - /* socket ΪTCPClientģʽ */ - ch395_keeplive_set(); /* */ - ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* socket 0ĿIPַ */ - ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* socket 0Э */ - ch395_set_socket_desport(socket_index,g_ch395q_sta.socket[socket_index].config.des_port); /* socket 0ĿĶ˿ */ - ch395_set_socket_sourport(socket_index,g_ch395q_sta.socket[socket_index].config.sour_port); /* socket 0Դ˿ */ - g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* sokectǷ򿪳ɹ */ - g_ch395q_sta.ch395_error(ch395_tcp_connect(socket_index)); /* tcpǷɹ */ + /* socket 为TCPClient模式 */ + ch395_keeplive_set(); /* 保活设置 */ + ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */ + ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */ + ch395_set_socket_desport(socket_index,g_ch395q_sta.socket[socket_index].config.des_port); /* 设置socket 0目的端口 */ + ch395_set_socket_sourport(socket_index,g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */ + g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */ + g_ch395q_sta.ch395_error(ch395_tcp_connect(socket_index)); /* 检查tcp连接是否成功 */ break; case CH395Q_SOCKET_TCP_SERVER: - /* socket ΪTCPServerģʽ */ - ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* socket 0ĿIPַ */ - ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* socket 0Э */ - ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* socket 0Դ˿ */ - g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* sokectǷ򿪳ɹ */ - g_ch395q_sta.ch395_error(ch395_tcp_listen(socket_index)); /* tcp */ + /* socket 为TCPServer模式 */ + ch395_set_socket_desip(socket_index, g_ch395q_sta.socket[socket_index].config.des_ip); /* 设置socket 0目标IP地址 */ + ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); /* 设置socket 0协议类型 */ + ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 0源端口 */ + g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */ + g_ch395q_sta.ch395_error(ch395_tcp_listen(socket_index)); /* 监听tcp连接 */ break; case CH395Q_SOCKET_MAC_RAW: - ch395_set_socket_prot_type(socket_index, PROTO_TYPE_MAC_RAW); /* socket 0Э */ - g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* sokectǷ򿪳ɹ */ + ch395_set_socket_prot_type(socket_index, PROTO_TYPE_MAC_RAW); /* 设置socket 0协议类型 */ + g_ch395q_sta.ch395_error(ch395_open_socket(socket_index)); /* 检查sokect是否打开成功 */ break; default: ch395_set_socket_prot_type(socket_index, PROTO_TYPE_TCP); - ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* socket 1~7Դ˿ */ + ch395_set_socket_sourport(socket_index, g_ch395q_sta.socket[socket_index].config.sour_port); /* 设置socket 1~7源端口 */ break; } g_ch395q_sta.socket[socket_index].config.socket_enable = CH395Q_ENABLE; @@ -638,21 +638,21 @@ void ch395_reconnection(void) } -/* ϢIPַصַMACַ */ +/* 本地网络信息:IP地址、网关地址、子网掩码和MAC地址 */ uint8_t ch395_ipaddr[4] = {192,168,114,194}; uint8_t ch395_gw_ipaddr[4] = {192,168,114,110}; uint8_t ch395_ipmask[4] = {255,255,255,0}; uint8_t ch395_macaddr[6] = {0x5C,0x53,0x10,0x6C,0x18,0x49}; -/* ԶIPַ */ +/* 远程IP地址设置 */ //uint8_t ch395_des_ipaddr[4] = {192,168,1,111}; static uint8_t socket0_send_buf[] = {"This is from CH395Q\r\n"}; static uint8_t socket0_recv_buf[1024]; ch395_socket cha95_sockct_sta[8]; /** - * @brief ̲ - * @param - * @retval + * @brief 例程测试 + * @param 无 + * @retval 无 */ void ch395_init(void) { @@ -660,22 +660,22 @@ void ch395_init(void) // { // ch395q_handler(); // } -// while (g_ch395q_sta.dhcp_status == DHCP_STA); /* ȡDHCP */ +// while (g_ch395q_sta.dhcp_status == DHCP_STA); /* 获取DHCP */ - cha95_sockct_sta[0].socket_enable = CH395Q_ENABLE; /* ʹsocket */ - cha95_sockct_sta[0].socket_index = CH395Q_SOCKET_0; /* socket */ - //memcpy(cha95_sockct_sta[0].des_ip, ch395_des_ipaddr, sizeof(cha95_sockct_sta[0].des_ip)); /* ĿIPַ */ - memcpy(cha95_sockct_sta[0].net_config.ipaddr, ch395_ipaddr, sizeof(cha95_sockct_sta[0].net_config.ipaddr)); /* þ̬IPַ */ - memcpy(cha95_sockct_sta[0].net_config.gwipaddr, ch395_gw_ipaddr, sizeof(cha95_sockct_sta[0].net_config.gwipaddr)); /* þ̬IPַ */ - memcpy(cha95_sockct_sta[0].net_config.maskaddr, ch395_ipmask, sizeof(cha95_sockct_sta[0].net_config.maskaddr)); /* þַ̬ */ - memcpy(cha95_sockct_sta[0].net_config.macaddr, ch395_macaddr, sizeof(cha95_sockct_sta[0].net_config.macaddr)); /* þ̬MACַ */ - cha95_sockct_sta[0].sour_port = 8080; /* Դ˿ */ - cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* Э */ - cha95_sockct_sta[0].send.buf = socket0_send_buf; /* */ - cha95_sockct_sta[0].send.size = sizeof(socket0_send_buf); /* ݴС */ - cha95_sockct_sta[0].recv.buf = socket0_recv_buf; /* ݻ */ - cha95_sockct_sta[0].recv.size = sizeof(socket0_recv_buf); /* ݴС */ - ch395q_socket_config(&cha95_sockct_sta[0]); /* socket */ + cha95_sockct_sta[0].socket_enable = CH395Q_ENABLE; /* 使能socket对 */ + cha95_sockct_sta[0].socket_index = CH395Q_SOCKET_0; /* 设置socket对 */ + //memcpy(cha95_sockct_sta[0].des_ip, ch395_des_ipaddr, sizeof(cha95_sockct_sta[0].des_ip)); /* 设置目标IP地址 */ + memcpy(cha95_sockct_sta[0].net_config.ipaddr, ch395_ipaddr, sizeof(cha95_sockct_sta[0].net_config.ipaddr)); /* 设置静态本地IP地址 */ + memcpy(cha95_sockct_sta[0].net_config.gwipaddr, ch395_gw_ipaddr, sizeof(cha95_sockct_sta[0].net_config.gwipaddr)); /* 设置静态网关IP地址 */ + memcpy(cha95_sockct_sta[0].net_config.maskaddr, ch395_ipmask, sizeof(cha95_sockct_sta[0].net_config.maskaddr)); /* 设置静态子网掩码地址 */ + memcpy(cha95_sockct_sta[0].net_config.macaddr, ch395_macaddr, sizeof(cha95_sockct_sta[0].net_config.macaddr)); /* 设置静态MAC地址 */ + cha95_sockct_sta[0].sour_port = 8080; /* 源端口 */ + cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* 设置协议 */ + cha95_sockct_sta[0].send.buf = socket0_send_buf; /* 发送数据 */ + cha95_sockct_sta[0].send.size = sizeof(socket0_send_buf); /* 发送数据大小 */ + cha95_sockct_sta[0].recv.buf = socket0_recv_buf; /* 接收数据缓冲区 */ + cha95_sockct_sta[0].recv.size = sizeof(socket0_recv_buf); /* 接收数据大小 */ + ch395q_socket_config(&cha95_sockct_sta[0]); /* 配置socket参数 */ } diff --git a/CH395Q/ch395cmd.c b/CH395Q/ch395cmd.c index 9c50a56..28a6dc1 100644 --- a/CH395Q/ch395cmd.c +++ b/CH395Q/ch395cmd.c @@ -3,9 +3,9 @@ #include "ch395.h" /** - * @brief λch395оƬ - * @param - * @retval + * @brief 复位ch395芯片 + * @param 无 + * @retval 无 */ void ch395_cmd_reset(void) { @@ -14,9 +14,9 @@ void ch395_cmd_reset(void) } /** - * @brief ʹch395˯״̬ - * @param - * @retval + * @brief 使ch395进入睡眠状态 + * @param 无 + * @retval 无 */ void ch395_cmd_sleep(void) { @@ -25,9 +25,9 @@ void ch395_cmd_sleep(void) } /** - * @brief ȡоƬԼ̼汾ţ1ֽڣλʾоƬ汾 - * @param - * @retval 1ֽоƬ̼汾 + * @brief 获取芯片以及固件版本号,1字节,高四位表示芯片版本, + * @param 无 + * @retval 1字节芯片及固件版本号 */ uint8_t ch395_cmd_get_ver(void) { @@ -39,9 +39,9 @@ uint8_t ch395_cmd_get_ver(void) } /** - * @brief ڲӲԼӿͨѶ - * @param 1ֽڲ - * @retval Ӳok testdataλȡ + * @brief 测试命令,用于测试硬件以及接口通讯, + * @param 1字节测试数据 + * @retval 硬件ok,返回 testdata按位取反 */ uint8_t ch395_cmd_check_exist(uint8_t testdata) { @@ -55,9 +55,9 @@ uint8_t ch395_cmd_check_exist(uint8_t testdata) } /** - * @brief phyҪch395 phyΪ100/10m ȫ˫˫ch395ĬΪԶЭ̡ - * @param οphy /״̬ - * @retval + * @brief 设置phy,主要设置ch395 phy为100/10m 或者全双工半双工,ch395默为自动协商。 + * @param 参考phy 命令参数/状态 + * @retval 无 */ void ch395_cmd_set_phy(uint8_t phystat) { @@ -67,9 +67,9 @@ void ch395_cmd_set_phy(uint8_t phystat) } /** - * @brief ȡphy״̬ - * @param - * @retval ǰch395phy״̬οphy/״̬ + * @brief 获取phy的状态 + * @param 无 + * @retval 当前ch395phy状态,参考phy参数/状态定义 */ uint8_t ch395_cmd_get_phy_status(void) { @@ -82,9 +82,9 @@ uint8_t ch395_cmd_get_phy_status(void) } /** - * @brief ȡȫж״̬յch395Զȡжϣ0x43°汾ʹ - * @param - * @retval صǰȫж״̬ + * @brief 获取全局中断状态,收到此命令ch395自动取消中断,0x43及以下版本使用 + * @param 无 + * @retval 返回当前的全局中断状态 */ uint8_t ch395_cmd_get_glob_int_status(void) { @@ -97,9 +97,9 @@ uint8_t ch395_cmd_get_glob_int_status(void) } /** - * @brief ʼch395оƬ - * @param - * @retval ִн + * @brief 初始化ch395芯片 + * @param 无 + * @retval 返回执行结果 */ uint8_t ch395_cmd_init(void) { @@ -111,17 +111,17 @@ uint8_t ch395_cmd_init(void) while (1) { - HAL_Delay(10); /* ʱѯ2MS */ - s = ch395_get_cmd_status(); /* ܹƵѯ */ + HAL_Delay(10); /* 延时查询,建议2MS以上 */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if (s != CH395_ERR_BUSY) { - break; /* CH395оƬæ״̬ */ + break; /* 如果CH395芯片返回忙状态 */ } if (i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳,Ҫ500MSִ */ + return CH395_ERR_UNKNOW; /* 超时退出,本函数需要500MS以上执行完毕 */ } } @@ -129,9 +129,9 @@ uint8_t ch395_cmd_init(void) } /** - * @brief ch395ڲʣڴģʽЧ - * @param baudrate ڲ - * @retval + * @brief 设置ch395串口波特率,仅在串口模式下有效 + * @param baudrate 串口波特率 + * @retval 无 */ void ch395_cmd_set_uart_baud_rate(uint32_t baudrate) { @@ -144,9 +144,9 @@ void ch395_cmd_set_uart_baud_rate(uint32_t baudrate) } /** - * @brief ȡִ״̬ijЩҪȴִн - * @param - * @retval һִ״̬ + * @brief 获取命令执行状态,某些命令需要等待命令执行结果 + * @param 无 + * @retval 返回上一条命令执行状态 */ uint8_t ch395_get_cmd_status(void) { @@ -159,9 +159,9 @@ uint8_t ch395_get_cmd_status(void) } /** - * @brief ch395ipַ - * @param ipaddr ָipַ - * @retval + * @brief 设置ch395的ip地址 + * @param ipaddr 指ip地址 + * @retval 无 */ void ch395_cmd_set_ipaddr(uint8_t *ipaddr) { @@ -178,9 +178,9 @@ void ch395_cmd_set_ipaddr(uint8_t *ipaddr) } /** - * @brief ch395ipַ - * @param ipaddr ָipַ - * @retval + * @brief 设置ch395的网关ip地址 + * @param ipaddr 指向网关ip地址 + * @retval 无 */ void ch395_cmd_set_gw_ipaddr(uint8_t *gwipaddr) { @@ -197,9 +197,9 @@ void ch395_cmd_set_gw_ipaddr(uint8_t *gwipaddr) } /** - * @brief ch395룬ĬΪ255.255.255.0 - * @param maskaddr ַָ - * @retval + * @brief 设置ch395的子网掩码,默认为255.255.255.0 + * @param maskaddr 指子网掩码地址 + * @retval 无 */ void ch395_cmd_set_maskaddr(uint8_t *maskaddr) { @@ -216,9 +216,9 @@ void ch395_cmd_set_maskaddr(uint8_t *maskaddr) } /** - * @brief ch395macַ - * @param mcaddr macַָ - * @retval + * @brief 设置ch395的mac地址。 + * @param mcaddr mac地址指针 + * @retval 无 */ void ch395_cmd_set_macaddr(uint8_t *amcaddr) { @@ -236,9 +236,9 @@ void ch395_cmd_set_macaddr(uint8_t *amcaddr) } /** - * @brief ȡch395macַ - * @param amcaddr macַָ - * @retval + * @brief 获取ch395的mac地址。 + * @param amcaddr mac地址指针 + * @retval 无 */ void ch395_cmd_get_macaddr(uint8_t *amcaddr) { @@ -255,11 +255,11 @@ void ch395_cmd_get_macaddr(uint8_t *amcaddr) } /** - * @brief macˡ - * @param filtype ο mac + * @brief 设置mac过滤。 + * @param filtype 参考 mac过滤 * @param table0 hash0 * @param table1 hash1 - * @retval + * @retval 无 */ void ch395_cmd_set_macfilt(uint8_t filtype, uint32_t table0, uint32_t table1) { @@ -278,13 +278,13 @@ void ch395_cmd_set_macfilt(uint8_t filtype, uint32_t table0, uint32_t table1) } /** - * @brief ȡɴϢ (ip,port,protocol type) - * @param list ȡIJɴ - @arg 1ֽΪɴ룬ο ɴ(ch395inc.h) - @arg 2ֽΪipЭ - @arg 3-4ֽΪ˿ں - @arg 4-8ֽΪipַ - * @retval + * @brief 获取不可达信息 (ip,port,protocol type) + * @param list 保存获取到的不可达 + @arg 第1个字节为不可达代码,请参考 不可达代码(ch395inc.h) + @arg 第2个字节为ip包协议类型 + @arg 第3-4字节为端口号 + @arg 第4-8字节为ip地址 + * @retval 无 */ void ch395_cmd_get_unreachippt(uint8_t *list) { @@ -301,10 +301,10 @@ void ch395_cmd_get_unreachippt(uint8_t *list) } /** - * @brief ȡԶ˵ipͶ˿ڵַһtcp serverģʽʹ - * @param sockindex socket - * @param list ipͶ˿ - * @retval + * @brief 获取远端的ip和端口地址,一般在tcp server模式下使用 + * @param sockindex socket索引 + * @param list 保存ip和端口 + * @retval 无 */ void ch395_cmd_get_remoteipp(uint8_t sockindex, uint8_t *list) { @@ -322,10 +322,10 @@ void ch395_cmd_get_remoteipp(uint8_t sockindex, uint8_t *list) } /** - * @brief socket nĿipַ - * @param sockindex socket - * @param ipaddr ָipַ - * @retval + * @brief 设置socket n的目的ip地址 + * @param sockindex socket索引 + * @param ipaddr 指向ip地址 + * @retval 无 */ void ch395_set_socket_desip(uint8_t sockindex, uint8_t *ipaddr) { @@ -339,10 +339,10 @@ void ch395_set_socket_desip(uint8_t sockindex, uint8_t *ipaddr) } /** - * @brief socket Э - * @param sockindex socket,prottype Э - * @param ο socketЭͶ(ch395inc.h) - * @retval + * @brief 设置socket 的协议类型 + * @param sockindex socket索引,prottype 协议类型 + * @param 请参考 socket协议类型定义(ch395inc.h) + * @retval 无 */ void ch395_set_socket_prot_type(uint8_t sockindex, uint8_t prottype) { @@ -353,10 +353,10 @@ void ch395_set_socket_prot_type(uint8_t sockindex, uint8_t prottype) } /** - * @brief socket nЭ - * @param sockindex socket - * @param desprot 2ֽĿĶ˿ - * @retval + * @brief 设置socket n的协议类型 + * @param sockindex socket索引 + * @param desprot 2字节目的端口 + * @retval 无 */ void ch395_set_socket_desport(uint8_t sockindex, uint16_t desprot) { @@ -368,10 +368,10 @@ void ch395_set_socket_desport(uint8_t sockindex, uint16_t desprot) } /** - * @brief socket nЭ - * @param sockindex socket - * @param desprot 2ֽԴ˿ - * @retval + * @brief 设置socket n的协议类型 + * @param sockindex socket索引 + * @param desprot 2字节源端口 + * @retval 无 */ void ch395_set_socket_sourport(uint8_t sockindex, uint16_t surprot) { @@ -383,10 +383,10 @@ void ch395_set_socket_sourport(uint8_t sockindex, uint16_t surprot) } /** - * @brief ipģʽ£socket ipЭֶ - * @param sockindex socket - * @param prototype iprawģʽ1ֽЭֶ - * @retval + * @brief ip模式下,socket ip包协议字段 + * @param sockindex socket索引 + * @param prototype ipraw模式1字节协议字段 + * @retval 无 */ void ch395_set_socket_ipraw_proto(uint8_t sockindex, uint8_t prototype) { @@ -397,11 +397,11 @@ void ch395_set_socket_ipraw_proto(uint8_t sockindex, uint8_t prototype) } /** - * @brief /ر ping - * @param senable :0 / 1, 庬: - * @arg 1: ping - * @arg 0: رping - * @retval + * @brief 开启/关闭 ping + * @param senable :0 / 1, 具体含义如下: + * @arg 1: 开启ping + * @arg 0: 关闭ping + * @retval 无 */ void ch395_enable_ping(uint8_t enable) { @@ -411,11 +411,11 @@ void ch395_enable_ping(uint8_t enable) } /** - * @brief ͻд - * @param sockindex socket - * @param databuf ݻ - * @param len - * @retval + * @brief 向发送缓冲区写数据 + * @param sockindex socket索引 + * @param databuf 数据缓冲区 + * @param len 长度 + * @retval 无 */ void ch395_send_data(uint8_t sockindex, uint8_t *databuf, uint16_t len) { @@ -435,9 +435,9 @@ void ch395_send_data(uint8_t sockindex, uint8_t *databuf, uint16_t len) } /** - * @brief ȡջ - * @param sockindex socket - * @retval ؽջЧ + * @brief 获取接收缓冲区长度 + * @param sockindex socket索引 + * @retval 返回接收缓冲区有效长度 */ uint16_t ch395_get_recv_length(uint8_t sockindex) { @@ -452,9 +452,9 @@ uint16_t ch395_get_recv_length(uint8_t sockindex) } /** - * @brief ջ - * @param sockindex socket - * @retval + * @brief 清除接收缓冲区 + * @param sockindex socket索引 + * @retval 无 */ void ch395_clear_recv_buf(uint8_t sockindex) { @@ -464,11 +464,11 @@ void ch395_clear_recv_buf(uint8_t sockindex) } /** - * @brief ȡջ - * @param sockindex socket - * @param len - * @param pbuf - * @retval + * @brief 读取接收缓冲区数据 + * @param sockindex socket索引 + * @param len 长度 + * @param pbuf 缓冲区 + * @retval 无 */ void ch395_get_recv_data(uint8_t sockindex, uint16_t len, uint8_t *pbuf) { @@ -492,9 +492,9 @@ void ch395_get_recv_data(uint8_t sockindex, uint16_t len, uint8_t *pbuf) } /** - * @brief Դ - * @param count ֵΪ20 - * @retval + * @brief 设置重试次数 + * @param count 重试值,最大为20次 + * @retval 无 */ void ch395_cmd_set_retry_count(uint8_t count) { @@ -504,9 +504,9 @@ void ch395_cmd_set_retry_count(uint8_t count) } /** - * @brief - * @param period ڵλΪ룬1000ms - * @retval + * @brief 设置重试周期 + * @param period 重试周期单位为毫秒,最大1000ms + * @retval 无 */ void ch395_cmd_set_retry_period(uint16_t period) { @@ -517,9 +517,9 @@ void ch395_cmd_set_retry_period(uint16_t period) } /** - * @brief ȡsocket - * @param sockindex socket - * @retval socket n״̬Ϣ1ֽΪsocket 򿪻߹ر,2ֽΪtcp״̬ + * @brief 获取socket + * @param sockindex socket索引 + * @retval socket n的状态信息,第1字节为socket 打开或者关闭,第2字节为tcp状态 */ void ch395_cmd_get_socket_status(uint8_t sockindex, uint8_t *status) { @@ -531,9 +531,9 @@ void ch395_cmd_get_socket_status(uint8_t sockindex, uint8_t *status) } /** - * @brief socketҪȴִгɹ - * @param sockindex socket - * @retval ִн + * @brief 打开socket,此命令需要等待执行成功 + * @param sockindex socket索引 + * @retval 返回执行结果 */ uint8_t ch395_open_socket(uint8_t sockindex) { @@ -545,17 +545,17 @@ uint8_t ch395_open_socket(uint8_t sockindex) while (1) { - HAL_Delay(5); /* ʱѯ2MS */ - s = ch395_get_cmd_status(); /* ܹƵѯ */ + HAL_Delay(5); /* 延时查询,建议2MS以上 */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if (s != CH395_ERR_BUSY) { - break; /* CH395оƬæ״̬ */ + break; /* 如果CH395芯片返回忙状态 */ } if (i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳ */ + return CH395_ERR_UNKNOW; /* 超时退出 */ } } @@ -563,9 +563,9 @@ uint8_t ch395_open_socket(uint8_t sockindex) } /** - * @brief رsocket - * @param sockindex socket - * @retval ִн + * @brief 关闭socket, + * @param sockindex socket索引 + * @retval 返回执行结果 */ uint8_t ch395_close_socket(uint8_t sockindex) { @@ -577,17 +577,17 @@ uint8_t ch395_close_socket(uint8_t sockindex) while (1) { - HAL_Delay(5); /* ʱѯ2MS */ - s = ch395_get_cmd_status(); /* ܹƵѯ */ + HAL_Delay(5); /* 延时查询,建议2MS以上 */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if (s != CH395_ERR_BUSY) { - break; /* CH395оƬæ״̬ */ + break; /* 如果CH395芯片返回忙状态 */ } if (i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳ */ + return CH395_ERR_UNKNOW; /* 超时退出 */ } } @@ -595,9 +595,9 @@ uint8_t ch395_close_socket(uint8_t sockindex) } /** - * @brief tcpӣtcpģʽЧҪȴִгɹ - * @param sockindex socket - * @retval ִн + * @brief tcp连接,仅在tcp模式下有效,此命令需要等待执行成功 + * @param sockindex socket索引 + * @retval 返回执行结果 */ uint8_t ch395_tcp_connect(uint8_t sockindex) { @@ -609,17 +609,17 @@ uint8_t ch395_tcp_connect(uint8_t sockindex) while (1) { - HAL_Delay(5); /* ʱѯ2MS */ - s = ch395_get_cmd_status(); /* ܹƵѯ */ + HAL_Delay(5); /* 延时查询,建议2MS以上 */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if (s != CH395_ERR_BUSY) { - break; /* CH395оƬæ״̬ */ + break; /* 如果CH395芯片返回忙状态 */ } if (i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳ */ + return CH395_ERR_UNKNOW; /* 超时退出 */ } } @@ -627,9 +627,9 @@ uint8_t ch395_tcp_connect(uint8_t sockindex) } /** - * @brief tcptcpģʽЧҪȴִгɹ - * @param sockindex socket - * @retval ִн + * @brief tcp监听,仅在tcp模式下有效,此命令需要等待执行成功 + * @param sockindex socket索引 + * @retval 返回执行结果 */ uint8_t ch395_tcp_listen(uint8_t sockindex) { @@ -641,17 +641,17 @@ uint8_t ch395_tcp_listen(uint8_t sockindex) while (1) { - HAL_Delay(5); /* ʱѯ2MS */ - s = ch395_get_cmd_status(); /* ܹƵѯ */ + HAL_Delay(5); /* 延时查询,建议2MS以上 */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if (s != CH395_ERR_BUSY) { - break; /* CH395оƬæ״̬ */ + break; /* 如果CH395芯片返回忙状态 */ } if (i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳ */ + return CH395_ERR_UNKNOW; /* 超时退出 */ } } @@ -659,9 +659,9 @@ uint8_t ch395_tcp_listen(uint8_t sockindex) } /** - * @brief tcpϿtcpģʽЧҪȴִгɹ - * @param sockindex socket - * @retval + * @brief tcp断开,仅在tcp模式下有效,此命令需要等待执行成功 + * @param sockindex socket索引 + * @retval 无 */ uint8_t ch395_tcp_disconnect(uint8_t sockindex) { @@ -673,26 +673,26 @@ uint8_t ch395_tcp_disconnect(uint8_t sockindex) while (1) { - HAL_Delay(5); /* ʱѯ2MS */ - s = ch395_get_cmd_status(); /* ܹƵѯ */ + HAL_Delay(5); /* 延时查询,建议2MS以上 */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if (s != CH395_ERR_BUSY) { - break; /* CH395оƬæ״̬ */ + break; /* 如果CH395芯片返回忙状态 */ } if (i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳ */ + return CH395_ERR_UNKNOW; /* 超时退出 */ } } return s; } /** - * @brief ȡsocket nж״̬ - * @param sockindex socket - * @retval ж״̬ + * @brief 获取socket n的中断状态 + * @param sockindex socket索引 + * @retval 中断状态 */ uint8_t ch395_get_socket_int(uint8_t sockindex) { @@ -706,9 +706,9 @@ uint8_t ch395_get_socket_int(uint8_t sockindex) } /** - * @brief Զಥַcrc㣬ȡ6λ - * @param mac_addr macַ - * @retval crc32ĸ6λ + * @brief 对多播地址进行crc运算,并取高6位。 + * @param mac_addr mac地址 + * @retval 返回crc32的高6位 */ uint8_t ch395_crcret_6bit(uint8_t *mac_addr) { @@ -734,11 +734,11 @@ uint8_t ch395_crcret_6bit(uint8_t *mac_addr) } /** - * @brief /ֹͣdhcp - * @param flag:0 / 1, 庬: - * @arg 1:dhcp - * @arg 0ֹͣdhcp - * @retval ִ״̬ + * @brief 启动/停止dhcp + * @param flag:0 / 1, 具体含义如下: + * @arg 1:启动dhcp + * @arg 0:停止dhcp + * @retval 执行状态 */ uint8_t ch395_dhcp_enable(uint8_t flag) { @@ -751,16 +751,16 @@ uint8_t ch395_dhcp_enable(uint8_t flag) while (1) { HAL_Delay(20); - s = ch395_get_cmd_status(); /* ܹƵѯ */ + s = ch395_get_cmd_status(); /* 不能过于频繁查询 */ if(s != CH395_ERR_BUSY) { - break; /* ch395оƬæ״̬ */ + break; /* 如果ch395芯片返回忙状态 */ } if(i++ > 200) { - return CH395_ERR_UNKNOW; /* ʱ˳ */ + return CH395_ERR_UNKNOW; /* 超时退出 */ } } @@ -768,9 +768,9 @@ uint8_t ch395_dhcp_enable(uint8_t flag) } /** - * @brief ȡdhcp״̬ - * @param - * @retval dhcp״̬0Ϊɹֵʾ + * @brief 获取dhcp状态 + * @param 无 + * @retval dhcp状态,0为成功,其他值表示错误 */ uint8_t ch395_get_dhcp_status(void) { @@ -782,9 +782,9 @@ uint8_t ch395_get_dhcp_status(void) } /** - * @brief ȡipصַ - * @param sockindex socket - * @retval 12ֽڵip,صַ + * @brief 获取ip,子网掩码和网关地址 + * @param sockindex socket索引 + * @retval 12个字节的ip,子网掩码和网关地址 */ void ch395_get_ipinf(uint8_t *addr) { @@ -800,10 +800,10 @@ void ch395_get_ipinf(uint8_t *addr) } /** - * @brief дgpioĴ - * @param regadd Ĵַ - * @param regval Ĵֵ - * @retval + * @brief 写gpio寄存器 + * @param regadd 寄存器地址 + * @param regval 寄存器值 + * @retval 无 */ void ch395_write_gpio_addr(uint8_t regadd, uint8_t regval) { @@ -813,9 +813,9 @@ void ch395_write_gpio_addr(uint8_t regadd, uint8_t regval) } /** - * @brief gpioĴ - * @param regadd Ĵַ - * @retval Ĵֵ + * @brief 读gpio寄存器 + * @param regadd 寄存器地址 + * @retval 寄存器的值 */ uint8_t ch395_read_gpio_addr(uint8_t regadd) { @@ -828,9 +828,9 @@ uint8_t ch395_read_gpio_addr(uint8_t regadd) } /** - * @brief eeprom - * @param - * @retval ִ״̬ + * @brief 擦除eeprom + * @param 无 + * @retval 执行状态 */ uint8_t ch395_eeprom_erase(void) { @@ -854,11 +854,11 @@ uint8_t ch395_eeprom_erase(void) } /** - * @brief дeeprom - * @param eepaddr eepromַ - * @param buf ַ - * @param len - * @retval + * @brief 写eeprom + * @param eepaddr eeprom地址 + * @param buf 缓冲区地址 + * @param len 长度 + * @retval 无 */ uint8_t ch395_eeprom_write(uint16_t eepaddr, uint8_t *buf, uint8_t len) { @@ -887,11 +887,11 @@ uint8_t ch395_eeprom_write(uint16_t eepaddr, uint8_t *buf, uint8_t len) } /** - * @brief дeeprom - * @param eepaddr eepromַ - * @param buf ַ - * @param len - * @retval + * @brief 写eeprom + * @param eepaddr eeprom地址 + * @param buf 缓冲区地址 + * @param len 长度 + * @retval 无 */ void ch395_eeprom_read(uint16_t eepaddr, uint8_t *buf, uint8_t len) { @@ -908,9 +908,9 @@ void ch395_eeprom_read(uint16_t eepaddr, uint8_t *buf, uint8_t len) } /** - * @brief tcp mssֵ + * @brief 设置tcp mss值 * @param tcpmss - * @retval + * @retval 无 */ void ch395_set_tcpmss(uint16_t tcpmss) { @@ -920,11 +920,11 @@ void ch395_set_tcpmss(uint16_t tcpmss) } /** - * @brief socketջ - * @param sockindex socket,ַ,blknum - * @param startblk ʼ - * @param λ λΪ512ֽ - * @retval + * @brief 设置socket接收缓冲区 + * @param sockindex socket索引,址,blknum + * @param startblk 起始地 + * @param 单位缓冲区个数 ,单位为512字节 + * @retval 无 */ void ch395_set_socket_recv_buf(uint8_t sockindex, uint8_t startblk, uint8_t blknum) { @@ -935,11 +935,11 @@ void ch395_set_socket_recv_buf(uint8_t sockindex, uint8_t startblk, uint8_t blkn } /** - * @brief socketͻ - * @param sockindex socket - * @param startblk ʼַ - * @param blknum λ - * @retval + * @brief 设置socket发送缓冲区 + * @param sockindex socket索引 + * @param startblk 起始地址 + * @param blknum 单位缓冲区个数 + * @retval 无 */ void ch395_set_socket_send_buf(uint8_t sockindex, uint8_t startblk, uint8_t blknum) { @@ -950,25 +950,25 @@ void ch395_set_socket_send_buf(uint8_t sockindex, uint8_t startblk, uint8_t blkn } /** - * @brief udpָipͶ˿ڷ - * @param buf : ݻ - * @param len : ݳ - * @param ip : Ŀip - * @param port : Ŀ˿ - * @param sockeid : socketֵ - * @retval + * @brief udp向指定的ip和端口发送数据 + * @param buf : 发送数据缓冲区 + * @param len : 发送数据长度 + * @param ip : 目标ip + * @param port : 目标端口 + * @param sockeid : socket索引值 + * @retval 无 */ void ch395_udp_send_data(uint8_t *buf, uint32_t len, uint8_t *ip, uint16_t port, uint8_t sockindex) { - ch395_set_socket_desip(sockindex, ip); /* socket 0ĿIPַ */ + ch395_set_socket_desip(sockindex, ip); /* 设置socket 0目标IP地址 */ ch395_set_socket_desport(sockindex, port); ch395_send_data(sockindex, buf, len); } /** - * @brief ch395 - * @param mdata õIJ - * @retval + * @brief 设置ch395启动参数 + * @param mdata 设置的参数 + * @retval 无 */ void ch395_set_start_para(uint32_t mdata) { @@ -980,9 +980,9 @@ void ch395_set_start_para(uint32_t mdata) } /** - * @brief ȡȫж״̬յch395Զȡж,0x44ϰ汾ʹ - * @param - * @retval صǰȫж״̬ + * @brief 获取全局中断状态,收到此命令ch395自动取消中断,0x44及以上版本使用 + * @param 无 + * @retval 返回当前的全局中断状态 */ uint16_t ch395_cmd_get_glob_int_status_all(void) { @@ -996,10 +996,10 @@ uint16_t ch395_cmd_get_glob_int_status_all(void) } /** - * @brief keepalive - * @param sockindex socket - * @param cmd 0ر 1 - * @retval + * @brief 设置keepalive功能 + * @param sockindex socket号 + * @param cmd 0:关闭 1:开启 + * @retval 无 */ void ch395_set_keeplive(uint8_t sockindex, uint8_t cmd) { @@ -1009,9 +1009,9 @@ void ch395_set_keeplive(uint8_t sockindex, uint8_t cmd) } /** - * @brief keepaliveԴ - * @param cnt Դ - * @retval + * @brief 设置keepalive重试次数 + * @param cnt 重试次数() + * @retval 无 */ void ch395_keeplive_cnt(uint8_t cnt) { @@ -1020,9 +1020,9 @@ void ch395_keeplive_cnt(uint8_t cnt) } /** - * @brief keeplive - * @param idle ʱ䣨λms - * @retval + * @brief 设置keeplive空闲 + * @param idle 空闲时间(单位:ms) + * @retval 无 */ void ch395_keeplive_idle(uint32_t idle) { @@ -1034,9 +1034,9 @@ void ch395_keeplive_idle(uint32_t idle) } /** - * @brief keepliveʱ - * @param intvl ʱ䣨λms - * @retval + * @brief 设置keeplive间隔时间 + * @param intvl 间隔时间(单位:ms) + * @retval 无 */ void ch395_keeplive_intvl(uint32_t intvl) { @@ -1048,10 +1048,10 @@ void ch395_keeplive_intvl(uint32_t intvl) } /** - * @brief ttl - * @param ssockindex socket - * @param ttlnum:ttl - * @retval + * @brief 设置ttl + * @param ssockindex socket号 + * @param ttlnum:ttl数 + * @retval 无 */ void ch395_setttl_num(uint8_t sockindex, uint8_t ttlnum) { diff --git a/CH395Q/ch395inc.h b/CH395Q/ch395inc.h index 222fb66..8031a53 100644 --- a/CH395Q/ch395inc.h +++ b/CH395Q/ch395inc.h @@ -7,7 +7,7 @@ #include "usart.h" #include "spi.h" /* ********************************************************************************************************************* */ -/* ͺͳ */ +/* 常用类型和常量定义 */ #ifdef __cplusplus extern "C" { #endif @@ -20,225 +20,225 @@ extern "C" { #define NULL 0 #endif -/* : - * һ˳: - * һ(ڴڷʽ,֮ǰҪͬ) - * ɸ(0) - * ɸ(0) - * : CMDxy_NAME - * еxy, x˵ݸ(ֽ), y˵ݸ(ֽ), yWʾҪȴִгɹ - * Щܹʵ0ֽڵݿд, ݿ鱾ֽδxy֮ +/* 命令代码: + * 一个命令操作顺序包含: + * 一个命令码(对于串口方式,命令码之前还需要两个同步码) + * 若干个输入数据(可以是0个) + * 若干个输出数据(可以是0个) + * 命令码起名规则: CMDxy_NAME + * 其中的x和y都是数字, x说明最少输入数据个数(字节数), y说明最少输出数据个数(字节数), y如果是W表示需要等待命令执行成功 + * 有些命令能够实现0到多个字节的数据块读写, 数据块本身的字节数未包含在上述x或y之内 */ -#define CMD01_GET_IC_VER 0x01 /* ȡоƬԼ̼汾 */ +#define CMD01_GET_IC_VER 0x01 /* 获取芯片以及固件版本号 */ -#define CMD31_SET_BAUDRATE 0x02 /* ڷʽ: ôͨѶ(ϵ߸λĬϲΪ9600bps */ +#define CMD31_SET_BAUDRATE 0x02 /* 串口方式: 设置串口通讯波特率(上电或者复位后的默认波特率为9600bps */ -#define CMD00_ENTER_SLEEP 0x03 /* ˯״̬ */ +#define CMD00_ENTER_SLEEP 0x03 /* 进入睡眠状态 */ -#define CMD00_RESET_ALL 0x05 /* ִӲλ */ +#define CMD00_RESET_ALL 0x05 /* 执行硬件复位 */ -#define CMD11_CHECK_EXIST 0x06 /* ͨѶӿԼ״̬ */ +#define CMD11_CHECK_EXIST 0x06 /* 测试通讯接口以及工作状态 */ -#define CMD02_GET_GLOB_INT_STATUS_ALL 0x19 /* ȡȫж״̬V44汾ԺijsocketҪôȡȫж */ +#define CMD02_GET_GLOB_INT_STATUS_ALL 0x19 /* 获取全局中断状态,V44版本以后的程序由于增加了socket数量需要用此命令获取全部的中断 */ -#define CMD10_SET_PHY 0x20 /* PHYĬΪAutoԶЭ */ +#define CMD10_SET_PHY 0x20 /* 设置PHY,默认为Auto,自动协商 */ -#define CMD60_SET_MAC_ADDR 0x21 /* MACַ CMD00H_INIT_CH395֮ǰ */ +#define CMD60_SET_MAC_ADDR 0x21 /* 设置MAC地址 必须在CMD00H_INIT_CH395之前设置完毕 */ -#define CMD40_SET_IP_ADDR 0x22 /* IPַ CMD00H_INIT_CH395֮ǰ */ +#define CMD40_SET_IP_ADDR 0x22 /* 设置IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */ -#define CMD40_SET_GWIP_ADDR 0x23 /* IPַ CMD00H_INIT_CH395֮ǰ */ +#define CMD40_SET_GWIP_ADDR 0x23 /* 设置网关IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */ -#define CMD40_SET_MASK_ADDR 0x24 /* 룬 CMD00H_INIT_CH395֮ǰ */ +#define CMD40_SET_MASK_ADDR 0x24 /* 设置子网掩码, 必须在CMD00H_INIT_CH395之前设置完毕 */ -#define CMD90_SET_MAC_FILT 0x25 /* MAC Խй㲥ಥȹ */ +#define CMD90_SET_MAC_FILT 0x25 /* 设置MAC过滤 可以进行广播,多播等过滤 */ -#define CMD01_GET_PHY_STATUS 0x26 /* ȡPHYǰ״̬Ͽӣ10/100M FULL/HALF */ +#define CMD01_GET_PHY_STATUS 0x26 /* 获取PHY当前状态,如断开连接,10/100M FULL/HALF */ -#define CMD0W_INIT_CH395 0x27 /* ʼCH395 */ +#define CMD0W_INIT_CH395 0x27 /* 初始化CH395 */ -#define CMD08_GET_UNREACH_IPPORT 0x28 /* ȡɴϢ */ +#define CMD08_GET_UNREACH_IPPORT 0x28 /* 获取不可达信息 */ -#define CMD01_GET_GLOB_INT_STATUS 0x29 /* ȡȫж״ֵ̬Ϊ1SΪ0 */ +#define CMD01_GET_GLOB_INT_STATUS 0x29 /* 获取全局中断状态,最大值为1S,不可以设置为0 */ -#define CMD10_SET_RETRAN_COUNT 0x2A /* ԴTCPģʽЧ */ +#define CMD10_SET_RETRAN_COUNT 0x2A /* 重试次数,仅在TCP模式下有效 */ -#define CMD20_SET_RETRAN_PERIOD 0x2B /* ڣֵΪ20TCPģʽЧΪ0 */ +#define CMD20_SET_RETRAN_PERIOD 0x2B /* 重试周期,最大值为20,仅在TCP模式下有效,不可以设置为0 */ -#define CMD01_GET_CMD_STATUS 0x2C /* ȡִ״̬ */ +#define CMD01_GET_CMD_STATUS 0x2C /* 获取命令执行状态 */ -#define CMD06_GET_REMOT_IPP_SN 0x2D /* ȡԶ˵Ķ˿ԼIPַTCPģʽʹ */ +#define CMD06_GET_REMOT_IPP_SN 0x2D /* 获取远端的端口以及IP地址,该命令在TCP服务器模式下使用 */ -#define CMD10_CLEAR_RECV_BUF_SN 0x2E /* ջ */ +#define CMD10_CLEAR_RECV_BUF_SN 0x2E /* 清除接收缓冲区 */ -#define CMD12_GET_SOCKET_STATUS_SN 0x2F /* ȡsocket n״̬ */ +#define CMD12_GET_SOCKET_STATUS_SN 0x2F /* 获取socket n状态 */ -#define CMD11_GET_INT_STATUS_SN 0x30 /* ȡsocket nж״̬ */ +#define CMD11_GET_INT_STATUS_SN 0x30 /* 获取socket n的中断状态 */ -#define CMD50_SET_IP_ADDR_SN 0x31 /* socket nĿIPַ */ +#define CMD50_SET_IP_ADDR_SN 0x31 /* 设置socket n的目的IP地址 */ -#define CMD30_SET_DES_PORT_SN 0x32 /* socket nĿĶ˿ */ +#define CMD30_SET_DES_PORT_SN 0x32 /* 设置socket n的目的端口 */ -#define CMD30_SET_SOUR_PORT_SN 0x33 /* socket nԴ˿ */ +#define CMD30_SET_SOUR_PORT_SN 0x33 /* 设置socket n的源端口 */ -#define CMD20_SET_PROTO_TYPE_SN 0x34 /* socket nЭ */ +#define CMD20_SET_PROTO_TYPE_SN 0x34 /* 设置socket n的协议类型 */ -#define CMD1W_OPEN_SOCKET_SN 0x35 /* socket n */ +#define CMD1W_OPEN_SOCKET_SN 0x35 /* 打开socket n */ -#define CMD1W_TCP_LISTEN_SN 0x36 /* socket nյsocket nģʽTCPģʽЧ */ +#define CMD1W_TCP_LISTEN_SN 0x36 /* socket n监听,收到此命令,socket n进入服务器模式,仅对TCP模式有效 */ -#define CMD1W_TCP_CONNECT_SN 0x37 /* socket nӣյsocket nͻģʽTCPģʽЧ */ +#define CMD1W_TCP_CONNECT_SN 0x37 /* socket n连接,收到此命令,socket n进入客户端模式,仅对TCP模式有效 */ -#define CMD1W_TCP_DISNCONNECT_SN 0x38 /* socket nϿӣյsocket nϿӣTCPģʽЧ */ +#define CMD1W_TCP_DISNCONNECT_SN 0x38 /* socket n断开连接,收到此命令,socket n断开已有连接,仅对TCP模式有效 */ -#define CMD30_WRITE_SEND_BUF_SN 0x39 /* socket nд */ +#define CMD30_WRITE_SEND_BUF_SN 0x39 /* 向socket n缓冲区写入数据 */ -#define CMD12_GET_RECV_LEN_SN 0x3B /* ȡsocket nݵij */ +#define CMD12_GET_RECV_LEN_SN 0x3B /* 获取socket n接收数据的长度 */ -#define CMD30_READ_RECV_BUF_SN 0x3C /* ȡsocket nջ */ +#define CMD30_READ_RECV_BUF_SN 0x3C /* 读取socket n接收缓冲区数据 */ -#define CMD1W_CLOSE_SOCKET_SN 0x3D /* رsocket n */ +#define CMD1W_CLOSE_SOCKET_SN 0x3D /* 关闭socket n */ -#define CMD20_SET_IPRAW_PRO_SN 0x3E /* IP RAW£socket nIPЭ */ +#define CMD20_SET_IPRAW_PRO_SN 0x3E /* 在IP RAW下,设置socket n的IP包协议类型 */ -#define CMD01_PING_ENABLE 0x3F /* /رPING */ +#define CMD01_PING_ENABLE 0x3F /* 开启/关闭PING */ -#define CMD06_GET_MAC_ADDR 0x40 /* ȡMACַ */ +#define CMD06_GET_MAC_ADDR 0x40 /* 获取MAC地址 */ -#define CMD10_DHCP_ENABLE 0x41 /* DHCPʹ */ +#define CMD10_DHCP_ENABLE 0x41 /* DHCP使能 */ -#define CMD01_GET_DHCP_STATUS 0x42 /* ȡDHCP״̬ */ +#define CMD01_GET_DHCP_STATUS 0x42 /* 获取DHCP状态 */ -#define CMD014_GET_IP_INF 0x43 /* IP,룬 */ +#define CMD014_GET_IP_INF 0x43 /* IP,子网掩码,网关 */ -#define CMD00_PPPOE_SET_USER_NAME 0x44 /* PPPOEû */ +#define CMD00_PPPOE_SET_USER_NAME 0x44 /* 设置PPPOE用户名 */ -#define CMD00_PPPOE_SET_PASSWORD 0x45 /* */ +#define CMD00_PPPOE_SET_PASSWORD 0x45 /* 设置密码 */ -#define CMD10_PPPOE_ENABLE 0x46 /* PPPOEʹ */ +#define CMD10_PPPOE_ENABLE 0x46 /* PPPOE使能 */ -#define CMD01_GET_PPPOE_STATUS 0x47 /* ȡpppoe״̬ */ +#define CMD01_GET_PPPOE_STATUS 0x47 /* 获取pppoe状态 */ -#define CMD20_SET_TCP_MSS 0x50 /* TCP MSS */ +#define CMD20_SET_TCP_MSS 0x50 /* 设置TCP MSS */ -#define CMD20_SET_TTL 0x51 /* TTLTTLֵΪ128 */ +#define CMD20_SET_TTL 0x51 /* 设置TTL,TTL最大值为128 */ -#define CMD30_SET_RECV_BUF 0x52 /* SOCKETջ */ +#define CMD30_SET_RECV_BUF 0x52 /* 设置SOCKET接收缓冲区 */ -#define CMD30_SET_SEND_BUF 0x53 /* SOCKETͻ */ +#define CMD30_SET_SEND_BUF 0x53 /* 设置SOCKET发送缓冲区 */ -#define CMD10_SET_MAC_RECV_BUF 0x54 /* MACջ */ +#define CMD10_SET_MAC_RECV_BUF 0x54 /* 设置MAC接收缓冲区 */ -#define CMD40_SET_FUN_PARA 0x55 /* ùܲ */ +#define CMD40_SET_FUN_PARA 0x55 /* 设置功能参数 */ -#define CMD40_SET_KEEP_LIVE_IDLE 0x56 /* KEEPLIVE */ +#define CMD40_SET_KEEP_LIVE_IDLE 0x56 /* 设置KEEPLIVE空闲 */ -#define CMD40_SET_KEEP_LIVE_INTVL 0x57 /* üʱ */ +#define CMD40_SET_KEEP_LIVE_INTVL 0x57 /* 设置间隔时间 */ -#define CMD10_SET_KEEP_LIVE_CNT 0x58 /* Դ */ +#define CMD10_SET_KEEP_LIVE_CNT 0x58 /* 重试次数 */ -#define CMD20_SET_KEEP_LIVE_SN 0X59 /* socket nkeeplive*/ +#define CMD20_SET_KEEP_LIVE_SN 0X59 /* 设置socket nkeeplive功能*/ -#define CMD00_EEPROM_ERASE 0xE9 /* EEPROM*/ +#define CMD00_EEPROM_ERASE 0xE9 /* 擦除EEPROM*/ -#define CMD30_EEPROM_WRITE 0xEA /* дEEPROM */ +#define CMD30_EEPROM_WRITE 0xEA /* 写EEPROM */ -#define CMD30_EEPROM_READ 0xEB /* EEPROM */ +#define CMD30_EEPROM_READ 0xEB /* 读EEPROM */ -#define CMD10_READ_GPIO_REG 0xEC /* GPIOĴ */ +#define CMD10_READ_GPIO_REG 0xEC /* 读GPIO寄存器 */ -#define CMD20_WRITE_GPIO_REG 0xED /* дGPIOĴ */ +#define CMD20_WRITE_GPIO_REG 0xED /* 写GPIO寄存器 */ -/* Э */ -#define PROTO_TYPE_IP_RAW 0 /* IPԭʼ */ -#define PROTO_TYPE_MAC_RAW 1 /* MACԭʼ */ -#define PROTO_TYPE_UDP 2 /* UDPЭ */ -#define PROTO_TYPE_TCP 3 /* TCPЭ */ +/* 协议类型 */ +#define PROTO_TYPE_IP_RAW 0 /* IP层原始数据 */ +#define PROTO_TYPE_MAC_RAW 1 /* MAC层原始数据 */ +#define PROTO_TYPE_UDP 2 /* UDP协议类型 */ +#define PROTO_TYPE_TCP 3 /* TCP协议类型 */ -/* PHY /״̬ */ -#define PHY_DISCONN (1<<0) /* PHYϿ */ -#define PHY_10M_FLL (1<<1) /* 10Mȫ˫ */ -#define PHY_10M_HALF (1<<2) /* 10M˫ */ -#define PHY_100M_FLL (1<<3) /* 100Mȫ˫ */ -#define PHY_100M_HALF (1<<4) /* 100M˫ */ -#define PHY_AUTO (1<<5) /* PHYԶģʽCMD10H_SET_PHY */ -#define PHY_ERROR (1<<6) /* PHY */ +/* PHY 命令参数/状态 */ +#define PHY_DISCONN (1<<0) /* PHY断开 */ +#define PHY_10M_FLL (1<<1) /* 10M全双工 */ +#define PHY_10M_HALF (1<<2) /* 10M半双工 */ +#define PHY_100M_FLL (1<<3) /* 100M全双工 */ +#define PHY_100M_HALF (1<<4) /* 100M半双工 */ +#define PHY_AUTO (1<<5) /* PHY自动模式,CMD10H_SET_PHY */ +#define PHY_ERROR (1<<6) /* PHY错误 */ -/* CH395 MAC */ -#define MAC_FILT_RECV_BORADPKT (1<<0) /* ʹܽչ㲥 */ -#define MAC_FILT_RECV_ALL (1<<1) /* ʹܽݰ */ -#define MAC_FILT_RECV_MULTIPKT (1<<2) /* ʹܽնಥ */ -#define MAC_FILT_RECV_ENABLE (1<<3) /* ʹܽ */ -#define MAC_FILT_SEND_ENABLE (1<<4) /* ʹܷ */ +/* CH395 MAC过滤 */ +#define MAC_FILT_RECV_BORADPKT (1<<0) /* 使能接收广播包 */ +#define MAC_FILT_RECV_ALL (1<<1) /* 使能接收所有数据包 */ +#define MAC_FILT_RECV_MULTIPKT (1<<2) /* 使能接收多播包 */ +#define MAC_FILT_RECV_ENABLE (1<<3) /* 使能接收 */ +#define MAC_FILT_SEND_ENABLE (1<<4) /* 使能发送 */ -/* ж״̬ */ -/* ΪGLOB_INT״̬ */ -#define GINT_STAT_UNREACH (1<<0) /* ɴж */ -#define GINT_STAT_IP_CONFLI (1<<1) /* IPͻ */ -#define GINT_STAT_PHY_CHANGE (1<<2) /* PHY״̬ı */ -#define GINT_STAT_DHCP (1<<3) /* PHY״̬ı */ -#define GINT_STAT_SOCK0 (1<<4) /* socket0 ж */ -#define GINT_STAT_SOCK1 (1<<5) /* socket1 ж */ -#define GINT_STAT_SOCK2 (1<<6) /* socket2 ж */ -#define GINT_STAT_SOCK3 (1<<7) /* socket3 ж */ -#define GINT_STAT_SOCK4 (1<<8) /* scoket4 ж */ -#define GINT_STAT_SOCK5 (1<<9) /* scoket5 ж */ -#define GINT_STAT_SOCK6 (1<<10) /* scoket6 ж */ -#define GINT_STAT_SOCK7 (1<<11) /* scoket7 ж */ +/* 中断状态 */ +/* 以下为GLOB_INT会产生的状态 */ +#define GINT_STAT_UNREACH (1<<0) /* 不可达中断 */ +#define GINT_STAT_IP_CONFLI (1<<1) /* IP冲突 */ +#define GINT_STAT_PHY_CHANGE (1<<2) /* PHY状态改变 */ +#define GINT_STAT_DHCP (1<<3) /* PHY状态改变 */ +#define GINT_STAT_SOCK0 (1<<4) /* socket0 产生中断 */ +#define GINT_STAT_SOCK1 (1<<5) /* socket1 产生中断 */ +#define GINT_STAT_SOCK2 (1<<6) /* socket2 产生中断 */ +#define GINT_STAT_SOCK3 (1<<7) /* socket3 产生中断 */ +#define GINT_STAT_SOCK4 (1<<8) /* scoket4 产生中断 */ +#define GINT_STAT_SOCK5 (1<<9) /* scoket5 产生中断 */ +#define GINT_STAT_SOCK6 (1<<10) /* scoket6 产生中断 */ +#define GINT_STAT_SOCK7 (1<<11) /* scoket7 产生中断 */ -/* ΪSn_INT״̬ */ -#define SINT_STAT_SENBUF_FREE (1<<0) /* ͻ */ -#define SINT_STAT_SEND_OK (1<<1) /* ͳɹ */ -#define SINT_STAT_RECV (1<<2) /* socket˿ڽյݻ߽ջΪ */ -#define SINT_STAT_CONNECT (1<<3) /* ӳɹ,TCPģʽ²ж */ -#define SINT_STAT_DISCONNECT (1<<4) /* ӶϿ,TCPģʽ²ж */ -#define SINT_STAT_TIM_OUT (1<<6) /* ARPTCPģʽ»ᷢж */ +/* 以下为Sn_INT会产生的状态 */ +#define SINT_STAT_SENBUF_FREE (1<<0) /* 发送缓冲区空闲 */ +#define SINT_STAT_SEND_OK (1<<1) /* 发送成功 */ +#define SINT_STAT_RECV (1<<2) /* socket端口接收到数据或者接收缓冲区不为空 */ +#define SINT_STAT_CONNECT (1<<3) /* 连接成功,TCP模式下产生此中断 */ +#define SINT_STAT_DISCONNECT (1<<4) /* 连接断开,TCP模式下产生此中断 */ +#define SINT_STAT_TIM_OUT (1<<6) /* ARP和TCP模式下会发生此中断 */ -/* ȡ״̬ */ -#define CMD_ERR_SUCCESS 0x00 /* ɹ */ -#define CMD_RET_ABORT 0x5F /* ʧ */ -#define CH395_ERR_BUSY 0x10 /* æ״̬ʾǰִ */ -#define CH395_ERR_MEM 0x11 /* ڴ */ -#define CH395_ERR_BUF 0x12 /* */ -#define CH395_ERR_TIMEOUT 0x13 /* ʱ */ -#define CH395_ERR_RTE 0x14 /* ·ɴ*/ -#define CH395_ERR_ABRT 0x15 /* ֹͣ*/ -#define CH395_ERR_RST 0x16 /* Ӹλ */ -#define CH395_ERR_CLSD 0x17 /* ӹر/socket ڹر״̬ */ -#define CH395_ERR_CONN 0x18 /* */ -#define CH395_ERR_VAL 0x19 /* ֵ */ -#define CH395_ERR_ARG 0x1a /* IJ */ -#define CH395_ERR_USE 0x1b /* Ѿʹ */ -#define CH395_ERR_IF 0x1c /* MAC */ -#define CH395_ERR_ISCONN 0x1d /* */ -#define CH395_ERR_OPEN 0X20 /* Ѿ */ -#define CH395_ERR_UNKNOW 0xFA /* δ֪ */ - -/* PPP״̬ */ -#define CH395_PPP_SUCCESS 0 /* ɹ */ -#define CH395_PPPERR_PARM 1 /* Ч */ -#define CH395_PPPERR_OPEN 2 /* ޷PPPỰ */ -#define CH395_PPPERR_DEVICE 3 /* ЧPPP豸 */ -#define CH395_PPPERR_ALLOC 4 /* Դʧ */ -#define CH395_PPPERR_USER 5 /* ûж */ -#define CH395_PPPERR_CONNECT 6 /* ӶϿ */ -#define CH395_PPPERR_AUTHFAIL 7 /* սʧ */ -#define CH395_PPPERR_PROTOCOL 8 /* Эʧ */ -#define CH395_PPPERR_TIME_OUT 9 /* ʱʧ */ -#define CH395_PPPERR_CLOSE 10 /* رʧ */ - -/* ɴ */ -#define UNREACH_CODE_HOST 0 /* ɴ */ -#define UNREACH_CODE_NET 1 /* 粻ɴ */ -#define UNREACH_CODE_PROTOCOL 2 /* Э鲻ɴ */ -#define UNREACH_CODE_PROT 3 /* ˿ڲɴ */ -/* ֵοRFC792ĵ */ - -/* ͷ */ -#define SER_SYNC_CODE1 0x57 /* ͬ1 */ -#define SER_SYNC_CODE2 0xAB /* ͬ2 */ - -/* TCP״̬ */ +/* 获取命令状态 */ +#define CMD_ERR_SUCCESS 0x00 /* 命令操作成功 */ +#define CMD_RET_ABORT 0x5F /* 命令操作失败 */ +#define CH395_ERR_BUSY 0x10 /* 忙状态,表示当前正在执行命令 */ +#define CH395_ERR_MEM 0x11 /* 内存错误 */ +#define CH395_ERR_BUF 0x12 /* 缓冲区错误 */ +#define CH395_ERR_TIMEOUT 0x13 /* 超时 */ +#define CH395_ERR_RTE 0x14 /* 路由错误*/ +#define CH395_ERR_ABRT 0x15 /* 连接停止*/ +#define CH395_ERR_RST 0x16 /* 连接复位 */ +#define CH395_ERR_CLSD 0x17 /* 连接关闭/socket 在关闭状态 */ +#define CH395_ERR_CONN 0x18 /* 无连接 */ +#define CH395_ERR_VAL 0x19 /* 错误的值 */ +#define CH395_ERR_ARG 0x1a /* 错误的参数 */ +#define CH395_ERR_USE 0x1b /* 已经被使用 */ +#define CH395_ERR_IF 0x1c /* MAC错误 */ +#define CH395_ERR_ISCONN 0x1d /* 已连接 */ +#define CH395_ERR_OPEN 0X20 /* 已经打开 */ +#define CH395_ERR_UNKNOW 0xFA /* 未知错误 */ + +/* PPP状态 */ +#define CH395_PPP_SUCCESS 0 /* 成功 */ +#define CH395_PPPERR_PARM 1 /* 无效参数 */ +#define CH395_PPPERR_OPEN 2 /* 无法打开PPP会话 */ +#define CH395_PPPERR_DEVICE 3 /* 无效的PPP设备 */ +#define CH395_PPPERR_ALLOC 4 /* 资源分配失败 */ +#define CH395_PPPERR_USER 5 /* 用户中断 */ +#define CH395_PPPERR_CONNECT 6 /* 连接断开 */ +#define CH395_PPPERR_AUTHFAIL 7 /* 挑战鉴别失败 */ +#define CH395_PPPERR_PROTOCOL 8 /* 握手协议失败 */ +#define CH395_PPPERR_TIME_OUT 9 /* 超时失败 */ +#define CH395_PPPERR_CLOSE 10 /* 关闭失败 */ + +/* 不可达代码 */ +#define UNREACH_CODE_HOST 0 /* 主机不可达 */ +#define UNREACH_CODE_NET 1 /* 网络不可达 */ +#define UNREACH_CODE_PROTOCOL 2 /* 协议不可达 */ +#define UNREACH_CODE_PROT 3 /* 端口不可达 */ +/* 其他值请参考RFC792文档 */ + +/* 命令包头 */ +#define SER_SYNC_CODE1 0x57 /* 串口命令同步码1 */ +#define SER_SYNC_CODE2 0xAB /* 串口命令同步码2 */ + +/* TCP状态 */ #define TCP_CLOSED 0 #define TCP_LISTEN 1 #define TCP_SYN_SENT 2 @@ -251,19 +251,19 @@ extern "C" { #define TCP_LAST_ACK 9 #define TCP_TIME_WAIT 10 -/* GPIOĴַ */ -#define GPIO_DIR_REG 0x80 /* ĴĴ1;0: */ -#define GPIO_IN_REG 0x81 /* GPIOĴ */ -#define GPIO_OUT_REG 0x82 /* GPIOĴ */ -#define GPIO_CLR_REG 0x83 /* GPIO: 0=keep, 1=clear */ -#define GPIO_PU_REG 0x84 /* GPIOʹܼĴ */ -#define GPIO_PD_REG 0x85 /* GPIOʹܼĴ */ +/* GPIO寄存器地址 */ +#define GPIO_DIR_REG 0x80 /* 寄存器方向寄存器,1:输出;0:输入 */ +#define GPIO_IN_REG 0x81 /* GPIO输入寄存器 */ +#define GPIO_OUT_REG 0x82 /* GPIO输出寄存器 */ +#define GPIO_CLR_REG 0x83 /* GPIO输出清除: 0=keep, 1=clear */ +#define GPIO_PU_REG 0x84 /* GPIO上拉使能寄存器 */ +#define GPIO_PD_REG 0x85 /* GPIO下拉使能寄存器 */ -/* ܲ */ -#define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server ģʽ־0X44汾Ժ֧ */ -#define FUN_PARA_FLAG_LOW_PWR (1<<2) /* ͺģʽ */ -#define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395رSocket */ -#define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send okжϿλΪ1ʾرsend okж */ +/* 功能参数 */ +#define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server 多连接模式标志,0X44版本及以后支持 */ +#define FUN_PARA_FLAG_LOW_PWR (1<<2) /* 低耗能模式 */ +#define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395不主动关闭Socket */ +#define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send ok中断控制位,为1表示关闭send ok中断 */ #ifdef __cplusplus } diff --git a/MDK-ARM/VOQC.uvguix.admin b/MDK-ARM/VOQC.uvguix.admin index 1b8b21c..9abced7 100644 --- a/MDK-ARM/VOQC.uvguix.admin +++ b/MDK-ARM/VOQC.uvguix.admin @@ -20,7 +20,7 @@ 346 Code Coverage - 710 173 + 710 181 204 @@ -93,8 +93,8 @@ 2 3 - -1 - -1 + -32000 + -32000 -1 @@ -110,8 +110,8 @@ 0 - 850 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000010000000100000064433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF6B433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C5372635C70726F76616C6374726C2E63000000000C70726F76616C6374726C2E6300000000FFDC7800FFFFFFFF6B433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C496E635C70726F76616C6374726C2E68000000000C70726F76616C6374726C2E6800000000BECEA100FFFFFFFF72433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E73000000009CC1B600FFFFFFFF66433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C5372635C74696D65722E63000000000774696D65722E6300000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FF00000066000000A0050000DD020000 + 1096 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000007000000040000000100000064433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF6B433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C5372635C70726F76616C6374726C2E63000000000C70726F76616C6374726C2E6300000000FFDC7800FFFFFFFF6B433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C496E635C70726F76616C6374726C2E68000000000C70726F76616C6374726C2E6800000000BECEA100FFFFFFFF66433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C5372635C74696D65722E63000000000774696D65722E6300000000F0A0A100FFFFFFFF6C433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C6D6F646275735C5372635C6D6F646275735F7274752E63000000000C6D6F646275735F7274752E6300000000F7B88600FFFFFFFF68433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C6D6F646275735C5372635C6D6F646275732E6300000000086D6F646275732E6300000000D9ADC200FFFFFFFF68433A5C55736572735C61646D696E5C4465736B746F705C77756A756E6368616F5C30305F50726F6A656374735C30325F4163747561746F722054657374696E675C30305F436F64655C30305F4E65775C564F51435C75736572735C5372635C656E636F6465722E630000000009656E636F6465722E6300000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FF00000066000000A0050000DD020000 @@ -1806,7 +1806,7 @@ File 2550 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000043936303096000000000000000100043936303000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000043936303096000000000000000100043936303000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 968 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000004564F51439600000000000000010004564F5143000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000004564F51439600000000000000010004564F5143000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1871,11 +1871,11 @@ 0 16 - E30000004F00000060040000CA000000 + E30000004F00000068040000CA000000 16 - E30000006600000060040000E1000000 + E30000006600000068040000E1000000 @@ -1931,11 +1931,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -1951,11 +1951,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -1971,11 +1971,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -1991,11 +1991,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2031,7 +2031,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -2051,11 +2051,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2071,11 +2071,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2091,11 +2091,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2111,11 +2111,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2131,11 +2131,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2151,11 +2151,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2171,11 +2171,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2251,7 +2251,7 @@ 0 16 - 00000000AB0200006004000066030000 + 00000000AB0200006804000066030000 16 @@ -2291,7 +2291,7 @@ 0 16 - E30000006300000060040000CA000000 + E30000006300000068040000CA000000 16 @@ -2311,7 +2311,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -2371,11 +2371,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2391,7 +2391,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -2411,7 +2411,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -2431,7 +2431,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -2451,7 +2451,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -2951,11 +2951,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -2971,11 +2971,11 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 @@ -3031,7 +3031,7 @@ 0 16 - E6000000660000005D040000B1000000 + E60000006600000065040000B1000000 16 @@ -3531,23 +3531,23 @@ 0 16 - 67040000660000009D0500004D030000 + 6F040000660000009D0500004D030000 16 - 49040000A5FFFFFF8D050000BC020000 + 3A050000DA01000076060000F1040000 3415 - 000000000C000000000000000020000001000000FFFFFFFFFFFFFFFFE3000000CA00000060040000CE000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000E30000006600000060040000E1000000E30000004F00000060040000CA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF700300004F00000074030000D6010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000740300006600000028040000ED010000740300004F00000028040000D601000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFDF0000004F000000E3000000A7020000010000000200001004000000010000004EFFFFFF7B030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000DF000000BE020000000000004F000000DF000000A70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000A702000060040000AB0200000100000001000010040000000100000046FEFFFF7000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFD0020000D7020000D40200006603000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000D601000028040000DA010000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000000000000000000F1010000280400006C02000000000000DA01000028040000550200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFF600400004F000000640400006603000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF0F0000009307000094070000950700009607000091070000B5010000B801000038030000BA050000BB050000BC050000CB0900008F07000090070000B9050000018000400000010000006404000066000000A00500007D030000640400004F000000A00500006603000000000000404100560F0000000755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF1343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF0D00000000000000000000000000000000000000000000000000000001000000FFFFFFFF9307000001000000FFFFFFFF93070000000000000000000000000000 + 000000000C000000000000000020000001000000FFFFFFFFFFFFFFFFE3000000CA00000068040000CE000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000E30000006600000068040000E1000000E30000004F00000068040000CA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF700300004F00000074030000D6010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000740300006600000028040000ED010000740300004F00000028040000D601000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFDF0000004F000000E3000000A7020000010000000200001004000000010000004EFFFFFF7B030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000DF000000BE020000000000004F000000DF000000A70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000A702000068040000AB0200000100000001000010040000000100000046FEFFFF7000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFD0020000D7020000D40200006603000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000D601000028040000DA010000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000000000000000000F1010000280400006C02000000000000DA01000028040000550200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFF680400004F0000006C0400006603000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF0F0000009307000094070000950700009607000091070000B5010000B801000038030000BA050000BB050000BC050000CB0900008F07000090070000B9050000018000400000010000006C04000066000000A00500007D0300006C0400004F000000A00500006603000000000000404100560F0000000755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF1343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF0D00000000000000000000000000000000000000000000000000000001000000FFFFFFFF9307000001000000FFFFFFFF93070000000000000000000000000000 59392 File 2550 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000043936303096000000000000000100043936303000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000043936303096000000000000000100043936303000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -3563,7 +3563,7 @@ Build 955 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3579,7 +3579,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020000002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020000002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,48 +3603,66 @@ 0 100 - 1 + 4 ../Core/Src/main.c - 0 - 208 - 84 + 13 + 113 + 142 1 0 ..\users\Src\provalctrl.c - 1 - 153 - 166 + 2 + 1 + 148 1 0 ../users/Inc/provalctrl.h - 42 + 22 1 - 42 - 1 - - 0 - - - startup_stm32f407xx.s - 0 - 164 - 174 + 14 1 0 ..\users\Src\timer.c - 18 - 10 - 42 + 1 + 42 + 72 + 1 + + 0 + + + ..\modbus\Src\modbus_rtu.c + 40 + 1 + 16 + 1 + + 0 + + + ..\modbus\Src\modbus.c + 17 + 1 + 4 + 1 + + 0 + + + ..\users\Src\encoder.c + 22 + 1 + 16 1 0 diff --git a/MDK-ARM/VOQC.uvoptx b/MDK-ARM/VOQC.uvoptx index 9f8c938..39ce3e5 100644 --- a/MDK-ARM/VOQC.uvoptx +++ b/MDK-ARM/VOQC.uvoptx @@ -185,6 +185,11 @@ 1 p_flt_window,0x0A + + 6 + 1 + DisState + 0 diff --git a/MDK-ARM/VOQC/VOQC.axf b/MDK-ARM/VOQC/VOQC.axf index 344ff9960b1f3df6489ca60d6423134ecc0ee6c4..71f17291b6cccc7b14b3b697681cf9161e6fd21e 100644 GIT binary patch delta 9113 zcmZ9S3tUxI_Q&@+mjf46yjM^GLAa=(k|L?40Rle37d}w)1@TfzLPRt(6Ra$=Ol_k( zGefP$W=22hkaL|$)0#AEY!q{v=0DZY|KH;?g+-IhUM+4rpPT5CVg z-fORWwe@^<+xhI>vHI0GhiE(LxX4%OUhuQ`YF$ zL#SE)aL<5D9^GXvEuHIju2Ri3Ve?T3Zn29u0oZV9}D- zqP0bJ^J-~rv*n_x%bl{T@y15e`|aCW+cbG$>W{;2qaL@DW?ClP_P3L2asm3`Hg?Fr zPy2yBl~;0e=uPR&OQqLkPF{rb)h>}puHf8GPm+%kMB71Gp4UjTq&|I!^B%)yhwaU7 zw%sYyr@uV@DtZ`z9^W>5_?6c`f^#OnWzOWR$uGdpBN!4q~ z&DyV;Tw&I}As<5RDzo-()0%76e%55(LA;93m^{v`eMbHbwKL7y)++WlYi}^UQ_R}6 zCWn}{pO%?3hmG%P)-E!wUw8QDz1-wmuyfx_P5u~mp7#>jI5TzpC%62oHpR65#;iTb z%$$L?o&($!K*BY&BZSArGwKtf3N1E0- zX5ao(sI`@uwH>BC8}?|7{9XCSS;r|tJ~TU?Y;ynXyXhO*JUfm4ByIVRQMPIy9{Q`-GUr8_9C(oakNybF=?#kC8`V?`zs4*)G4HlN2PxBa>y%xk+KI zUZ3Z;ojy;uw<%+82Gyxsl$h-V}7g9mAe*Oy z;F37nCHF3ArUbci=}!8qY+pK!PRYz=GoXKJ*<4y7|F*217R%=4qv>B#FPubiGOsYl zdC#piZ6xei8GAAB*SF+>!YPy{zbK50Zn-TI{A0 zBSgYeGOeUP&5(H|Yw>E|ELlLmlg`p~nkQ$Ky0tfN%QGbf6bV(l+*B4z$E7MeO5e+@ z@-%u%t}RceM0vbi(Ryf-W#x)63O2NjvT4QLd4+SNicIZgYe(WAPl|A&SJ>fH_OTed>cPMm!X5@qPQ;dHp%gt) zmT5v1Hl5wNw3i+U^EjFFXao(FX}jX-x}3Xf5M{{yy9UVJyX>?b(jfiB3SnO;=ROvp zZ=NsgkIKW_B7+tQdxqTlSY*&bVPC>FO)QcFclXoE7RkarG1MaG?jE3Df?JeP^Go>k zGkV%65AKfFvKPyjcE;$f3xqw19c0_?N;)Bz?-`(9TP5s?^6<|7vSCjYb;{#=`eVyp z*z=w~rcl`L;qId#l=!FhxQ2-(KyJYNs^!_|1|cSV@mxBp#K}}TBxm9Cn0y4Ec6l71 z+43`dPL{nIQt775#OE3LKtnvW$(;?;^wv4To^6cy7#1~#rRd98r69D9MKpTjMI3As zB1*>Xou=pz>8GRkZ6!t?PoQ-1aQXv`;ie=^$6 z*}sTloA&R&zH9IaG(H%Eg{R1BCyEL#uPR+rR$fz7v%X4@VOD#F(RE`O`_%ozX@FmJ z?-)*DHr-x?WmWq}&>&NMdjx%>XYfqa@sZ>*#g9f(yD`63^!2NjQn8ch0`Wx`&qHciH& z7^3?KMAC0!?02aTroh_}kN!A?wBX6BvHX?FGYu2>%kKDGdX)6+`*BXxFY>U6hUmVW zN2f@)R|@-S^~4OcVuGzP6@(Wl>G- zdO?Phd(kX9Li(XHVLzg}XH&dibSLK1%cK{S3j03w!5kXw7u`S2p>Jt;P>HZlhv^Vv zL{>u(r5UZ4uBoV8S6f_L?r+|3a)->P?@6!5(tNFM6;P62bPriTxio4!PT#jEtNNjx zTfE^OSW{NAeqB+`#-h>^L6-f+Uc4nmr#ifVE*popN>weQfqv1wXA#x)&Ub%=?k*@N2N|*Crm9$hPC2aHRL`uSn>z2*Yiip{EWaVTkF6w6u#1CHAH=Ck3I2^V z1bc2>bDkz8N7RdJXp|{7uc1zTBPxEWu2oZtUvz70X#k~i+`ENR zkSN52XEj<8TDC52T*;lIiYlrq(5^8%%SlA2oaZP)71hw6k~ns@pqxO>EDzDrV5=tH zRt>5e4r=~7`dDYbd1_=WwwYfnsHHBw4B98u!u2%7FS_g3Qz+>I>O%GG1{xe@h`>W; z$5%Gc=P6MbZVk#SgE8bo8ukA7kV{vUm##L)YD!S|TvB0=;E4LgJ0GE+^bBY>tKnOq^^5biKzkk9C^fwfuiP)Lt)rW+ zq4R{j3ga0w4Bh-jLzF3AQ}kd>MQynt!{&aXo+8M&Cugdcwjyxyl{wS>)>fL>mqsd5 z6hjl-v5JPwqa^plf6)ASdLdjY)eGrbj4A#uU2D<#DlSwnWoS{R_-2Ooxn2qFMfFmq z7Vj6`?__GdDVcBd**F73Ul1ZFNUuP6obb3t)Aa|6D-hHBGz-JS-7!Hs5=1A|fl1nf zbgw&NvX-ckUEMWR`-U>qz-gMIPWNx8Y26yV=sq=F`vXp^`=OayGSOvqc$W5SI;LjL z))rE$`<2<+CZaYKKSz6v&Zw8?Xs^>v_x!oq45G=Zah~=bWvi9*H4oY^D$w3U%>fIv zpXiY4y%5R*cgP~`ZoGVV*1cLfQMGz_vGz1=S0PKZhiQ!au_fADK~$h77HPLJrV00H zsYKUQRk5~`PPjiV)^=#riu0^3MK@>5v^}&@<(F%X^riZt9Lh^-#tN;JTGZ<+FsU*% zZKbvbIfpvEQhS1;RMslYWxM;kRoW4v&Fb0vQS*cvxmv5n5E@r&rFPy7I@vx~Rh3#l zl~AcorR!>CCAuH#zEY`$5JkHG@_?qQs8Fr>RGW{n{^3(CpDIHF$9nJ_}2Ab|iT?!XW%=Ge$XvY73g1DNf+s{`$q z0+{W*lLPHh*v=NiUMF}DTMF)g_qxU003SPx*}fxy+1?PqZ0ECU`Lmr5gT-v08Nj{J zzu-+D=x{NBxdFb$1MPg}Tg-M2yB2c?9G)#^J4Ydl+0Jpx;$G-qa9Fk!?7*?uVs3yV zpv7!23}Ci%3=On%oU@qi9E2_A`ty*CSzN~socdV`cGwrdZ0GbW&~9aN0(*w-eA@)t zj|4E=Il~FGb0%bRozVaXia-YrD;9GDeAQaa1H6oj)nc~u?P@XG-@r|4G21yivY72( zBWdt+oqqEdVPX%s(Q=Y&EI7hOW?VL_o%pL4Q)@3ol4>#APX{m$;CukH-Co81+`rj?!%+B{9eP&(r$KJO5x{I87r;gb0nGNuwLh;P z6~Jt-W;Xga2T=Q84y)Gvyn)I9<_4Y*U>?As0A{%T= z*&!-`xr5jMM#3wSRQp5WKcra!)P`n$4>ji&cnIeA@Z|i#;%gADy8AvHelEnBgyz`5 zepzTg$^F%%;f*?tbZ^@pUPn3B)x-A3qyKZ&Fh2*jt`_D-uyvC#{|X$brtAnWa#|M% ztK(y^lhvsm;aPQ7SZ4JqsI4f>{4kgkUTf4lz*ZDy`$4c3b(v3sIfbeG0lp1tZs+eif_z8_{z=S2&}&Pg0HFd&xHHx ztT4xJiE-FrW>jNN2U}5&c@Ef$YRn~ID~d6%1zSOfc^lXYGRz0TR#0JnJx)v%RuEyu zJ8cX*M@imdFkA^~B;45Z98;7+w|cX++cgk zj}i?oA)3vop}~FtoQpGbJ;0wC)$m8+7qBl@LmI;4T^vhJ;5RI**}&Lx32yyWIozD* z5i$x<*K#|r_BMp4Iuj5GmISC1)Subg`pw1i-lX)sP`?K6BLUv8sj;k{S%YtM0VAEM z%J+u<-N`}X#Q^U^YQa8uXJ8)un~~LahT66-JPThJF6;~cA;`%mpMRsX%(3nZ2g27x z*4>zcpQ51eqmf9-5rTg|wfJuEQvo~){AciF(|TgXmcV1%6R96kFi%0GOAK9i9Y#2a-1kgVa0oxume(KzLn z|F6Lhfh$e>8SqzN{DffmzYivyVt!-X-v8tvdY40iZ@-436%J2SK3H^ zhvncdy+D}WPCE(CuRz*XROur+|K;2cCLt3wH% zf=uL$S^p?F6fxn1!N?we55?PNkl;=6p2;(LKnMySf}Lh&VQd!gUX$Qf zxBk=Up`*^&q#tUomF1(FbjB=anr5cQMEz$fXME6Q6e(T(GrrYrOoO{-H{np<5 zoPG9QXWgqECvz^H%xO;0&m}s?L`JA8W3>B#oTd{GtBQEaN=rus&k z9-2m!(v}{kX!4$3Ejbu5p~-s3=H94+Gj(CGntCG&Y%4=uqhLST8-$30?hx1wy&(m* zx<0U0^adB?*V$k#YYUH<>ZIYaC~-7Rked^eXhPfm#1A6rqFkLem?pJ7llEdCI^H&M z^viwd19^4Afap`*B4zduO)Eq4dpy&7!;-1vm`uz}qJuI!b3|-Q_o9$syFWrlM4S=v zXxqljf7zU|os`lNbQ9eF=Or|Zk`GTALO0s>PuWZ(PW0qn>W`V&ZrrQZq2b=+!P^WL z?FH>x$4$LFTUy7RazWlgXG>4(<#lHCi5ptSRQYb+cf-7B$Ni+6O4bd3KO;@P3*&Gf zkI65lU8PUt2l=`5nsgS7q?crFLA3M59+5(>ko;~>s*jRI$1}3Bpp|AwefnVMctf*6 zd!v`NQ8IJ-iy7xJ!T^kT${gXK*M9{kOg?Vj$(ttcg3ecvAY*3?%h+qSK4hwE&DIA@ ze$s5c-{hrc>wn4hXkBBrZZ_3Cv-Q&^^9tfwe9GjpX6x7Gr)ZsNwzg)mpV@ki89mHw z-C(kAwtie@-#IKJ%xqn1s(Aq z%(4BuQ0pi+TRTks4(Rc?^3(G7GhZU7Tt6#`Nba6Bj{YGp%u1(oGHCYC=nlDMb^*R`ZIKCf5}3QwDc+j%?R%>34xroIw-e-H7-WEgRND zhW^h^k@BUM0d6q(tIpW=AS3>QHX7b)BR(Bgg`xie@w0yrWw*dn(iPT-A74)3phS>S=aQFu0*D-@pnhNr&~p@a9z)psXFPwOoBcU)aWL1=@$3_Z%r)QRYDUod*gadF?euPQ`0-fJS4d+xz|&F87_;ibww zUz6|NlSY4%-`&%%F|M=M^SjO-&qqByo((vr;Arpd@pR)z@b!51;dl$jUvT`}*XxNu z>@3*zKAzRfJwA^M-urR>+}rC(^Z7iUZqaeE)8{Ga?e$!S?emI`vKxKceV#l-&As9C z%#kBX$r*#qek381&SWZINj9pD} zd7^6LTsvaEx*?MNbICKg{>0~oJ&rA1`aRrM|YFyCxDVDGm@-3$vqyIH#x7z zbF;U{b4A{$ijR!)4h2UT-caePewbopYjqh-m9#8_zL1&ATB%lkx@qHcaN}bfWMDjh!~tZAy>(kjj{2CbA>Gop4{jSPs1r9aNMg2QQUTFV@V`AWa8FX z%-fi)N%Wzdw{;+mmwUGk2u()VcEoQ24Wz^J)Ye#i-5gto|9SdbzPBmfn#on`8BMw75ySwnkHfe7-q}vgE1e z0rai>y!mGst*m7LoyTXiY;H-$nmmejh4O66do)V6Y>SQGbf2)52aK0&j#nd3Z5v2J z{$pDv;$3ni?U6S-N&i(|1(~TMXZo+_WPO*SU8`Eavak9YZkI=Q~DX z;YRL^#r+K4>7(Ovu$naU}G?wLGs;O33Q6`i9a~m9-Uu4ADJxG|kub zn5Dv&ubvxESUPOFkB_GVL4$dU&&?AyUZxX&AhL&4R4=V=D61)5+)!U5$k5eeS@cK! zAa41zT9l0*4AcEkHl3#7{LqFXqeO)Jd*~ZdR$ErHVrl8pvWBY4dO=peN9x`jI`1Bv zL*HxqrG>(Fi@J3(rT9(vyva0(^ker5TaDT<1v6rp?q9$py#sf6n>s%g(S~{8+Emg) za+V8Q_i}Y(8t&R}y9egeBcx|76Snc{mj#$X!*qXGK(CS>TqA6+s3&Hi7sGTPok2~c zAFLF%eQNAXO7@%Xl9}`Z4ck*8Y|lcf>x=t38$`dSkowB9imDYg74?-%OY0j}3o>Hd zsk7-t(hC>!Gd^EPgZ!r3Q%L_LU6c!3p8EPO^lq5$@Hupa^cvj%SE_d|rTR_xuz8eE zgL!X#jic%&4BEv@>;4rL<*Qef)~_pFTrSAa)z10!=b@tzwhYJLIkbn!_TSKk)uq+7 z)eVA-5ciG+)EKT877N=M6~CA-&oC#!OkneL2{K8waID8pTjCJnrr&C_;5w}ySxkRR z?Sy#*Ph}rA$HeP|nF+an$(Zq@Mq`aNtgaJe1h^lqpsz?jkLT2(?q5PTn`ZM8`a$RQ zd0suf6!UJF?juXd6O#HZmYp4$=u9$t?jRbBrMIfCbj501xuqrdRZdOor=G2#aCNzs zeywL=6+Ww;TS22t^G_?NTW>%=?dsz?O7olUkd-umj6`=`rPgEeIpEp|98&$fh0h>pV5ug^VqL0%!ZWeZL%s|BM(#*ngX#C1Z>*u~MiQ@8zgdfg%K5xj zeYTdo`X+R7Qhlp1t zJh!a8rcyX|Efqo!n&3`WH25w`apzs6Id|#B=(0*Zo2m6T%{Mc(_7r}HvU1CA4Ax6n zW+4@oHD&8d?_VXz5Y>q+?Qg@X5OW&GLx>9w)~jn9#Kc!MdfN(Ljc_Bz{o8CUigbQ! zPgkGZp(XlFclRCI3&C_)wNBR7(p-1!6fH%gU^O96`-aA=lxdoxPWS86v|f#NxnG;E zy-gJ3e)vvp2+%2LbcXdd*xc&_#aS|-iYzNbAZdOnG zkVd(;6l-q+M*kgf*%TOX3km>>xdVRVTg)ABfnYJ~Tt8UM zI@cN&v(6Q%#jIaK)oE~}IfYz?1_pdv_9Jr#T;l}ld8mpkW}T}fi+O-;sIn|(ohvGf zS?3Cj8SBqK16-{I2JFMT&tmR?--Q-)2O5f9i&^L5*J9T5QJh%JI@in=vwjlb_cmQ+z;98F7@y!7u42PdNz*hHT zhulF#0JDC302>1YFzb$$KW!fqz^vCW8{?Z7Q1?Fp6{~*QK~(^A2ipUfFJMmqvmVj# z)Ao)4X5F?%*s^iPpMQ!Y;INnjVgi^4hznr;+MS}j>+M(5tppl`ZeE9*s|uV1^LsdR zbzt!yV4QQuKWIPE$C-leSm3yc=s(4M@ezBgPQ%@gKW1;FT` zU@Pk~9|d!DX~mxaTUnR&55Qc@TKeDn3$^x1yUS_4J2)s|05YjM^rXEt-O6|Dz6Q6I z-=6Jdpds1aQZ9jn;%lou_ zqSJcuvN|dWuMt(S)n1B1>JXoHsnBM7smsc&9JC}EX~RsU%=O?-^?0*=w$pmWvHLB! z54$fm+plUxoD~YOmf62Z{4`5!cM0*nnKd-%&w!_34}BC6&x~gHBk>F9^VG2I_9PeQ zk|X#*%IY>Sx12#(w5mp!^Egrl|HNd49ap=z+ebPRkO+zc+zINh9BuuaVnwe}p*!H- zhv*jqqW7r`cIVd%+uVRF%~#bs>|Z!JN$d%T-lOi>iRkgT5B?d*>U+F;e5ZXPzCxVc zX}=omx@* zgn-T9ER#FI?}GW4Lv9c-KyboN2(q)p#{U!^s z7o`d&%eceA;6tcPy3O`u!7rf_neXRDkp)LTlpeR64W@#3BkS<*#XRM+xdAxE7lfqnJ~+~> zER02C@=(pMw{yH%Ik0}&WMh$`{rBKR>~M@{+z?^=Fc&j(^~n2aZ9qVb$^64BUqFBG z{s2AITmj_kq2A9AU?z6Ah z-<=zD`RH6l2D>=ILkkP@WQ5*@EbuERcgs2TqtAw-i+eV6DMq8v-@HkEL*!$B2l#LbR@ zcr6v(>==UY_3Qno=lN8p&hqIw^&OuUsrV$EPO4l!J*KMp)UI0iB-Cqu?MpsAr$Uo) XIOutput: *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\Bin' Build target 'VOQC' +compiling encoder.c... compiling provalctrl.c... +compiling main.c... linking... -Program Size: Code=29850 RO-data=458 RW-data=364 ZI-data=6316 +Program Size: Code=29854 RO-data=458 RW-data=364 ZI-data=6316 FromELF: creating hex file... "VOQC\VOQC.axf" - 0 Error(s), 0 Warning(s). @@ -54,7 +56,7 @@ Package Vendor: Keil

Collection of Component Files used:

* Component: ARM::CMSIS:CORE@5.6.0 -Build Time Elapsed: 00:00:05 +Build Time Elapsed: 00:00:11 diff --git a/MDK-ARM/VOQC/VOQC.hex b/MDK-ARM/VOQC/VOQC.hex index 84e9046..d5013d3 100644 --- a/MDK-ARM/VOQC/VOQC.hex +++ b/MDK-ARM/VOQC/VOQC.hex @@ -26,15 +26,15 @@ :10018000630200086302000800F002F800F04CF877 :100190000AA090E8000C82448344AAF10107DA45E2 :1001A00001D100F041F8AFF2090EBAE80F0013F0E8 -:1001B000010F18BFFB1A43F00103184788740000B1 -:1001C000A87400000A4410F8014B14F00F0508BF92 +:1001B000010F18BFFB1A43F0010318478C740000AD +:1001C000AC7400000A4410F8014B14F00F0508BF8E :1001D00010F8015B240908BF10F8014B6D1E05D013 :1001E00010F8013B6D1E01F8013BF9D1641E03D0EC :1001F000641E01F8015BFBD19142E4D3704700001B :100200000023002400250026103A28BF78C1FBD81F :10021000520728BF30C148BF0B6070471FB507F0B9 -:10022000FBF91FBD10B510BD00F070F91146FFF7C6 -:10023000F5FF05F0CBFB00F08EF903B4FFF7F2FFFA +:10022000FDF91FBD10B510BD00F070F91146FFF7C4 +:10023000F5FF05F0CDFB00F08EF903B4FFF7F2FFF8 :1002400003BC04F049F90000094880470948004709 :10025000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE776 :10026000FEE7FEE704480549054A064B70470000D3 @@ -130,17 +130,17 @@ :100800007DF804E07821012000F078F800BF00BFF7 :1008100000221021344800F0AFFFFC25284604F0E8 :100820002DFB0025284604F029FB0125284604F06D -:1008300025FB0A2004F018FE04F0F4FA8DF80000FD +:1008300025FB0A2004F01AFE04F0F4FA8DF80000FB :1008400004F0F0FA8DF8010004F0ECFA8DF80200E3 :100850009DF8000000049DF8011040EA01209DF879 :1008600002100843214908600846006820490860D2 :100870000846006800F40000F8B108460068C0436C :10088000086008460068C0F3160008600846006863 :10089000401C08600846006840420860084600683E -:1008A00006F069FC41EC180B9FED120B53EC102B7A -:1008B00006F0CAFC0B4A03C20DE00D48006806F0C2 -:1008C0005AFC41EC180B9FED0B0B53EC102B06F070 -:1008D000BBFC044A03C2034890ED000B5DE7000037 +:1008A00006F06BFC41EC180B9FED120B53EC102B78 +:1008B00006F0CCFC0B4A03C20DE00D48006806F0C0 +:1008C0005CFC41EC180B9FED0B0B53EC102B06F06E +:1008D000BDFC044A03C2034890ED000B5DE7000035 :1008E000200000201800002000040240100000201A :1008F0001400002085F90F270088433F70B5044697 :100900000D4600221021164800F036FF0CE0154875 @@ -158,7 +158,7 @@ :1009C00000F0B4FB10BD000060050020014608786F :1009D00010381823B0FBF3F20848805CC865032A7E :1009E00005D908686FF30900001D886503E00868F1 -:1009F0006FF309008865886D704700002276000853 +:1009F0006FF309008865886D70470000267600084F :100A0000014600208A6A8B69CBB932B1012A0DD028 :100A1000022A03D0032A10D10EE000BFCB6A03F0F4 :100A20008073B3F1807F00D1012007E0CB6AB3F17E @@ -184,11 +184,11 @@ :100B600002EB5474E410A2EBC4050124AC401C4019 :100B700014B101220A7001E000220A7030BD0000A9 :100B80007F00002010B51648002101600171082186 -:100B9000302005F09CFE022004F05AFC092005F0EC -:100BA00085FE0F49C8700A2005F080FE0C490871C7 -:100BB0000921302005F08BFE032004F049FC0620BB -:100BC00005F074FE06490870072005F06FFE044921 -:100BD0004870082005F06AFE01498870084610BD7B +:100B9000302005F09EFE022004F05CFC092005F0E8 +:100BA00087FE0F49C8700A2005F082FE0C490871C3 +:100BB0000921302005F08DFE032004F04BFC0620B7 +:100BC00005F076FE06490870072005F071FE04491D +:100BD0004870082005F06CFE01498870084610BD79 :100BE0006000002038B502460020009000BF92F857 :100BF0003C00012801D1022038BD012082F83C00D0 :100C000000BF0868092816D91068C0680C780A3C2B @@ -464,13 +464,13 @@ :101CE0000D48006820F46040216940EAC1000A49BB :101CF000086000F03FF808490968C1F30311074A7A :101D0000515CC8400649086006480068FFF796FE27 -:101D100000204CE7003C0240083802402A760008C8 +:101D100000204CE7003C0240083802402E760008C4 :101D20000C000020040000200148006870470000FB :101D30000C00002000B5FFF7F7FF04490968C1F364 :101D40008221034A515CC84000BD000008380240AF -:101D50003A76000800B5FFF7E7FF04490968C1F3C8 +:101D50003E76000800B5FFF7E7FF04490968C1F3C4 :101D60004231034A515CC84000BD000008380240BF -:101D70003A7600082DE9F047002400250026A14608 +:101D70003E7600082DE9F047002400250026A14604 :101D80002548006800F00C0020B1042805D0082880 :101D90003AD105E0DFF8849039E0DFF8849036E04E :101DA0001D48001F006800F03F041B48001F00682A @@ -691,9 +691,9 @@ :102B100033F806F02000202809D105F020002028F5 :102B200005D1C043216808612046FFF78CFC70BDC9 :102B30007047704710B504460C48844201D103F039 -:102B4000E9FD0B4884420FD16FF001000849096884 +:102B4000EBFD0B4884420FD16FF001000849096882 :102B500008610748FFF79CFD064880880549C88042 -:102B60000020888003F042F910BD00000803002017 +:102B60000020888003F044F910BD00000803002015 :102B70005003002034130020704770477047000056 :102B80002DE9F84F0446206805682068C66820686B :102B900047694FF00009CA4605F00F09B9F1000F67 @@ -815,7 +815,7 @@ :1032D00070B504460D46164694F8420020280BD1DE :1032E00005B10EB9012070BD002020633246294689 :1032F000204600F08DFFF6E70220F4E710B5044603 -:1033000003492068884201D102F0BCFD10BD0000D5 +:1033000003492068884201D102F0BEFD10BD0000D3 :10331000001001402DE9F84F04460E461746994625 :103320004FF0000A94F84100202850D106B117B997 :103330000120BDE8F88F00206064212084F841005E @@ -938,16 +938,16 @@ :103A800000E040105C1CE3B2082BF2DB0C1EA1F13D :103A90000105A9B2E8D100BFE4E700BFFEE7704727 :103AA00070B50024002522E06006040E01221102F8 -:103AB0001148FDF761FE0A2001F0CFFC4FF4805160 +:103AB0001148FDF761FE0A2001F0D1FC4FF480515E :103AC0000D48FDF747FE10B144F0010401E024F079 -:103AD00001040A2001F0C1FC00224FF48071064865 -:103AE000FDF74AFE0A2001F0B8FC681CC5B2082D9B +:103AD00001040A2001F0C3FC00224FF48071064863 +:103AE000FDF74AFE0A2001F0BAFC681CC5B2082D99 :103AF000DADB204670BD00000000024070B50446CD -:103B0000002526E00A2001F0A8FC04F0800028B17E +:103B0000002526E00A2001F0AAFC04F0800028B17C :103B10000122D1021048FDF72FFE05E000224FF4EC :103B200000610D48FDF728FE012211020A48FDF749 -:103B300023FE0A2001F091FC6006040E00224FF4DF -:103B400080710548FDF718FE0A2001F086FC681C0C +:103B300023FE0A2001F093FC6006040E00224FF4DD +:103B400080710548FDF718FE0A2001F088FC681C0A :103B5000C5B2082DD6DB70BD00000240704710B51D :103B6000FDF742FF10BD000000B593B0302107A85B :103B7000FCF79EFC142102A8FCF79AFC00BF002071 @@ -1090,11 +1090,11 @@ :1044000070BD00007A00002010B50122910304481D :10441000FDF7B2F9012251030148FDF7ADF910BDD6 :10442000000C024070B5002400224FF480411A486D -:10443000FDF7A2F9012001F017F8012291031648B7 -:10444000FDF79AF9012001F00FF880211348FDF7DC +:10443000FDF7A2F9012001F019F8012291031648B5 +:10444000FDF79AF9012001F011F880211348FDF7DA :1044500081F9012801D144F00104002518E064002D :1044600000224FF400510C48FDF786F9012000F0BE -:10447000FBFF012251030848FDF77EF98021074820 +:10447000FDFF012251030848FDF77EF9802107481E :10448000FDF768F9012801D144F00104681CC5B2A8 :104490000F2DE4DBA0B270BD000C02400000024012 :1044A00002480068C0F30220704700000CED00E0F5 @@ -1118,17 +1118,17 @@ :1045C000FBF7DBFEA149088200219F4A1160516080 :1045D000012097490870912000F0D6F924E100F0FD :1045E000B1F99449924A127841F82200904A12781F -:1045F00051F8220002F0BFFD41EC1A0B9FED940B25 -:1046000053EC102B02F002FC41EC190B9FED920BC6 -:1046100053EC102B00E049E002F016FE41EC180BC1 -:1046200002F04CFD8249097801EB8101844A02EBDA +:1045F00051F8220002F0C1FD41EC1A0B9FED940B23 +:1046000053EC102B02F004FC41EC190B9FED920BC4 +:1046100053EC102B00E049E002F018FE41EC180BBF +:1046200002F04EFD8249097801EB8101844A02EBD8 :10463000C1018B4A126841F8220089480068401C79 :104640008749086008460068092801DD00200860E5 :10465000002010E07649097801EB8101784A02EBED :10466000C10151F82010CA17774C18CCC918624103 :10467000754B06C3401C0A28ECDB734903C902F0E2 -:1046800091FD9FED780B53EC102B02F0BFFB02F075 -:1046900045FD6E49488200216B4A1160516002203D +:1046800093FD9FED780B53EC102B02F0C1FB02F071 +:1046900047FD6E49488200216B4A1160516002203B :1046A00063490870A12000F06FF9BDE000F04AF9FD :1046B00060495F4A127841F8220008465C4909784F :1046C00050F8210000EE100AB8EEC00AF0EE040A1D @@ -1143,9 +1143,9 @@ :104750003E49888200213C4A11605160032034495F :104760000870B12000F010F95EE000F0EBF831497C :104770002F4A127841F822002D4A127851F822006F -:1047800002F0F9FC41EC1A0B9FED310B53EC102BAE -:1047900002F03CFB41EC190B9FED2F0B53EC102B5F -:1047A00002F052FD41EC180B02F088FC2049097818 +:1047800002F0FBFC41EC1A0B9FED310B53EC102BAC +:1047900002F03EFB41EC190B9FED2F0B53EC102B5D +:1047A00002F054FD41EC180B02F08AFC2049097814 :1047B00001EB8101224A02EBC101294A126841F84A :1047C00022002B480068401C294908600846006800 :1047D000092801DD00200860002010E01449097854 @@ -1160,17 +1160,17 @@ :104860002C00002000000000000024403000002048 :10487000340000201FB581200390C020029040200A :10488000019000200090002202211748FCF774FFDD -:10489000062000F08DF80A2000F0DAFD0122022146 +:10489000062000F08DF80A2000F0DCFD0122022144 :1048A0001148FCF769FF03AA0121002000F0BAF8C3 :1048B00002AA0121084600F0B5F801AA0121022050 :1048C00000F0B0F86A460121032000F0ABF80022A6 -:1048D00002210548FCF750FF0A2000F0B9FD08202E +:1048D00002210548FCF750FF0A2000F0BBFD08202C :1048E00000F066F81FBD0000000C024070B5002407 :1048F000002201211248FCF73FFF00251BE00122A6 -:1049000011460F48FCF738FF012000F0ADFD6006AE +:1049000011460F48FCF738FF012000F0AFFD6006AC :10491000040E08210A48FCF71DFF0443012000F0A3 -:10492000A3FD002201210648FCF726FF012000F02C -:104930009BFD681CC5B2082DE1DB204670BD000060 +:10492000A5FD002201210648FCF726FF012000F02A +:104930009DFD681CC5B2082DE1DB204670BD00005E :10494000000C024010B5002202210E48FCF714FFB3 :10495000102000F02DF8FFF7C9FF0446FFF7C6FF4F :1049600040EA0424FFF7C2FF40EA042404F40000F4 @@ -1180,10 +1180,10 @@ :1049A000FCF7D8FE0028F9D108BD0000000C024039 :1049B00070B50446002201211948FCF7DDFE0025F0 :1049C00029E0012211461648FCF7D6FE012000F02E -:1049D0004BFD04F0800028B1012210211048FCF7A3 +:1049D0004DFD04F0800028B1012210211048FCF7A1 :1049E000CBFE04E0002210210D48FCF7C5FE600656 -:1049F000040E012000F038FD002201210848FCF7D8 -:104A0000BBFE012000F030FD08210548FCF7A2FEA6 +:1049F000040E012000F03AFD002201210848FCF7D6 +:104A0000BBFE012000F032FD08210548FCF7A2FEA4 :104A10000443681CC5B2082DD3DB204670BD0000DE :104A2000000C02402DE9F04106460C4615460022D6 :104A300002210F48FCF7A0FE0C2101EA8601621E4C @@ -1193,54 +1193,54 @@ :104A7000000C024010B52DED0A8BCC4800680828C8 :104A800035D2DFE800F004356697C8FCFAF901205A :104A9000FBF76EFEB0EE40CAF0EE60CA9FEDC40BAD -:104AA00053EC102B51EC1C0B02F0CEFB41EC1B0B1A -:104AB0009FEDC10B53EC102B02F0A8F941EC1A0B3F -:104AC0009FEDBF0B53EC102B02F0BCFC41EC190B1B -:104AD0009FEDBD0B53EC102B02F098F941EC180B35 -:104AE00002F01CFBBA4908800120B049086059E176 +:104AA00053EC102B51EC1C0B02F0D0FB41EC1B0B18 +:104AB0009FEDC10B53EC102B02F0AAF941EC1A0B3D +:104AC0009FEDBF0B53EC102B02F0BEFC41EC190B19 +:104AD0009FEDBD0B53EC102B02F09AF941EC180B33 +:104AE00002F01EFBBA4908800120B049086059E174 :104AF0000220FBF73DFEB0EE40CAF0EE60CA9FED2B -:104B0000AC0B53EC102B51EC1C0B02F09DFB41EC59 -:104B10001B0B9FEDA90B53EC102B02F077F941EC26 -:104B20001A0B9FEDA70B53EC102B02F08BFC41EC02 -:104B3000190B9FEDA50B53EC102B02F067F941EC1C -:104B4000180B02F0EBFAA24948800220974908604E +:104B0000AC0B53EC102B51EC1C0B02F09FFB41EC57 +:104B10001B0B9FEDA90B53EC102B02F079F941EC24 +:104B20001A0B9FEDA70B53EC102B02F08DFC41EC00 +:104B3000190B9FEDA50B53EC102B02F069F941EC1A +:104B4000180B02F0EDFAA24948800220974908604C :104B500028E10320FBF70CFEB0EE40CAF0EE60CA7D -:104B60009FED930B53EC102B51EC1C0B02F06CFBE4 -:104B700041EC1B0B9FED900B53EC102B02F046F910 -:104B800041EC1A0B9FED8E0B53EC102B02F05AFCEC -:104B900041EC190B9FED8C0B53EC102B02F036F906 -:104BA00041EC180B02F0BAFA8949888003207F494A +:104B60009FED930B53EC102B51EC1C0B02F06EFBE2 +:104B700041EC1B0B9FED900B53EC102B02F048F90E +:104B800041EC1A0B9FED8E0B53EC102B02F05CFCEA +:104B900041EC190B9FED8C0B53EC102B02F038F904 +:104BA00041EC180B02F0BCFA8949888003207F4948 :104BB0000860F7E00420FBF7DBFDB0EE40CAF0EE42 :104BC00060CA9FED7B0B53EC102B51EC1C0B02F0D9 -:104BD0003BFB41EC1B0B9FED780B53EC102B02F0D1 -:104BE00015F941EC1A0B9FED760B53EC102B02F0EC -:104BF00029FC41EC190B9FED740B53EC102B02F0C8 -:104C000005F941EC180B02F089FA7149C8800420BB +:104BD0003DFB41EC1B0B9FED780B53EC102B02F0CF +:104BE00017F941EC1A0B9FED760B53EC102B02F0EA +:104BF0002BFC41EC190B9FED740B53EC102B02F0C6 +:104C000007F941EC180B02F08BFA7149C8800420B7 :104C100066490860C6E00520FBF7AAFDB0EE40CA71 :104C2000F0EE60CA9FED620B53EC102B51EC1C0BA5 -:104C300002F00AFB41EC1B0B9FED5F0B53EC102BBA -:104C400002F0E4F841EC1A0B9FED5D0B53EC102BD6 -:104C500002F0F8FB41EC190B9FED5B0B53EC102BB2 -:104C600002F0D4F841EC180B02F058FA58490881C8 +:104C300002F00CFB41EC1B0B9FED5F0B53EC102BB8 +:104C400002F0E6F841EC1A0B9FED5D0B53EC102BD4 +:104C500002F0FAFB41EC190B9FED5B0B53EC102BB0 +:104C600002F0D6F841EC180B02F05AFA58490881C4 :104C700005204E49086095E063E031E0FFE706203B :104C8000FBF776FDB0EE40CAF0EE60CA9FED480B30 -:104C900053EC102B51EC1C0B02F0D6FA41EC1B0B21 -:104CA0009FED450B53EC102B02F0B0F841EC1A0BC2 -:104CB0009FED430B53EC102B02F0C4FB41EC190B9E -:104CC0009FED410B53EC102B02F0A0F841EC180BB8 -:104CD00002F024FA3E49488106203449086061E028 +:104C900053EC102B51EC1C0B02F0D8FA41EC1B0B1F +:104CA0009FED450B53EC102B02F0B2F841EC1A0BC0 +:104CB0009FED430B53EC102B02F0C6FB41EC190B9C +:104CC0009FED410B53EC102B02F0A2F841EC180BB6 +:104CD00002F026FA3E49488106203449086061E026 :104CE0000720FBF745FDB0EE40CAF0EE60CA9FED2D -:104CF000300B53EC102B51EC1C0B02F0A5FA41ECDD -:104D0000190B9FED2D0B53EC102B02F07FF841ECAB -:104D10001B0B9FED2B0B53EC102B02F093FB41EC84 -:104D2000180B9FED290B53EC102B02F06FF841ECA0 -:104D30001A0B02F0F3F92649888107201B49086005 +:104CF000300B53EC102B51EC1C0B02F0A7FA41ECDB +:104D0000190B9FED2D0B53EC102B02F081F841ECA9 +:104D10001B0B9FED2B0B53EC102B02F095FB41EC82 +:104D2000180B9FED290B53EC102B02F071F841EC9E +:104D30001A0B02F0F5F92649888107201B49086003 :104D400030E00020FBF714FDB0EE40CAF0EE60CA80 -:104D50009FED170B53EC102B51EC1C0B02F074FA67 -:104D600041EC1B0B9FED140B53EC102B02F04EF893 -:104D700041EC1A0B9FED120B53EC102B02F062FB6F -:104D800041EC180B9FED100B53EC102B02F03EF88A -:104D900041EC190B02F0C2F90D49C881002003490A +:104D50009FED170B53EC102B51EC1C0B02F076FA65 +:104D600041EC1B0B9FED140B53EC102B02F050F891 +:104D700041EC1A0B9FED120B53EC102B02F064FB6D +:104D800041EC180B9FED100B53EC102B02F040F888 +:104D900041EC190B02F0C4F90D49C8810020034908 :104DA000086000BF00BFBDEC0A8B10BD24000020CE :104DB00000000000000024403D0AD7A3703DEA3FF8 :104DC0000000000000C06240AE47E17A14AEEF3F41 @@ -1251,15 +1251,15 @@ :104E100075FD002210210248FCF7AEFC10BD000019 :104E20000004024070B50024002201211148FCF763 :104E3000A3FC002519E0012211460E48FCF79CFC5A -:104E4000012000F011FB6006040E4FF480710A4847 +:104E4000012000F013FB6006040E4FF480710A4845 :104E5000FCF780FC0443002201210648FCF78CFC8F -:104E6000012000F001FB681CC5B2082DE3DB2046E1 +:104E6000012000F003FB681CC5B2082DE3DB2046DF :104E700070BD0000001002400004024070B50446FE :104E8000002201211848FCF777FC002528E00122C8 -:104E900011461548FCF770FC012000F0E5FA04F01B +:104E900011461548FCF770FC012000F0E7FA04F019 :104EA000800028B1012251021048FCF765FC05E0A2 :104EB00000224FF400710D48FCF75EFC6006040E02 -:104EC000002201210848FCF757FC012000F0CCFA31 +:104EC000002201210848FCF757FC012000F0CEFA2F :104ED0004FF480710548FCF73DFC0443681CC5B2E3 :104EE000082DD4DB204670BD0010024000040240B3 :104EF00010B57048008800EE100AB8EE400ADFEDE9 @@ -1268,632 +1268,632 @@ :104F2000400ADFED650A80EE201A644880ED001A21 :104F300090ED000AF3EE090AB4EEE00AF1EE10FA81 :104F400003DDB3EE090A80ED000A5C4890ED000A2B -:104F500000F03EF95748408800EE100AB8EE400ACB +:104F500000F040F95748408800EE100AB8EE400AC9 :104F6000DFED550A80EE201A554890ED000AB4EEA8 :104F7000401AF1EE10FA12D04E48408800EE100AA6 :104F8000B8EE400ADFED4C0A80EE201A4C4880ED66 -:104F9000001A4C484A4991ED000A01F04DF8454885 +:104F9000001A4C484A4991ED000A01F04FF8454883 :104FA000808800EE100AF8EE400A9FED431A80EE6A :104FB000810A4548D0ED000AB4EE600AF1EE10FA1D :104FC00012D03C48808800EE100AB8EE400ADFEDAF :104FD0003A0A80EE201A3C4880ED001A3B483A49D4 -:104FE00091ED000A01F028F839480068012808D13D -:104FF000002037490860334800F084FF334800F050 -:1050000081FF34480068012853D1002031490860ED -:105010009FED290A304880ED000A3048008C00EEF0 -:10502000100AB8EE400A2C48D0ED000A30EE600AB3 +:104FE00091ED000A01F02AF839480068012808D13B +:104FF000002037490860334800F086FF334800F04E +:1050000083FF34480068012853D1002031490860EB +:105010009FED310A314880ED000A3148008C00EEE6 +:10502000100AB8EE400A2D48D0ED000A30EE600AB2 :10503000F2EE040A80EE201A224880ED001A90ED6C -:10504000000ADFED270A80EE201A9FED260A21EEE6 +:10504000000ADFED280A80EE201A9FED270A21EEE4 :10505000000A80ED010A90ED030AD0ED010A30EE5E -:10506000600A80ED070A1D48408C00EE100AB8EE79 -:10507000400A1948D0ED000A30EE600AF2EE040A48 +:10506000600A80ED070A1E48408C00EE100AB8EE78 +:10507000400A1A48D0ED000A30EE600AF2EE040A47 :1050800080EE201A114880ED001A90ED000ADFED45 -:10509000140A80EE201A9FED130A21EE000A80ED1B +:10509000150A80EE201A9FED140A21EE000A80ED19 :1050A000010A90ED030AD0ED010A30EE600A80EDAE :1050B000070A10BD8600002000007A444C01002041 :1050C00050010020481300205401002080130020CC -:1050D0003001002038010020580100207009002014 -:1050E000000061440000C84210B50F480068012864 -:1050F0000AD100200C49086000F0AAFCFFF7EEF985 -:10510000FFF7B8FCFFF700FA0848006801280AD149 -:1051100000200649086000F0ADFA054908800846FD -:1051200000880449C88410BDF80000201001002048 -:10513000EC0000207009002010B52DED028BB0EEC0 -:10514000408A00249FED0C0A28EE000AB0EE408A47 -:105150009FED0A0A28EE000ADFED090A80EE201A08 -:10516000BCEEC10A10EE100A84B20221204600F003 -:1051700059F8BDEC028B10BD0000C842000080450C -:1051800000404E4510B52DED028BB0EE408A002454 -:105190009FED0C0A28EE000AB0EE408A9FED0A0A45 -:1051A00028EE000ADFED090A80EE201ABCEEC10AE3 -:1051B00010EE100A84B20321204600F033F8BDEC53 -:1051C000028B10BD0000C8420000804500404E45E3 -:1051D00010B52DED028BB0EE408A00249FED0D0A34 -:1051E00028EE000AB0EE408A9FED0B0A28EE000A76 -:1051F000DFED0A0A80EE201ABCEEC10A10EE100A9A -:1052000084B2074804600121204600F00BF8BDEC91 -:10521000028B10BD0000C8420000804500404E4592 -:10522000480000202DE9F04107460C464FF6FF707C -:1052300000EA8705C5F30D05012C15D10122802157 -:105240004A48FCF799FA012240214848FCF794FAB1 -:105250000A2000F002F9002280214448FCF78CFA71 -:105260000A2000F0FAF82FE0022C15D101221103D8 -:105270003F48FCF781FA012291023D48FCF77CFA95 -:105280000A2000F0EAF80022E1023948FCF774FA3B -:105290000A2000F0E2F817E0032C15D10122D10218 -:1052A0003348FCF769FA012291023148FCF764FAAD -:1052B0000A2000F0D2F800224FF400612C48FCF7DD -:1052C0005BFA0A2000F0C9F800263BE001224021E9 -:1052D0002648FCF751FA012291022548FCF74CFAC6 -:1052E00005F40040B0F5004F0AD1012220211F48EB -:1052F000FCF742FA0122D1031E48FCF73DFA0AE00E -:10530000002220211948FCF737FA00224FF400410F -:105310001848FCF731FA0A2000F09FF800224021DB -:105320001248FCF729FA00224FF480611048FCF77C -:1053300023FA0A2000F091F84FF6FF7000EA4505C5 -:10534000701CC6B2102EC1DB012280210748FCF779 -:1053500013FA012211030648FCF70EFA0122D102CA -:105360000348FCF709FABDE8F0810000000C024098 -:10537000000802400000024010B5204800780928CB -:1053800039D2DFE800F038050C131A20262C320041 -:1053900000224FF480511A48FCF7EEF92BE000226E -:1053A0004FF400611648FCF7E7F924E000224FF4BF -:1053B00000411448FCF7E0F91DE00022802111486B -:1053C000FCF7DAF917E0002204210F48FCF7D4F9C2 -:1053D00011E0002201210C48FCF7CEF90BE001227C -:1053E00091030848FCF7C8F905E00122102107489D -:1053F000FCF7C2F900BF00BF10BD00005C00002038 -:10540000000C02400010024000040240000802406C -:1054100010B5012280210C48FCF7AEF901221103DE -:105420000A48FCF7A9F90122D1020848FCF7A4F9BF -:10543000002240210448FCF79FF900224FF48061CC -:105440000248FCF799F910BD000C02400008024028 -:1054500001B50098FCF74AF808BD00E000BF011E46 -:10546000A0F10100FAD1704711B526E0009CB4F517 -:10547000617F02D94FF4617400E0009C23464FF035 -:10548000E024A069A82404FB1301002908DB00BF65 -:105490004FF0E024A26982420CDA8A42F8DA09E08D -:1054A000084C214400BF4FF0E024A2698242FADD9B -:1054B0008A42F8DC009CE41A0094009C002CD5D1B0 -:1054C00018BD00004090020010B500F06DFA3F4892 -:1054D000007800F0010204213D48FCF74DF93B48FB -:1054E0000078C0F3400208213948FCF745F93748F5 -:1054F0000078C0F3800210213548FCF73DF93348AD -:105500000078C0F3C00220213148FCF735F92F485C -:105510000078C0F3001240212D48FCF72DF92B48EC -:105520000078C0F340124FF400512A48FCF724F9E8 -:1055300026480078C0F380124FF480412548FCF7DC -:105540001BF922480078C2094FF400412148FCF7BA -:1055500013F921480078214908701C4880781E49B9 -:1055600008701E480078097888420AD01749887860 -:1055700000F0E4F91549487800F0E0F900F034F85B -:1055800005E01249487800F0D9F900F02DF8FEF74F -:1055900049FF000A12490870FEF744FF104948709D -:1055A00010211048FCF7D6F8044620210D48FCF7DE -:1055B000D1F804EB40000A4988700448C078012102 -:1055C000B1EBD01F01D100F045F910BD7A000020E9 -:1055D0000010024000080240EF000020EE00002012 -:1055E0007F0000200000024010B500224FF48071BF -:1055F0000748FCF7C1F80A20FFF736FF0122110225 -:105600000348FCF7B9F80A20FFF72EFF10BD000091 -:105610000008024010B500241548006820F00C0076 -:105620001349086004E0601CC4B20120FFF71CFFAE -:1056300002210F48FCF78EF808B1C82CF3DBC82C08 -:1056400001DB012010BD002404E0601CC4B2012075 -:10565000FFF70AFF02210648FCF77CF808B9F02C96 -:10566000F3DBF02C01DB0120ECE70020EAE700008F -:10567000000802402DE9F04100F0A4F800F082F8A3 -:10568000FFF7C8FFCC2000F0A9F8BE2000F0A6F874 -:1056900000F066F8074600F063F80546072D05DDC3 -:1056A000E843C5B2F843C7B2002600E001262C4605 -:1056B000200204B2E01904B200EE104AB8EEC00AAB -:1056C000F6EE040A20EE200ABDEEC00A10EE100A23 -:1056D00004B216B12046BDE8F081604200B2FAE79C -:1056E00010B5012202210448FCF746F800F04AF800 -:1056F000FFF790FF10BD00000008024010B51748EA -:10570000006820F00C00154908600846006840F069 -:1057100004000860002202211048FCF72DF8022046 -:10572000FFF7A2FE012202210C48FCF725F80B48E6 -:10573000006820F00C00094908600C20FFF794FE77 -:1057400002210648FCF706F808B1012400E0002415 -:105750003220FFF789FE204610BD000000080240FD -:1057600070B50026012508E0FFF7C8FF0446E001F8 -:1057700040EA6600C6B2681CC5B2082DF4DD3046AA -:1057800070BD000010B50E48006820F00C000C49F8 -:1057900008600846006840F004000860002202210A -:1057A0000748FBF7E9FF40F2EE20FFF75DFE01221C -:1057B00002210348FBF7E0FF0F20FFF755FE10BD65 -:1057C0000008024010B5FFF7DDFFFFF723FFCC20F4 -:1057D00000F004F8442000F001F810BD70B5044654 -:1057E0001B48006820F00C00194908600846006852 -:1057F00040F004000860012526E004F00106641072 -:1058000086B1002202211248FBF7B6FF0220FFF703 -:105810002BFE012202210E48FBF7AEFF3C20FFF7D2 -:1058200023FE0FE0002202210948FBF7A5FF3C20E0 -:10583000FFF71AFE012202210548FBF79DFF022017 -:10584000FFF712FE681CC5B2082DD6DD70BD000042 -:105850000008024010B53C210E48FDF747F849F218 -:1058600018700C49096848623C210A48FCF7D8FFC7 -:105870000020094908600949086009490860982022 -:10588000084908600848C07800F07F000649C870E1 -:1058900010BD0000C00200205C010020600100205B -:1058A00064010020680100207A0000201C48006884 -:1058B0001C4908601C480068406A1949086008468D -:1058C000006818490968401A1849884205DA1848DA -:1058D0000068401C164908600DE011480068114935 -:1058E0000968401A4CF25031884204DD10480068C3 -:1058F000401E0F4908600E480068C0EB0040084990 -:10590000096808440B490860084600684FF6FF71B3 -:1059100001EA104008490885064800884885704714 -:10592000600100205C010020C0020020B03CFFFFAD -:1059300068010020640100207009002070B5044651 -:105940002546002628E000224FF400411448FBF7CA -:1059500013FF05F0800028B1012240211148FBF718 -:105960000BFF04E0002240210E48FBF705FF68060C -:10597000050E00224FF400410948FBF7FDFE0A2006 -:10598000FFF772FD0122D1030548FBF7F5FE0A205F -:10599000FFF76AFD701CC6B2082ED4DB70BD000094 -:1059A000000C02400000024010B5064800680128C3 -:1059B00006D102210448FBF7D5FE0020014908600A -:1059C00010BD00002801002000100240FCF718F86C -:1059D000FEF7CAF8FDF7D4FDFDF77EFDFDF744FDA7 -:1059E000FDF7E0FEFDF7FCFEFDF71CFFFDF7A4FF51 -:1059F000FDF7BEFFFDF7D8FFFDF7F2FFFEF70CF84D -:105A0000FDF74EFFFDF772FF1048FCF7EDFDFFF7C5 -:105A100021FFFEF76DFDFFF7DDF9FEF72BFFFFF726 -:105A2000F7FC00F0E9F8FFF75BFEFEF7EDFC00F095 -:105A3000FFF900F061FB07E0FFF746FDFFF754FBBD -:105A4000FFF756FAFFF732FFF6E7000008030020E1 -:105A500010B52DED028B9FED5C0AB0EE408AFBF78E -:105A600091F8044620785949086008460068000209 -:105A7000086060780968084354490860084600686F -:105A800000020860A0780968084350490860084689 -:105A90000068B0F5000F0FDB08460068A0F18070C9 -:105AA00000EE100AB8EEC00ADFED490A80EE201AB7 -:105AB000484880ED001A0BE0444890ED000AB8EE2B -:105AC000C00ADFED430A80EE201A424880ED001A3A -:105AD0004048D0ED000A9FED400A9FED401A01EECC -:105AE000200AF2EE080A80EE201A3D4880ED001AE6 -:105AF00090ED000AF2EE040A20EE200A3948007800 -:105B0000401E00EB8000384901EB0010374909784E -:105B100000EB810080ED000A32480078401C3149DA -:105B2000087008460078032804DD0122510230483D -:105B3000FBF722FE2B480078062838DD0120294992 -:105B40000870002026E09FED200AB0EE408A002178 -:105B50000EE000EB8002244B03EB021202EB810209 -:105B600092ED000A30EE080AB0EE408A4A1CD1B22B -:105B70001429EEDBB3EE040AC8EE000ABCEEE00A1C -:105B800010EE101A8AB200F10D011A4B23F8112001 -:105B9000411CC8B20628D6DB14480078401C1349C3 -:105BA000087008460078132801DD002008700D48B1 -:105BB0000078042805DA00224FF400710C48FBF746 -:105BC000DBFDBDEC028B10BD000000006800002072 -:105BD0000000004B7400002000A00C4600401C4652 -:105BE0006C0000205C00002090070020780000205E -:105BF000000802407009002010B500F057FD002297 -:105C00004FF400712A48FBF7B7FD0A20FFF720FC8C -:105C10000120284908708121002000F058FE0A2048 -:105C2000FFF716FC0220234908708121002000F0B4 -:105C30004EFE0A20FFF70CFC03201E49087081214C -:105C4000002000F044FE0A20FFF702FC012251026E -:105C50001748FBF791FD0A20FFF7FAFB04201549CE -:105C600008708121002000F032FE0A20FFF7F0FBCF -:105C70000520104908708121002000F028FE0A202C -:105C8000FFF7E6FB06200B4908708121002000F099 -:105C90001EFE0A20FFF7DCFB0120064908700022E7 -:105CA00041020348FBF768FD0A20FFF7D1FB10BD56 -:105CB000000802405C0000202DE9F04104460D463A -:105CC0000CB1022D01DABDE8F08126786778012E4B -:105CD00001D0002E48D1052F3AD008DC012F0DD07D -:105CE000022F11D0032F15D0042F37D118E0062F23 -:105CF0001CD00F2F20D0102F30D123E0A81E81B24E -:105D0000A01C00F07DFA2EE0A81E81B2A01C00F0BD -:105D10001FFB28E0A81E81B2A01C00F0BFFB22E000 -:105D2000A81E81B2A01C00F03FFC1CE0A81E81B29E -:105D3000A01C00F067FF16E0A81E81B2A01C00F0B6 -:105D4000D7FD10E0A81E81B2A01C00F077FE0AE08B -:105D5000A81E81B2A01C00F0F3FE04E060780121CF -:105D600000F004F800BF00BF00BFACE7F0B599B089 -:105D700005460E460024002701222146641C0DF82A -:105D8000012045F080022146641C0DF801202146C7 -:105D9000641C0DF8016021466846FDF75BFE07466E -:105DA000FAB22146641C0DF801203A122146641C07 -:105DB0000DF801200B48008AA04201DB204601E0DB -:105DC0000848008A074948824A8AC8686946FAF73B -:105DD000F8FA0448428AC168034800F05DFD19B032 -:105DE000F0BD000034130020E00300202DE9F04155 -:105DF00000240E480568C488022C01DABDE8F08151 -:105E0000A01E295C601E285C41EA0027A01E81B20A -:105E10002846FDF71FFE0646B74200D0EEE7034ACC -:105E2000D1881068FFF748FF00BFE7E73413002070 -:105E300010B50E480E49086000208880C88008729E -:105E40000C48C8604FF4806008820020488201221C -:105E500009490A48FDF73CFA6FF001000849096852 -:105E600008610748FCF7C0FB10BD0000340A0020A1 -:105E700034130020340E002044010020E0030020F1 -:105E80005003002010B51848808840F2FF31884246 -:105E90000EDB00201449888008460068002101605C -:105EA0004FF6FF730A2211A11348FDF733FA14E0ED -:105EB000124801780C4882888088401C0A4B9880E0 -:105EC0001846006881540E48FCF7E2FB00200C499C -:105ED000096848620A48FCF787FB0122074906481F -:105EE000FDF7F6F910BD000034130020CAFDBEDD39 -:105EF000D2E7B3F600000000E003002044010020D8 -:105F00005003002010B5044694F83000FE2802DD4E -:105F100094F8300002E094F83000401C84F830001F -:105F200094ED070AD4ED080AB4EEE00AF1EE10FA97 -:105F30003ADD94ED070AF1EE040AB4EEE00AF1EE60 -:105F400010FA31D294F8300032282DDD94ED040A95 -:105F5000D4ED090A30EE200A84ED040A94ED040A17 -:105F6000D4ED0A0AB4EEE00AF1EE10FA02D894ED8C -:105F7000040A01E094ED0A0A84ED040A94ED040A8F -:105F8000D4ED050AB4EEE00AF1EE10FA02D894ED71 -:105F9000040A01E094ED050A84ED040AD4ED040A34 -:105FA000B0EE600A606B804794ED070AD4ED080AF2 -:105FB000F1EE600AB4EEE00AF1EE10FA3AD294ED96 -:105FC000070AF9EE040AB4EEE00AF1EE10FA31DD48 -:105FD00094F8300032282DDD94ED040AD4ED090A3E -:105FE00030EE600A84ED040A94ED040AD4ED0B0A45 -:105FF000B4EEE00AF1EE10FA02DB94ED040A01E0DF -:1060000094ED0B0A84ED040A94ED040AD4ED060A1B -:10601000B4EEE00AF1EE10FA02DB94ED040A01E0BE -:1060200094ED060A84ED040AD4ED040AB0EE600A89 -:10603000606B804710BD000010B52DED028BB0EEF7 -:10604000408A044694ED050AB4EEC80AF1EE10FA4F -:1060500002DDB0EE480A01E094ED050AB0EE408A98 -:10606000B5EEC08AF1EE10FA02DDB0EE480A01E0AA -:106070009FED1E0AB0EE408A94ED050AD4ED060AA3 -:1060800030EE600AD4ED060A38EE601AC1EE000A5E -:106090009FED170A20EE800A84ED030A94ED030AAF -:1060A0009FED131AC0EE010A9FED120A20EE800A3E -:1060B00084ED020A84ED048A94ED040AF7EE040AE2 -:1060C00020EE200A84ED0A0A94ED040AF6EE080A8E -:1060D00020EE200A84ED0B0A002084F83000B0EE98 -:1060E000480A606B8047BDEC028B10BD00000000C9 -:1060F0000000C8420000614410B59FED3B0A3B48D8 -:1061000080ED000A9FED380A80ED010A9FED360A06 -:1061100080ED020A9FED340A80ED030A9FED320AFA -:1061200080ED040AB1EE000A80ED060AB3EE040A1F -:1061300080ED050A9FED2C0A80ED070AB6EE000AF5 -:1061400080ED080A9FED2A0A80ED090A9FED260AD4 -:1061500080ED0A0A9FED240A80ED0B0A00202349F6 -:1061600081F83000234848639FED1F0A486B804741 -:106170009FED1D0A204880ED000A9FED1B0A80ED6F -:10618000010A9FED190A80ED020A9FED170A80EDC2 -:10619000030A9FED150A80ED040AB1EE000A80EDB6 -:1061A000060AB3EE040A80ED050A9FED0F0A80EDA2 -:1061B000070AB6EE000A80ED080A9FED0D0A80ED91 -:1061C000090A9FED090A80ED0A0A9FED070A80ED92 -:1061D0000B0A0020084981F83000084848639FED09 -:1061E000020A486B804710BD0000000048130020E1 -:1061F0000AD7A33B395100088013002085510008BD -:106200002DE9F04F9DB0054600240020199064212F -:106210006846FAF74DF96878297840EA0129E87864 -:10622000A97840EA0126012E01DA212E7EDCB9F19F -:10623000300F7DDC06EB0900312879DCF01DC11739 -:1062400000EB5171C1F3C7011C9101222046611C72 -:10625000CCB20DF800202046611CCCB20DF8002015 -:106260002046621CD4B21C990DF800100027BB46D2 -:106270002DE000200DF8040082461AE009EB07012A -:1062800088B21BA9FAF746FC1DF804009DF86C10B3 -:1062900001FA0AF10843C0B20DF80400781C87B275 -:1062A000B74202DB0120199006E00AF1010000F07C -:1062B000FF0ABAF1080FE1DB00BF601CC4B21998F5 -:1062C000012800D106E00BF1010000F0FF0B1C9843 -:1062D0008345CEDB00BF21466846FDF7BBFB804609 -:1062E00008F0FF022046611CCCB20DF800204FEAF6 -:1062F00028222046611CCCB20DF800201248008AEA -:10630000A04201DB204601E00F48008A0E49488286 -:106310004A8AC8686946FAF754F80B48428AC16845 -:106320000A4800F0B9FA1DB0BDE8F08F03E0FFE7BE -:1063300002201A9001E003201A9001201A99FFF719 -:1063400015FD00BFEFE7000034130020E00300203C -:106350002DE9F04F9DB00546002400201990687883 -:10636000297840EA0129E878A97840EA0126012E37 -:1063700001DA312E7EDCB9F1300F7FDC06EB09004B -:1063800031287BDCF01DC11700EB5171C1F3C7014F -:106390001C9101222046611CCCB20DF80020022283 -:1063A0002046611CCCB20DF800202046621CD4B2FD -:1063B0001C990DF800100027BB462DE000200DF8B9 -:1063C000040082461AE009EB070188B21BA9FAF71C -:1063D000BDFB1DF804009DF86C1001FA0AF108439A -:1063E000C0B20DF80400781C87B2B74202DB01206E -:1063F000199006E00AF1010000F0FF0ABAF1080F57 -:10640000E1DB00BF601CC4B21998012800D106E08E -:106410000BF1010000F0FF0B1C988345CEDB00BFA1 -:1064200021466846FDF716FB804608F0FF0220462D -:10643000611CCCB20DF800204FEA28222046611CD6 -:10644000CCB20DF800201348008AA04201DB2046A0 -:1064500001E01048008A0F4948824A8AC8686946A4 -:10646000F9F7AFFF0B48428AC1680B4800F014FAF5 -:106470001DB001E005E001E0BDE8F08F02201A90B8 -:1064800001E003201A9002201A99FFF76FFC00BF69 -:10649000EEE7000034130020E00300202DE9F04F68 -:1064A00099B00646002416B919B0BDE8F08F70788F -:1064B000317840EA0127F078B17840EA0125012DD2 -:1064C00065DB312D63DC302F5EDC781900285BDB67 -:1064D0007819312858DC01222046611CCCB20DF815 -:1064E000002003222046611CCCB20DF80020680673 -:1064F000020E2046611CCCB20DF800204FF00008BF -:1065000017E007EB080188B2FAF7F0FA81464FEA84 -:1065100029222046611CCCB20DF8002009F0FF02B0 -:106520002046611CCCB20DF8002008F101001FFAD2 -:1065300080F8A845E5DB21466846FDF78BFA8246E0 -:106540000AF0FF022046611CCCB20DF800204FEA91 -:106550002A222046611CCCB20DF800201048008A87 -:10656000A04201DB204601E00D48008A0C49488228 -:106570004A8AC8686946F9F724FF0948428AC1680F -:10658000084800F089F98FE74FF0020B01E04FF067 -:10659000030B59460320FFF7E9FB00BF84E7000027 -:1065A00034130020E00300202DE9F04F99B0054698 -:1065B000002415B919B0BDE8F08F6878297840EA51 -:1065C0000127E878A97840EA0126012E62DB312E06 -:1065D00060DC302F5BDCB819312858DC0122204602 -:1065E000611CCCB20DF8002004222046611CCCB204 -:1065F0000DF800207006020E2046611CCCB20DF88A -:1066000000204FF0000817E007EB080188B2FAF706 -:1066100077FA81464FEA29222046611CCCB20DF858 -:10662000002009F0FF022046611CCCB20DF80020CA -:1066300008F101001FFA80F8B045E5DB2146684605 -:10664000FDF708FA82460AF0FF022046611CCCB230 -:106650000DF800204FEA2A222046611CCCB20DF82A -:1066600000201048008AA04201DB204601E00D48CE -:10667000008A0C4948824A8AC8686946F9F7A1FE2F -:106680000848428AC168084800F006F992E74FF0CE -:10669000020B01E04FF0030B59460420FFF766FBA5 -:1066A00000BF87E734130020E003002010B501226B -:1066B00011031448FBF760F80122D1021148FBF7DF -:1066C0005BF80122D1031048FBF756F800224FF483 -:1066D00080410D48FBF750F8012280210A48FBF762 -:1066E0004BF8012204210948FBF746F80122114624 -:1066F0000648FBF741F8002210210548FBF73CF85B -:1067000010BD0000000C02400010024000040240D6 -:10671000000802404C480068401C4B49086008468D -:106720000068042805DD012048490860002046492A -:10673000086047480068401C4549086008460068F2 -:10674000092805DD01204349086000204049086010 -:1067500041480068401C4049086008460068182805 -:1067600005DD01203D49086000203B4908603C48A8 -:106770000068401C3A49086008460068312805DD79 -:106780000120384908600020354908603648006813 -:10679000401C3549086008460068632805DD012073 -:1067A0003249086000203049086031480068401CC8 -:1067B0002F49086008460068B0F5967F05DB012088 -:1067C0002C49086000202A4908602B480068401CBA -:1067D0002949086008460068B0F5FA7F05DB01200A -:1067E0002649086000202449086025480068401CAC -:1067F0002349086008460068B0F57A7F05DB012070 -:106800002049086000201E4908601F48006863286E -:1068100005DD01201D49086000201B4908601A4859 -:106820000068401C1849086019480068312805DDD7 -:1068300001201849086000201549086014480068C4 -:10684000401C134908607047F4000020F00000204D -:10685000FC000020F80000200401002000010020BE -:106860000C0100200801002014010020100100206C -:106870001C0100201801002024010020200100201C -:106880002C010020280100203401002030010020CC -:106890003C0100203801002070B504460D46164624 -:1068A000324629462046FCF795FD70BD70B504467A -:1068B000FEF762FD8020FDF721F92046FDF71EF965 -:1068C000FDF7EEF80546FFF7F1FE284670BD70B5FE -:1068D00005460C46FEF750FD0020FDF70FF928464F -:1068E000FDF70CF92046FDF709F9FFF7DFFE70BD53 -:1068F0002DE9F04F9FB00446002500201B906078E2 -:10690000217840EA012AE078A17840EA012620793E -:106910001D90012E7EDB212E7CDC1D98C000B04234 -:106920007FDBBAF1300F79DC0AEB0600312875DC29 -:106930000027A9462FE009F10500205C1C904FF0CC -:10694000000B1CE0012000FA0BF01C99084018B164 -:106950004FF47F401E9001E000201E900AEB0701DB -:1069600088B21E99FDF714FD781C87B2B74202DB8E -:1069700001201B9006E00BF1010000F0FF0BBBF1C2 -:10698000080FDFDB00BF1B98012800D106E009F1EA -:10699000010000F0FF091D988145CCDB00BF0122FA -:1069A0002846691CCDB201A90A540F222846691C49 -:1069B000CDB201A90A5401A8284421680160281D0C -:1069C000C5B2294601A8FDF745F880462846691C4E -:1069D000CDB201A901F800804FEA28222846691C9F -:1069E000CDB201A90A541348008AA84201DB284607 -:1069F00001E01048008A0F4948824A8AC86801A904 -:106A0000F9F7DFFC0B48428AC1680B48FFF744FFE7 -:106A10001FB001E005E001E0BDE8F08F02201A9010 -:106A200001E003201A900F201A99FFF79FF900BF89 -:106A3000EEE7000034130020E00300202DE9F04FC2 -:106A40009BB00446002614B91BB0BDE8F08F6078F7 -:106A5000217840EA0128E078A17840EA012794F8FB -:106A600004B0012F5FDB312F5DDCBBEB470F5AD148 -:106A7000B8F1300F54DC08EB0700312850DC00255A -:106A800012E0062000EB4500205C052101EB4501EA -:106A9000615C40EA01201A9008EB050188B21A995E -:106AA000FDF76EFC681C85B2BD42EADB0122304670 -:106AB000711CCEB201A90A5410223046711CCEB20C -:106AC00001A90A5401A8304421680160301DC6B2F2 -:106AD000314601A8FCF7BEFF81463046711CCEB29C -:106AE00001A901F800904FEA29223046711CCEB26C -:106AF00001A90A541048008AB04201DB304601E087 -:106B00000D48008A0C4948824A8AC86801A9F9F7E9 -:106B100058FC0948428AC1680848FFF7BDFE93E760 -:106B20004FF0020A01E04FF0030A0AF0FF011020C3 -:106B3000FFF71CF900BF87E734130020E0030020B3 -:106B40002DE9F0479AB005468A46002468782978EE -:106B500040EA0129E878A97840EA012717B1B7F59A -:106B60007F4F43D1B9F1300F3DDC39464846FDF740 -:106B70000FFC01222046611CCCB201A90A54052257 -:106B80002046611CCCB201A90A5401A820442968FE -:106B90000160201DC4B2214601A8FCF75BFF064638 -:106BA0002046611CCCB201A90E5432122046611C51 -:106BB000CCB201A90A541148008AA04201DB204648 -:106BC00001E00E48008A0D4948824A8AC86801A936 -:106BD000F9F7F7FB0948428AC1680948FFF75CFEEC -:106BE0001AB0BDE8F0874FF0020801E04FF003084B -:106BF00041460520FFF7BAF800BFF1E73413002043 -:106C0000E00300202DE9F0479AB005468A460024AB -:106C100015B91AB0BDE8F0876878297840EA0127ED -:106C2000E878A97840EA0128302F3BDC4146384615 -:106C3000FDF7A6FB01222046611CCCB201A90A5433 -:106C400006222046611CCCB201A90A5401A82044A6 -:106C500029680160201DC4B2214601A8FCF7FAFE94 -:106C600006462046611CCCB201A90E5432122046C1 -:106C7000611CCCB201A90A540E48008AA04201DB73 -:106C8000204601E00B48008A0A4948824A8AC868BF -:106C900001A9F9F796FB0748428AC1680648FFF741 -:106CA000FBFDB6E74FF0020949460620FFF75EF804 -:106CB00000BFAEE734130020E003002010B591EAD6 -:106CC000030F48BF83F0004300F1C483841A71EBC3 -:106CD000030C05D2121943EB0C03001B61EB0C01F2 -:106CE000DFF824E14FEA1154A4EB135C1EEA430FD2 -:106CF00018BF9EEA445F73D023EA0E03DCF1200E36 -:106D000021EA045143F4801332D322FA0CFE10EB33 -:106D10000E0023FA0CFE41EB0E01CCF1200E03FA1B -:106D20000EFE10EB0E0051F10001B1F5801FCCF109 -:106D3000200E32D201EB045112FA0EF2BDE81040DF -:106D400058BF7047401C38BF5FEA420218BF704707 -:106D5000002814BF20F0010041F100014FEA410377 -:106D600013F5001F38BF7047A1F1C04100F064BBAC -:106D7000012A43EB0302ACF1200CDCF11F0E32BF01 -:106D80004FF0000E23FA0CF310EB030041EB04511B -:106D9000B4EB115FD0D0A1EB045101F5801149088B -:106DA0005FEA300001EB04510ED350F1000038BF10 -:106DB00012FA0EFE08D1BDE81040C9E7401C38BFEA -:106DC0005FEA4202CAD1C3E7BDE810404FEA41037F -:106DD00013F5001F38BF7047A1F1C04100F02CBB74 -:106DE0009EEA445F08D011EA5E0FBDE8104004BF80 -:106DF00001F0004100207047BDE8104070B500F080 -:106E0000CDFA00BF64FBBE3E0000E0FF2DE9C041AB -:106E100030B4DFF8A0C23CEA111418BF3CEA1314E6 -:106E200000F0EC8081EA03051CEA111444EAD574F1 -:106E300018BF1CEA131500F0C780A4EB05044FF03F -:106E4000004545EAC12145EAC32341EA505143EADE -:106E5000525304F17F74994204F500344FEAC02084 -:106E60004FEAC22208BF904200F09C804FEA1365AF -:106E70000FF24016765D4FEA134506FB05F7C7F1A2 -:106E8000807706FB07F74FEAD737A7FB0368764200 -:106E9000C8F58038A7FB06CE38BFA8F1010807FB6C -:106EA00008E64FF0000EA6FB028CE6FB03CEDCF1F9 -:106EB000000CCEF1004E38BFAEF1010EA6FB0C580F -:106EC0004FF000074FF00005E6FB0E87A1FB08C658 -:106ED000A0FB07CE16EB0E0645F10005E1FB0765AA -:106EE00015F1E04E7EBFA4F580345FEA46066D41A1 -:106EF00016F1800745F100054FEA17274FEA0666AD -:106F000047EA0567A6F1DE46B6F1805F4FEA152530 -:106F10001FD9384624F0010C05EBC471BCF1FE6F9B -:106F200001EB0C1102D8F0BCBDE8008124425CBF2B -:106F300001F5801E9EEAC47F02D4F0BCBDE800814A -:106F4000244238D4F0BCA1F1C041BDE8004100F0BA -:106F500073BA4FEAD22242EA43524FEAD323A7FB45 -:106F600002864FEAD02040EA415007FB03661EEA42 -:106F70000E0F4FEAD12105FB026658BFA6EB005663 -:106F8000B6EB00564FEA520E4EEAC37E18EB0E0ED9 -:106F900056EB530EBDD518EB02085E417F1C55F130 -:106FA0000005B6E74FF480154FF000074FF00006DC -:106FB0004FF00008ADE7F0BC4FF0000001F1C04118 -:106FC00001F00041BDE8008111EA0C1F0CEA131525 -:106FD00000D00CE013EA0C1F00F025804FF00000F9 -:106FE000F0BC81EA030101F00041BDE80081F0BC82 -:106FF000BDE8004181EA030100F01EBAF0BCBDE823 -:10700000004170B500F0CAF9097EFC3E00F007B8F7 -:1070100081EA03014FF0000001F00041704781EA6E -:10702000030100F009BAF0BCBDE800414FF00000D8 -:1070300021497047FFFDFBF9F7F5F4F2F0EEEDEBB7 -:10704000E9E8E6E4E3E1E0DEDDDBDAD8D7D5D4D366 -:10705000D1D0CFCDCCCBCAC8C7C6C5C4C2C1C0BFB2 -:10706000BEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFB8 -:10707000AEADACABAAA9A8A8A7A6A5A4A3A3A2A19C -:10708000A09F9F9E9D9C9C9B9A9999989797969557 -:1070900095949393929191908F8F8E8E8D8C8C8BF3 -:1070A0008B8A89898888878786858584848383827B -:1070B000828181800000FF070000F87F4FEA4103D2 -:1070C0004FEA5353A3F58063D3F11E03C8BFD3F136 -:1070D000210C0CDD4FF0004242EAC12242EA50523C -:1070E00032FA03FC8CEAE17CACEBE1707047102BC8 -:1070F000C4BF0020704703F5787CBCF1FF3F04D08B -:107100006FF0004282EA2100704770B500F046F946 -:107110004992248000207047F2E700004FEA1153A3 -:10712000A3F58063D3F11E03A8BFD3F1200C08DBC5 -:107130004FF0004242EAC12252EA505232FA03F0C2 -:10714000704709420BD4102BC4BF0020704703F5D1 -:10715000787CBCF1FF3F05D04FF0FF3070474FF017 -:107160000000704770B500F019F900BF4992248003 -:1071700000207047F0E710F0004248BF4042B0FAEC -:1071800080F310FA03F10AD0C3F11D0303F5806305 -:107190004FEA415002EB035202EBD12170474FF00E -:1071A000000070477FEAE17202D1101A62EB010120 -:1071B000B1FA81F30B3B24D3994012D1B0FA80F39A -:1071C00010FA03F108BF7047C3F11D0303F54063D4 -:1071D00003EBC2234FEAD1224FEA415002EB0351A5 -:1071E0007047C3F1200C20FA0CFC9840C3F1320325 -:1071F00003F5406303EBC22341EA0C0101EB0351A9 -:10720000704710B5C3F1320CC3F10004C4F1200E75 -:107210000CF5406C0CEBC22201FA0EFC21FA04F1D1 -:1072200000FA0EF3E040BDE8104040EA0C0001EB2C -:10723000025138BF7047401C41F100015B0008BF9C -:1072400020F0010070470000DFF848C170B51CEA6B -:10725000111E1EBF1CEA13159EEA0C0F95EA0C0FB7 -:1072600000F06F8081EA030423EA4C134EEAD47ED7 -:1072700021EA4C1141F4801143F48013AE44A1FB88 -:10728000024CA0FB0365AEF17F7E361955EB0C0571 -:10729000A1FB034C4CF10003A0FB021C16EB0C06F7 -:1072A000654153F10003094218BF46F0010613F48B -:1072B000007F0BD14FEA03314FEA0530340341EA36 -:1072C000155140EA16506FF003020AE04FEAC3215D -:1072D0004FEAC520F40241EA555140EA56506FF09A -:1072E000020202EB2E4201EB025585EACE710AD072 -:1072F0005FEA440C18BF24F0004450F1000041F153 -:10730000000120EAD47040F2FE7C624500D270BDDC -:10731000A84214BF4FF080444FF04044002E08BFF5 -:107320000024BEF1806FA8BFA1F1C041BDE870404C -:1073300080F282804FF0000001F1C04101F0004175 -:1073400070479EEA0C0F0CEA131518BF95EA0C0F54 -:1073500006D04FF0000081EA030E0EF0004170BD30 -:1073600000F01CF88900013E00F007B800F009B8F1 -:107370004FEA430C5FEA5C5C08D081EA030100F04D -:107380005BB84FEA410C5FEA5C5CF6D14FF000005D -:10739000014970470000FF070000F87F0EF1020E60 -:1073A0002EF0030E5EF8046B364205D4012A43EB3F -:1073B000030515F5001F12D8012841EB010C1CF53F -:1073C000001F0CD80ED14FEAD17C15F5001F0CEB35 -:1073D0004C0C0CF1020C08BF4CEBD37C04E04FF0DA -:1073E000080C01E04FEAD37C0CEB4C0526FA05F6BD -:1073F00006F00706B6F1040C06D20EEB860CBDE8CB -:1074000070404CF0010C6047DFE80CF0090B020201 -:107410004FF000414FF00000A1F5002170BD19466A -:107420001046012851EB010418BFD4F5001484BFA5 -:10743000002001F0004170BD0808A0F500114FEADE -:107440003101704710B591EA030F48BF83F0004344 -:107450003FF53CAC841A71EB030C07D212198CF087 -:10746000004C43EB0C03001B61EB0C01DFF8A4E1C3 -:107470004FEA1154A4EB135C1EEA430F18BF9EEAB7 -:10748000445F00F0B08023EA6E03524221EA0451C7 -:10749000C3EB6E0338BF5B1EDCF1200E25D322FA4E -:1074A0000CFE10EB0E0043FA0CFE41EB0E01CCF18A -:1074B000200E03FA0EFE10EB0E0051F10001CCF18C -:1074C000200E29D412FA0EF201EB0451BDE810404F -:1074D00058BF7047401C1CBFB2F1004F70470028D6 -:1074E0000CBF491C20F00100704712EB020E43EB69 -:1074F000030218BF4FF0010E4EEA4202ACF1200C1D -:10750000DCF11E0E54D943FA0CFE10EB0E0051F1C3 -:10751000FF31CCF11E0ED5D50EF1010E12FA0EFE82 -:10752000404141EB010101EB445C5FEA5C5C10D936 -:1075300010EBDE7001EB045138BFBEF1004FBDE827 -:10754000104018BF704700280CBF491C20F00100F4 -:10755000704730D24FEAD42C11F5001124F40064A6 -:107560001BD0B1FA81F20B3AA41AA41ED2F1200367 -:10757000914030FA03F31943904001EBCC71002C99 -:1075800001EB0451BDE81040A8BF704701F1C041B4 -:107590004FF0000001F000417047B0FA80F310FA9C -:1075A00003F100D110BDE41A173C4805C90AE4E70D -:1075B00001EB045110BD491001EB0451BDE810402E -:1075C0004FEA300002E04FF0000170474A0008BF68 -:1075D0000042F8D0B2F5001F28BF704701F000410B -:1075E0004FF0000070479EEA445F07D011EA5E0F3B -:1075F000BDE8104004BF002100207047BDE81040E6 -:1076000070B5FFF7CBFE00BF40DFF63E83F00041D0 -:10761000104670470000E0FF4FF04070E1EE100AA6 -:10762000704700061016000610160000000000004B -:10763000000001020304060708090000000001021F -:107640000304000064760008000000206C010000C4 -:10765000C4010008787600086C010020AC18000016 -:10766000000200085142105201034E24F40230017E -:0876700002DC644298000000F6 +:1050D000300100203801002000007D4458010020EC +:1050E00070090020000061440000C84210B50F485C +:1050F000006801280AD100200C49086000F0AAFCD1 +:10510000FFF7ECF9FFF7B6FCFFF7FEF90848006877 +:1051100001280AD100200649086000F0ADFA0549CF +:105120000880084600880449C88410BDF8000020A3 +:1051300010010020EC0000207009002010B52DEDBA +:10514000028BB0EE408A00249FED0C0A28EE000A84 +:10515000B0EE408A9FED0A0A28EE000ADFED090A48 +:1051600080EE201ABCEEC10A10EE100A84B20221B1 +:10517000204600F059F8BDEC028B10BD0000C8427B +:105180000000804500404E4510B52DED028BB0EE7D +:10519000408A00249FED0C0A28EE000AB0EE408AF7 +:1051A0009FED0A0A28EE000ADFED090A80EE201AB8 +:1051B000BCEEC10A10EE100A84B20321204600F0B2 +:1051C00033F8BDEC028B10BD0000C84200008045E2 +:1051D00000404E4510B52DED028BB0EE408A002404 +:1051E0009FED0D0A28EE000AB0EE408A9FED0B0AF3 +:1051F00028EE000ADFED0A0A80EE201ABCEEC10A92 +:1052000010EE100A84B2074804600121204600F025 +:105210000BF8BDEC028B10BD0000C84200008045B9 +:1052200000404E45480000202DE9F04107460C465D +:105230004FF6FF7000EA8705C5F30D05012C15D167 +:10524000012280214A48FCF797FA01224021484870 +:10525000FCF792FA0A2000F002F90022802144486B +:10526000FCF78AFA0A2000F0FAF82FE0022C15D198 +:10527000012211033F48FCF77FFA012291023D48C9 +:10528000FCF77AFA0A2000F0EAF80022E102394835 +:10529000FCF772FA0A2000F0E2F817E0032C15D1AF +:1052A0000122D1023348FCF767FA0122910231480A +:1052B000FCF762FA0A2000F0D2F800224FF40061F5 +:1052C0002C48FCF759FA0A2000F0C9F800263BE008 +:1052D000012240212648FCF74FFA0122910225487D +:1052E000FCF74AFA05F40040B0F5004F0AD101225C +:1052F00020211F48FCF740FA0122D1031E48FCF789 +:105300003BFA0AE0002220211948FCF735FA002276 +:105310004FF400411848FCF72FFA0A2000F09FF8DC +:10532000002240211248FCF727FA00224FF4806146 +:105330001048FCF721FA0A2000F091F84FF6FF70B0 +:1053400000EA4505701CC6B2102EC1DB0122802187 +:105350000748FCF711FA012211030648FCF70CFA82 +:105360000122D1020348FCF707FABDE8F0810000F2 +:10537000000C0240000802400000024010B5204826 +:105380000078092839D2DFE800F038050C131A201C +:10539000262C320000224FF480511A48FCF7ECF919 +:1053A0002BE000224FF400611648FCF7E5F924E0F9 +:1053B00000224FF400411448FCF7DEF91DE0002202 +:1053C00080211148FCF7D8F917E0002204210F488A +:1053D000FCF7D2F911E0002201210C48FCF7CCF9CE +:1053E0000BE0012291030848FCF7C6F905E0012211 +:1053F00010210748FCF7C0F900BF00BF10BD000036 +:105400005C000020000C024000100240000402403A +:105410000008024010B5012280210C48FCF7ACF9CD +:10542000012211030A48FCF7A7F90122D10208481A +:10543000FCF7A2F9002240210448FCF79DF9002264 +:105440004FF480610248FCF797F910BD000C024050 +:105450000008024001B50098FCF748F808BD00E0DC +:1054600000BF011EA0F10100FAD1704711B526E07E +:10547000009CB4F5617F02D94FF4617400E0009C98 +:1054800023464FF0E024A069A82404FB130100295F +:1054900008DB00BF4FF0E024A26982420CDA8A42A6 +:1054A000F8DA09E0084C214400BF4FF0E024A2697B +:1054B0008242FADD8A42F8DC009CE41A0094009CE7 +:1054C000002CD5D118BD00004090020010B500F0AE +:1054D0006DFA3F48007800F0010204213D48FCF7D6 +:1054E0004BF93B480078C0F3400208213948FCF7EB +:1054F00043F937480078C0F3800210213548FCF7A3 +:105500003BF933480078C0F3C00220213148FCF752 +:1055100033F92F480078C0F3001240212D48FCF7E2 +:105520002BF92B480078C0F340124FF400512A4861 +:10553000FCF722F926480078C0F380124FF480412E +:105540002548FCF719F922480078C2094FF40041B8 +:105550002148FCF711F921480078214908701C48BE +:1055600080781E4908701E480078097888420AD061 +:105570001749887800F0E4F91549487800F0E0F917 +:1055800000F034F805E01249487800F0D9F900F04D +:105590002DF8FEF747FF000A12490870FEF742FF98 +:1055A0001049487010211048FCF7D4F80446202117 +:1055B0000D48FCF7CFF804EB40000A498870044816 +:1055C000C0780121B1EBD01F01D100F045F910BD29 +:1055D0007A0000200010024000080240EF00002086 +:1055E000EE0000207F0000200000024010B50022E5 +:1055F0004FF480710748FCF7BFF80A20FFF736FF29 +:10560000012211020348FCF7B7F80A20FFF72EFF2A +:1056100010BD00000008024010B5002415480068C5 +:1056200020F00C001349086004E0601CC4B20120A3 +:10563000FFF71CFF02210F48FCF78CF808B1C82CBB +:10564000F3DBC82C01DB012010BD002404E0601C4A +:10565000C4B20120FFF70AFF02210648FCF77AF8DE +:1056600008B9F02CF3DBF02C01DB0120ECE7002083 +:10567000EAE70000000802402DE9F04100F0A4F83C +:1056800000F082F8FFF7C8FFCC2000F0A9F8BE2098 +:1056900000F0A6F800F066F8074600F063F805464B +:1056A000072D05DDE843C5B2F843C7B2002600E088 +:1056B00001262C46200204B2E01904B200EE104A82 +:1056C000B8EEC00AF6EE040A20EE200ABDEEC00ACB +:1056D00010EE100A04B216B12046BDE8F081604217 +:1056E00000B2FAE710B5012202210448FCF744F8A1 +:1056F00000F04AF8FFF790FF10BD000000080240DC +:1057000010B51748006820F00C00154908600846DD +:10571000006840F004000860002202211048FCF7F5 +:105720002BF80220FFF7A2FE012202210C48FCF711 +:1057300023F80B48006820F00C00094908600C2091 +:10574000FFF794FE02210648FCF704F808B1012493 +:1057500000E000243220FFF789FE204610BD000043 +:105760000008024070B50026012508E0FFF7C8FFD9 +:105770000446E00140EA6600C6B2681CC5B2082DC6 +:10578000F4DD304670BD000010B50E48006820F012 +:105790000C000C4908600846006840F004000860EE +:1057A000002202210748FBF7E7FF40F2EE20FFF757 +:1057B0005DFE012202210348FBF7DEFF0F20FFF709 +:1057C00055FE10BD0008024010B5FFF7DDFFFFF7E2 +:1057D00023FFCC2000F004F8442000F001F810BDB5 +:1057E00070B504461B48006820F00C001949086099 +:1057F0000846006840F004000860012526E004F037 +:105800000106641086B1002202211248FBF7B4FFA2 +:105810000220FFF72BFE012202210E48FBF7ACFF0E +:105820003C20FFF723FE0FE0002202210948FBF78E +:10583000A3FF3C20FFF71AFE012202210548FBF7D7 +:105840009BFF0220FFF712FE681CC5B2082DD6DDB3 +:1058500070BD00000008024010B53C210E48FDF765 +:1058600045F849F218700C49096848623C210A4819 +:10587000FCF7D6FF0020094908600949086009497A +:1058800008609820084908600848C07800F07F0048 +:105890000649C87010BD0000C00200205C01002055 +:1058A0006001002064010020680100207A000020CF +:1058B0001C4800681C4908601C480068406A194977 +:1058C00008600846006818490968401A1849884263 +:1058D00005DA18480068401C164908600DE01148B8 +:1058E000006811490968401A4CF25031884204DDC1 +:1058F00010480068401E0F4908600E480068C0EB61 +:1059000000400849096808440B49086008460068D7 +:105910004FF6FF7101EA10400849088506480088E3 +:1059200048857047600100205C010020C002002013 +:10593000B03CFFFF680100206401002070090020D6 +:1059400070B504462546002628E000224FF40041A9 +:105950001448FBF711FF05F0800028B10122402117 +:105960001148FBF709FF04E0002240210E48FBF735 +:1059700003FF6806050E00224FF400410948FBF7BB +:10598000FBFE0A20FFF772FD0122D1030548FBF759 +:10599000F3FE0A20FFF76AFD701CC6B2082ED4DBA6 +:1059A00070BD0000000C02400000024010B5064827 +:1059B0000068012806D102210448FBF7D3FE00202D +:1059C0000149086010BD00002801002000100240BD +:1059D000FCF716F8FEF7C8F8FDF7D2FDFDF77CFDE1 +:1059E000FDF742FDFDF7DEFEFDF7FAFEFDF71AFFBB +:1059F000FDF7A2FFFDF7BCFFFDF7D6FFFDF7F0FFB7 +:105A0000FEF70AF8FDF74CFFFDF770FF1048FCF7B2 +:105A1000EBFDFFF721FFFEF76BFDFFF7DBF9FEF76C +:105A200029FFFFF7F7FC00F0E9F8FFF75BFEFEF750 +:105A3000EBFC00F0FFF900F061FB07E0FFF746FD2B +:105A4000FFF754FBFFF754FAFFF732FFF6E70000C9 +:105A50000803002010B52DED028B9FED5C0AB0EE1F +:105A6000408AFBF78FF804462078594908600846B9 +:105A700000680002086060780968084354490860BB +:105A80000846006800020860A07809680843504989 +:105A9000086008460068B0F5000F0FDB0846006894 +:105AA000A0F1807000EE100AB8EEC00ADFED490ADE +:105AB00080EE201A484880ED001A0BE0444890ED33 +:105AC000000AB8EEC00ADFED430A80EE201A424811 +:105AD00080ED001A4048D0ED000A9FED400A9FED8E +:105AE000401A01EE200AF2EE080A80EE201A3D4824 +:105AF00080ED001A90ED000AF2EE040A20EE200A72 +:105B000039480078401E00EB8000384901EB001056 +:105B10003749097800EB810080ED000A32480078AF +:105B2000401C3149087008460078032804DD012232 +:105B300051023048FBF720FE2B480078062838DD5C +:105B4000012029490870002026E09FED200AB0EED0 +:105B5000408A00210EE000EB8002244B03EB02128E +:105B600002EB810292ED000A30EE080AB0EE408AA4 +:105B70004A1CD1B21429EEDBB3EE040AC8EE000AC7 +:105B8000BCEEE00A10EE101A8AB200F10D011A4BB9 +:105B900023F81120411CC8B20628D6DB144800782F +:105BA000401C1349087008460078132801DD0020C6 +:105BB00008700D480078042805DA00224FF40071BF +:105BC0000C48FBF7D9FDBDEC028B10BD00000000B6 +:105BD000680000200000004B7400002000A00C466C +:105BE00000401C466C0000205C0000209007002054 +:105BF00078000020000802407009002010B500F075 +:105C000057FD00224FF400712A48FBF7B5FD0A202A +:105C1000FFF720FC0120284908708121002000F0B6 +:105C200058FE0A20FFF716FC022023490870812144 +:105C3000002000F04EFE0A20FFF70CFC03201E4956 +:105C400008708121002000F044FE0A20FFF702FCCA +:105C5000012251021748FBF78FFD0A20FFF7FAFBDC +:105C60000420154908708121002000F032FE0A202E +:105C7000FFF7F0FB0520104908708121002000F09B +:105C800028FE0A20FFF7E6FB06200B490870812159 +:105C9000002000F01EFE0A20FFF7DCFB0120064971 +:105CA0000870002241020348FBF766FD0A20FFF757 +:105CB000D1FB10BD000802405C0000202DE9F0413E +:105CC00004460D460CB1022D01DABDE8F0812678BC +:105CD0006778012E01D0002E48D1052F3AD008DC7C +:105CE000012F0DD0022F11D0032F15D0042F37D143 +:105CF00018E0062F1CD00F2F20D0102F30D123E01A +:105D0000A81E81B2A01C00F07DFA2EE0A81E81B270 +:105D1000A01C00F01FFB28E0A81E81B2A01C00F010 +:105D2000BFFB22E0A81E81B2A01C00F03FFC1CE0DB +:105D3000A81E81B2A01C00F067FF16E0A81E81B269 +:105D4000A01C00F0D7FD10E0A81E81B2A01C00F03E +:105D500077FE0AE0A81E81B2A01C00F0F3FE04E06A +:105D60006078012100F004F800BF00BF00BFACE77D +:105D7000F0B599B005460E460024002701222146C1 +:105D8000641C0DF8012045F080022146641C0DF8CA +:105D900001202146641C0DF8016021466846FDF78C +:105DA00059FE0746FAB22146641C0DF801203A124A +:105DB0002146641C0DF801200B48008AA04201DB3B +:105DC000204601E00848008A074948824A8AC86894 +:105DD0006946FAF7F6FA0448428AC168034800F0B7 +:105DE0005DFD19B0F0BD000034130020E003002079 +:105DF0002DE9F04100240E480568C488022C01DA20 +:105E0000BDE8F081A01E295C601E285C41EA0027E5 +:105E1000A01E81B22846FDF71DFE0646B74200D0FF +:105E2000EEE7034AD1881068FFF748FF00BFE7E7B5 +:105E30003413002010B50E480E49086000208880F9 +:105E4000C88008720C48C8604FF480600882002047 +:105E50004882012209490A48FDF73AFA6FF0010029 +:105E60000849096808610748FCF7BEFB10BD00003F +:105E7000340A002034130020340E00204401002096 +:105E8000E00300205003002010B51848808840F23D +:105E9000FF3188420EDB00201449888008460068E4 +:105EA000002101604FF6FF730A2211A11348FDF78C +:105EB00031FA14E0124801780C4882888088401C2E +:105EC0000A4B98801846006881540E48FCF7E0FBA6 +:105ED00000200C49096848620A48FCF785FB01224A +:105EE00007490648FDF7F4F910BD000034130020FF +:105EF000CAFDBEDDD2E7B3F600000000E0030020DB +:105F0000440100205003002010B5044694F83000EE +:105F1000FE2802DD94F8300002E094F83000401CC6 +:105F200084F8300094ED070AD4ED080AB4EEE00AD4 +:105F3000F1EE10FA3ADD94ED070AF1EE040AB4EE40 +:105F4000E00AF1EE10FA31D294F8300032282DDD5B +:105F500094ED040AD4ED090A30EE200A84ED040A17 +:105F600094ED040AD4ED0A0AB4EEE00AF1EE10FA58 +:105F700002D894ED040A01E094ED0A0A84ED040AC3 +:105F800094ED040AD4ED050AB4EEE00AF1EE10FA3D +:105F900002D894ED040A01E094ED050A84ED040AA8 +:105FA000D4ED040AB0EE600A606B804794ED070AF6 +:105FB000D4ED080AF1EE600AB4EEE00AF1EE10FA50 +:105FC0003AD294ED070AF9EE040AB4EEE00AF1EED3 +:105FD00010FA31DD94F8300032282DDD94ED040AFA +:105FE000D4ED090A30EE600A84ED040A94ED040A47 +:105FF000D4ED0B0AB4EEE00AF1EE10FA02DB94EDF8 +:10600000040A01E094ED0B0A84ED040A94ED040AFD +:10601000D4ED060AB4EEE00AF1EE10FA02DB94EDDC +:10602000040A01E094ED060A84ED040AD4ED040AA2 +:10603000B0EE600A606B804710BD000010B52DED1A +:10604000028BB0EE408A044694ED050AB4EEC80A0D +:10605000F1EE10FA02DDB0EE480A01E094ED050A17 +:10606000B0EE408AB5EEC08AF1EE10FA02DDB0EE75 +:10607000480A01E09FED1E0AB0EE408A94ED050A41 +:10608000D4ED060A30EE600AD4ED060A38EE601A46 +:10609000C1EE000A9FED170A20EE800A84ED030A84 +:1060A00094ED030A9FED131AC0EE010A9FED120A48 +:1060B00020EE800A84ED020A84ED048A94ED040A3D +:1060C000F7EE040A20EE200A84ED0A0A94ED040A91 +:1060D000F6EE080A20EE200A84ED0B0A002084F870 +:1060E0003000B0EE480A606B8047BDEC028B10BDFB +:1060F000000000000000C8420000614410B59FEDA0 +:106100003B0A3B4880ED000A9FED380A80ED010A0A +:106110009FED360A80ED020A9FED340A80ED030AF6 +:106120009FED320A80ED040AB1EE000A80ED060A06 +:10613000B3EE040A80ED050A9FED2C0A80ED070AF4 +:10614000B6EE000A80ED080A9FED2A0A80ED090AE2 +:106150009FED260A80ED0A0A9FED240A80ED0B0AC6 +:106160000020234981F83000234848639FED1F0A2F +:10617000486B80479FED1D0A204880ED000A9FED87 +:106180001B0A80ED010A9FED190A80ED020A9FEDBE +:10619000170A80ED030A9FED150A80ED040AB1EE9F +:1061A000000A80ED060AB3EE040A80ED050A9FEDB1 +:1061B0000F0A80ED070AB6EE000A80ED080A9FED8F +:1061C0000D0A80ED090A9FED090A80ED0A0A9FED8C +:1061D000070A80ED0B0A0020084981F830000848C2 +:1061E00048639FED020A486B804710BD0000000025 +:1061F000481300200AD7A33B3D510008801300201C +:10620000895100082DE9F04F9DB00546002400207B +:10621000199064216846FAF74BF96878297840EAC2 +:106220000129E878A97840EA0126012E01DA212E19 +:106230007EDCB9F1300F7DDC06EB0900312879DC1A +:10624000F01DC11700EB5171C1F3C7011C91012270 +:106250002046611CCCB20DF800202046611CCCB257 +:106260000DF800202046621CD4B21C990DF80010D5 +:106270000027BB462DE000200DF8040082461AE0FE +:1062800009EB070188B21BA9FAF744FC1DF80400CA +:106290009DF86C1001FA0AF10843C0B20DF8040031 +:1062A000781C87B2B74202DB0120199006E00AF1A0 +:1062B000010000F0FF0ABAF1080FE1DB00BF601C2B +:1062C000C4B21998012800D106E00BF1010000F0DA +:1062D000FF0B1C988345CEDB00BF21466846FDF7C7 +:1062E000B9FB804608F0FF022046611CCCB20DF8D5 +:1062F00000204FEA28222046611CCCB20DF8002075 +:106300001248008AA04201DB204601E00F48008AC3 +:106310000E4948824A8AC8686946FAF752F80B481B +:10632000428AC1680A4800F0B9FA1DB0BDE8F08F92 +:1063300003E0FFE702201A9001E003201A900120F9 +:106340001A99FFF715FD00BFEFE700003413002096 +:10635000E00300202DE9F04F9DB005460024002009 +:1063600019906878297840EA0129E878A97840EA04 +:106370000126012E01DA312E7EDCB9F1300F7FDCEF +:1063800006EB090031287BDCF01DC11700EB5171D1 +:10639000C1F3C7011C9101222046611CCCB20DF84B +:1063A000002002222046611CCCB20DF800202046BD +:1063B000621CD4B21C990DF800100027BB462DE0DA +:1063C00000200DF8040082461AE009EB070188B2AC +:1063D0001BA9FAF7BBFB1DF804009DF86C1001FA2D +:1063E0000AF10843C0B20DF80400781C87B2B74226 +:1063F00002DB0120199006E00AF1010000F0FF0A1B +:10640000BAF1080FE1DB00BF601CC4B21998012883 +:1064100000D106E00BF1010000F0FF0B1C98834552 +:10642000CEDB00BF21466846FDF714FB804608F02E +:10643000FF022046611CCCB20DF800204FEA282252 +:106440002046611CCCB20DF800201348008AA042FF +:1064500001DB204601E01048008A0F4948824A8A41 +:10646000C8686946F9F7ADFF0B48428AC1680B4816 +:1064700000F014FA1DB001E005E001E0BDE8F08F86 +:1064800002201A9001E003201A9002201A99FFF7C7 +:106490006FFC00BFEEE7000034130020E003002093 +:1064A0002DE9F04F99B00646002416B919B0BDE8A1 +:1064B000F08F7078317840EA0127F078B17840EABF +:1064C0000125012D65DB312D63DC302F5EDC781971 +:1064D00000285BDB7819312858DC01222046611C3A +:1064E000CCB20DF8002003222046611CCCB20DF87E +:1064F00000206806020E2046611CCCB20DF8002078 +:106500004FF0000817E007EB080188B2FAF7EEFA3F +:1065100081464FEA29222046611CCCB20DF80020AA +:1065200009F0FF022046611CCCB20DF8002008F1F2 +:1065300001001FFA80F8A845E5DB21466846FDF713 +:1065400089FA82460AF0FF022046611CCCB20DF89F +:1065500000204FEA2A222046611CCCB20DF8002010 +:106560001048008AA04201DB204601E00D48008A65 +:106570000C4948824A8AC8686946F9F722FF0948E7 +:10658000428AC168084800F089F98FE74FF0020B92 +:1065900001E04FF0030B59460320FFF7E9FB00BF72 +:1065A00084E7000034130020E00300202DE9F04FC1 +:1065B00099B00546002415B919B0BDE8F08F687888 +:1065C000297840EA0127E878A97840EA0126012ED7 +:1065D00062DB312E60DC302F5BDCB819312858DCEF +:1065E00001222046611CCCB20DF800200422204676 +:1065F000611CCCB20DF800207006020E2046611C12 +:10660000CCB20DF800204FF0000817E007EB0801AE +:1066100088B2FAF775FA81464FEA29222046611CB2 +:10662000CCB20DF8002009F0FF022046611CCCB26C +:106630000DF8002008F101001FFA80F8B045E5DBF5 +:1066400021466846FDF706FA82460AF0FF02204618 +:10665000611CCCB20DF800204FEA2A222046611CB2 +:10666000CCB20DF800201048008AA04201DB204681 +:1066700001E00D48008A0C4948824A8AC868694688 +:10668000F9F79FFE0848428AC168084800F006F9F9 +:1066900092E74FF0020B01E04FF0030B5946042044 +:1066A000FFF766FB00BF87E734130020E0030020FC +:1066B00010B5012211031448FBF75EF80122D10244 +:1066C0001148FBF759F80122D1031048FBF754F8A1 +:1066D00000224FF480410D48FBF74EF80122802143 +:1066E0000A48FBF749F8012204210948FBF744F85E +:1066F000012211460648FBF73FF800221021054809 +:10670000FBF73AF810BD0000000C024000100240F8 +:1067100000040240000802404C480068401C4B49FD +:10672000086008460068042805DD01204849086023 +:1067300000204649086047480068401C45490860F9 +:1067400008460068092805DD01204349086000204B +:106750004049086041480068401C404908600846BC +:106760000068182805DD01203D49086000203B49EC +:1067700008603C480068401C3A49086008460068C8 +:10678000312805DD012038490860002035490860BE +:1067900036480068401C3549086008460068632890 +:1067A00005DD012032490860002030490860314889 +:1067B0000068401C2F49086008460068B0F5967FC5 +:1067C00005DB01202C49086000202A4908602B487D +:1067D0000068401C2949086008460068B0F5FA7F47 +:1067E00005DB01202649086000202449086025486F +:1067F0000068401C2349086008460068B0F57A7FAD +:1068000005DB01202049086000201E4908601F4860 +:106810000068632805DD01201D49086000201B4930 +:1068200008601A480068401C184908601948006848 +:10683000312805DD0120184908600020154908604D +:1068400014480068401C134908607047F400002099 +:10685000F0000020FC000020F800002004010020CF +:10686000000100200C01002008010020140100207C +:10687000100100201C01002018010020240100202C +:10688000200100202C0100202801002034010020DC +:10689000300100203C0100203801002070B5044682 +:1068A0000D461646324629462046FCF793FD70BD3C +:1068B00070B50446FEF762FD8020FDF71FF9204603 +:1068C000FDF71CF9FDF7ECF80546FFF7F1FE284649 +:1068D00070BD70B505460C46FEF750FD0020FDF773 +:1068E0000DF92846FDF70AF92046FDF707F9FFF7ED +:1068F000DFFE70BD2DE9F04F9FB00446002500205B +:106900001B906078217840EA012AE078A17840EA7B +:10691000012620791D90012E7EDB212E7CDC1D9826 +:10692000C000B0427FDBBAF1300F79DC0AEB060021 +:10693000312875DC0027A9462FE009F10500205C0D +:106940001C904FF0000B1CE0012000FA0BF01C998A +:10695000084018B14FF47F401E9001E000201E90C7 +:106960000AEB070188B21E99FDF712FD781C87B269 +:10697000B74202DB01201B9006E00BF1010000F0A2 +:10698000FF0BBBF1080FDFDB00BF1B98012800D114 +:1069900006E009F1010000F0FF091D988145CCDBFC +:1069A00000BF01222846691CCDB201A90A540F225A +:1069B0002846691CCDB201A90A5401A828442168BF +:1069C0000160281DC5B2294601A8FDF743F880469D +:1069D0002846691CCDB201A901F800804FEA28229F +:1069E0002846691CCDB201A90A541348008AA8425E +:1069F00001DB284601E01048008A0F4948824A8A94 +:106A0000C86801A9F9F7DDFC0B48428AC1680B4848 +:106A1000FFF744FF1FB001E005E001E0BDE8F08FA3 +:106A200002201A9001E003201A900F201A99FFF714 +:106A30009FF900BFEEE7000034130020E0030020C0 +:106A40002DE9F04F9BB00446002614B91BB0BDE8F9 +:106A5000F08F6078217840EA0128E078A17840EA58 +:106A6000012794F804B0012F5FDB312F5DDCBBEB15 +:106A7000470F5AD1B8F1300F54DC08EB070031282A +:106A800050DC002512E0062000EB4500205C0521CB +:106A900001EB4501615C40EA01201A9008EB050119 +:106AA00088B21A99FDF76CFC681C85B2BD42EADB1E +:106AB00001223046711CCEB201A90A541022304680 +:106AC000711CCEB201A90A5401A8304421680160AA +:106AD000301DC6B2314601A8FCF7BCFF81463046E6 +:106AE000711CCEB201A901F800904FEA292230466C +:106AF000711CCEB201A90A541048008AB04201DBD1 +:106B0000304601E00D48008A0C4948824A8AC8682C +:106B100001A9F9F756FC0948428AC1680848FFF7FD +:106B2000BDFE93E74FF0020A01E04FF0030A0AF0BE +:106B3000FF011020FFF71CF900BF87E73413002086 +:106B4000E00300202DE9F0479AB005468A4600246C +:106B50006878297840EA0129E878A97840EA01278D +:106B600017B1B7F57F4F43D1B9F1300F3DDC39464E +:106B70004846FDF70DFC01222046611CCCB201A95C +:106B80000A5405222046611CCCB201A90A5401A86E +:106B9000204429680160201DC4B2214601A8FCF7E9 +:106BA00059FF06462046611CCCB201A90E54321290 +:106BB0002046611CCCB201A90A541148008AA042A7 +:106BC00001DB204601E00E48008A0D4948824A8ACE +:106BD000C86801A9F9F7F5FB0948428AC168094864 +:106BE000FFF75CFE1AB0BDE8F0874FF0020801E045 +:106BF0004FF0030841460520FFF7BAF800BFF1E760 +:106C000034130020E00300202DE9F0479AB0054638 +:106C10008A46002415B91AB0BDE8F087687829784B +:106C200040EA0127E878A97840EA0128302F3BDCC8 +:106C300041463846FDF7A4FB01222046611CCCB238 +:106C400001A90A5406222046611CCCB201A90A54AB +:106C500001A8204429680160201DC4B2214601A872 +:106C6000FCF7F8FE06462046611CCCB201A90E5482 +:106C700032122046611CCCB201A90A540E48008A87 +:106C8000A04201DB204601E00B48008A0A49488205 +:106C90004A8AC86801A9F9F794FB0748428AC16883 +:106CA0000648FFF7FBFDB6E74FF00209494606200C +:106CB000FFF75EF800BFAEE734130020E0030020CA +:106CC00010B591EA030F48BF83F0004300F1C4837D +:106CD000841A71EB030C05D2121943EB0C03001B51 +:106CE00061EB0C01DFF824E14FEA1154A4EB135CD3 +:106CF0001EEA430F18BF9EEA445F73D023EA0E03D7 +:106D0000DCF1200E21EA045143F4801332D322FA3D +:106D10000CFE10EB0E0023FA0CFE41EB0E01CCF141 +:106D2000200E03FA0EFE10EB0E0051F10001B1F53A +:106D3000801FCCF1200E32D201EB045112FA0EF278 +:106D4000BDE8104058BF7047401C38BF5FEA4202A0 +:106D500018BF7047002814BF20F0010041F1000166 +:106D60004FEA410313F5001F38BF7047A1F1C0413E +:106D700000F064BB012A43EB0302ACF1200CDCF110 +:106D80001F0E32BF4FF0000E23FA0CF310EB03007E +:106D900041EB0451B4EB115FD0D0A1EB045101F5EC +:106DA000801149085FEA300001EB04510ED350F125 +:106DB000000038BF12FA0EFE08D1BDE81040C9E746 +:106DC000401C38BF5FEA4202CAD1C3E7BDE81040A9 +:106DD0004FEA410313F5001F38BF7047A1F1C041CE +:106DE00000F02CBB9EEA445F08D011EA5E0FBDE8BC +:106DF000104004BF01F0004100207047BDE8104082 +:106E000070B500F0CDFA00BF64FBBE3E0000E0FFAD +:106E10002DE9C04130B4DFF8A0C23CEA111418BF1C +:106E20003CEA131400F0EC8081EA03051CEA11141B +:106E300044EAD57418BF1CEA131500F0C780A4EB10 +:106E400005044FF0004545EAC12145EAC32341EA64 +:106E5000505143EA525304F17F74994204F50034CF +:106E60004FEAC0204FEAC22208BF904200F09C8047 +:106E70004FEA13650FF24016765D4FEA134506FBA5 +:106E800005F7C7F1807706FB07F74FEAD737A7FB6F +:106E900003687642C8F58038A7FB06CE38BFA8F154 +:106EA000010807FB08E64FF0000EA6FB028CE6FB8C +:106EB00003CEDCF1000CCEF1004E38BFAEF1010E76 +:106EC000A6FB0C584FF000074FF00005E6FB0E87BD +:106ED000A1FB08C6A0FB07CE16EB0E0645F1000588 +:106EE000E1FB076515F1E04E7EBFA4F580345FEA53 +:106EF00046066D4116F1800745F100054FEA172758 +:106F00004FEA066647EA0567A6F1DE46B6F1805FFE +:106F10004FEA15251FD9384624F0010C05EBC47142 +:106F2000BCF1FE6F01EB0C1102D8F0BCBDE8008192 +:106F300024425CBF01F5801E9EEAC47F02D4F0BCEF +:106F4000BDE80081244238D4F0BCA1F1C041BDE8C5 +:106F5000004100F073BA4FEAD22242EA43524FEAAC +:106F6000D323A7FB02864FEAD02040EA415007FB1B +:106F700003661EEA0E0F4FEAD12105FB026658BFD9 +:106F8000A6EB0056B6EB00564FEA520E4EEAC37E11 +:106F900018EB0E0E56EB530EBDD518EB02085E41F2 +:106FA0007F1C55F10005B6E74FF480154FF0000740 +:106FB0004FF000064FF00008ADE7F0BC4FF00000C6 +:106FC00001F1C04101F00041BDE8008111EA0C1F50 +:106FD0000CEA131500D00CE013EA0C1F00F025801A +:106FE0004FF00000F0BC81EA030101F00041BDE870 +:106FF0000081F0BCBDE8004181EA030100F01EBA47 +:10700000F0BCBDE8004170B500F0CAF9097EFC3E55 +:1070100000F007B881EA03014FF0000001F00041E1 +:10702000704781EA030100F009BAF0BCBDE80041F5 +:107030004FF0000021497047FFFDFBF9F7F5F4F22E +:10704000F0EEEDEBE9E8E6E4E3E1E0DEDDDBDAD803 +:10705000D7D5D4D3D1D0CFCDCCCBCAC8C7C6C5C461 +:10706000C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B378 +:10707000B2B1B0AFAEADACABAAA9A8A8A7A6A5A463 +:10708000A3A3A2A1A09F9F9E9D9C9C9B9A99999827 +:107090009797969595949393929191908F8F8E8ECA +:1070A0008D8C8C8B8B8A8989888887878685858457 +:1070B00084838382828181800000FF070000F87F43 +:1070C0004FEA41034FEA5353A3F58063D3F11E0304 +:1070D000C8BFD3F1210C0CDD4FF0004242EAC122BF +:1070E00042EA505232FA03FC8CEAE17CACEBE170EC +:1070F0007047102BC4BF0020704703F5787CBCF1AB +:10710000FF3F04D06FF0004282EA2100704770B563 +:1071100000F046F94992248000207047F2E7000011 +:107120004FEA1153A3F58063D3F11E03A8BFD3F137 +:10713000200C08DB4FF0004242EAC12252EA5052D2 +:1071400032FA03F0704709420BD4102BC4BF002061 +:10715000704703F5787CBCF1FF3F05D04FF0FF305E +:1071600070474FF00000704770B500F019F900BF8C +:107170004992248000207047F0E710F0004248BF99 +:107180004042B0FA80F310FA03F10AD0C3F11D03B4 +:1071900003F580634FEA415002EB035202EBD12129 +:1071A00070474FF0000070477FEAE17202D1101A79 +:1071B00062EB0101B1FA81F30B3B24D3994012D168 +:1071C000B0FA80F310FA03F108BF7047C3F11D0352 +:1071D00003F5406303EBC2234FEAD1224FEA41504B +:1071E00002EB03517047C3F1200C20FA0CFC9840CD +:1071F000C3F1320303F5406303EBC22341EA0C0100 +:1072000001EB0351704710B5C3F1320CC3F1000418 +:10721000C4F1200E0CF5406C0CEBC22201FA0EFCFE +:1072200021FA04F100FA0EF3E040BDE8104040EA14 +:107230000C0001EB025138BF7047401C41F10001C6 +:107240005B0008BF20F0010070470000DFF848C174 +:1072500070B51CEA111E1EBF1CEA13159EEA0C0F26 +:1072600095EA0C0F00F06F8081EA030423EA4C13C7 +:107270004EEAD47E21EA4C1141F4801143F480138C +:10728000AE44A1FB024CA0FB0365AEF17F7E361934 +:1072900055EB0C05A1FB034C4CF10003A0FB021CB9 +:1072A00016EB0C06654153F10003094218BF46F086 +:1072B000010613F4007F0BD14FEA03314FEA05308A +:1072C000340341EA155140EA16506FF003020AE018 +:1072D0004FEAC3214FEAC520F40241EA555140EA82 +:1072E00056506FF0020202EB2E4201EB025585EA86 +:1072F000CE710AD05FEA440C18BF24F0004450F16C +:10730000000041F1000120EAD47040F2FE7C6245A9 +:1073100000D270BDA84214BF4FF080444FF04044EB +:10732000002E08BF0024BEF1806FA8BFA1F1C041AC +:10733000BDE8704080F282804FF0000001F1C04152 +:1073400001F0004170479EEA0C0F0CEA131518BFBC +:1073500095EA0C0F06D04FF0000081EA030E0EF004 +:10736000004170BD00F01CF88900013E00F007B834 +:1073700000F009B84FEA430C5FEA5C5C08D081EA90 +:10738000030100F05BB84FEA410C5FEA5C5CF6D1A8 +:107390004FF00000014970470000FF070000F87F30 +:1073A0000EF1020E2EF0030E5EF8046B364205D489 +:1073B000012A43EB030515F5001F12D8012841EB04 +:1073C000010C1CF5001F0CD80ED14FEAD17C15F52D +:1073D000001F0CEB4C0C0CF1020C08BF4CEBD37CE7 +:1073E00004E04FF0080C01E04FEAD37C0CEB4C05B5 +:1073F00026FA05F606F00706B6F1040C06D20EEBE7 +:10740000860CBDE870404CF0010C6047DFE80CF0E2 +:10741000090B02024FF000414FF00000A1F50021DE +:1074200070BD19461046012851EB010418BFD4F570 +:10743000001484BF002001F0004170BD0808A0F5D1 +:1074400000114FEA3101704710B591EA030F48BFB0 +:1074500083F000433FF53CAC841A71EB030C07D278 +:1074600012198CF0004C43EB0C03001B61EB0C0178 +:10747000DFF8A4E14FEA1154A4EB135C1EEA430FBA +:1074800018BF9EEA445F00F0B08023EA6E035242C8 +:1074900021EA0451C3EB6E0338BF5B1EDCF1200E02 +:1074A00025D322FA0CFE10EB0E0043FA0CFE41EB42 +:1074B0000E01CCF1200E03FA0EFE10EB0E0051F17E +:1074C0000001CCF1200E29D412FA0EF201EB045186 +:1074D000BDE8104058BF7047401C1CBFB2F1004FC0 +:1074E000704700280CBF491C20F00100704712EBC8 +:1074F000020E43EB030218BF4FF0010E4EEA4202A8 +:10750000ACF1200CDCF11E0E54D943FA0CFE10EB4A +:107510000E0051F1FF31CCF11E0ED5D50EF1010E4A +:1075200012FA0EFE404141EB010101EB445C5FEABF +:107530005C5C10D910EBDE7001EB045138BFBEF17A +:10754000004FBDE8104018BF704700280CBF491C11 +:1075500020F00100704730D24FEAD42C11F5001111 +:1075600024F400641BD0B1FA81F20B3AA41AA41ED1 +:10757000D2F12003914030FA03F31943904001EB1C +:10758000CC71002C01EB0451BDE81040A8BF70473E +:1075900001F1C0414FF0000001F000417047B0FA26 +:1075A00080F310FA03F100D110BDE41A173C48052E +:1075B000C90AE4E701EB045110BD491001EB045185 +:1075C000BDE810404FEA300002E04FF00001704784 +:1075D0004A0008BF0042F8D0B2F5001F28BF70472C +:1075E00001F000414FF0000070479EEA445F07D071 +:1075F00011EA5E0FBDE8104004BF00210020704773 +:10760000BDE8104070B5FFF7CBFE00BF40DFF63E8F +:1076100083F00041104670470000E0FF4FF04070DB +:10762000E1EE100A70470006101600061016000062 +:107630000000000000000102030406070809000022 +:10764000000001020304000068760008000000202A +:107650006C010000C40100087C7600086C01002069 +:10766000AC180000000200085142105201034E24E1 +:0C767000F402300102DC644298000000CB :040000050800018965 :00000001FF diff --git a/MDK-ARM/VOQC/VOQC.htm b/MDK-ARM/VOQC/VOQC.htm index adebd33..246ddf7 100644 --- a/MDK-ARM/VOQC/VOQC.htm +++ b/MDK-ARM/VOQC/VOQC.htm @@ -3,7 +3,7 @@ Static Call Graph - [VOQC\VOQC.axf]

Static Call Graph for image VOQC\VOQC.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Tue Aug 20 14:28:03 2024 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Tue Aug 20 15:07:19 2024

Maximum Stack Usage = 452 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -487,8 +487,8 @@ Global Symbols

__aeabi_uldivmod (Thumb, 0 bytes, Stack size 48 bytes, lludivv7m.o(.text))

[Stack]

  • Max Depth = 48
  • Call Chain = __aeabi_uldivmod
-
[Called By]
  • >>   HAL_RCC_GetSysClockFreq -
  • >>   UART_SetConfig +
    [Called By]
    • >>   UART_SetConfig +
    • >>   HAL_RCC_GetSysClockFreq
    • >>   _ll_sdiv
    @@ -590,10 +590,10 @@ Global Symbols

[Calls]
  • >>   HAL_GPIO_WritePin
  • >>   delay_us -
  • >>   HAL_GPIO_ReadPin
  • >>   ads1256_write_byte
  • >>   ads1256_read_byte
  • >>   ADS1256WREG +
  • >>   HAL_GPIO_ReadPin
  • >>   __aeabi_dmul
  • >>   __aeabi_i2d
@@ -604,8 +604,8 @@ Global Symbols

[Stack]
  • Max Depth = 44
  • Call Chain = ADS1256WREG ⇒ ads1256_write_byte ⇒ delay_us

[Calls]
  • >>   HAL_GPIO_WritePin -
  • >>   HAL_GPIO_ReadPin
  • >>   ads1256_write_byte +
  • >>   HAL_GPIO_ReadPin

[Called By]
  • >>   ads1256_init
  • >>   ADS1256ReadData @@ -799,8 +799,8 @@ Global Symbols

[Calls]
  • >>   DMA_SetConfig
-
[Called By]
  • >>   HAL_ADC_Start_DMA -
  • >>   HAL_UART_Transmit_DMA +
    [Called By]
    • >>   HAL_UART_Transmit_DMA +
    • >>   HAL_ADC_Start_DMA

    HAL_Delay (Thumb, 36 bytes, Stack size 16 bytes, stm32f4xx_hal.o(i.HAL_Delay)) @@ -891,9 +891,9 @@ Global Symbols

  • >>   HAL_RCC_OscConfig
  • >>   HAL_RCC_ClockConfig
  • >>   HAL_Delay -
  • >>   HAL_DMA_Abort
  • >>   HAL_UART_Transmit
  • >>   UART_WaitOnFlagUntilTimeout +
  • >>   HAL_DMA_Abort

HAL_I2C_Init (Thumb, 446 bytes, Stack size 16 bytes, stm32f4xx_hal_i2c.o(i.HAL_I2C_Init)) @@ -1154,8 +1154,8 @@ Global Symbols

HAL_TIM_PeriodElapsedCallback (Thumb, 54 bytes, Stack size 8 bytes, timer.o(i.HAL_TIM_PeriodElapsedCallback))

[Stack]

  • Max Depth = 428
  • Call Chain = HAL_TIM_PeriodElapsedCallback ⇒ modbus_process_rtu ⇒ modbus_analysis_rtu ⇒ writemulticoil_rtu ⇒ modbus_errfunction_rtu ⇒ uart_send ⇒ HAL_UART_Transmit_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig
-
[Calls]
  • >>   HAL_TIM_Base_Stop_IT -
  • >>   modbus_process_rtu +
    [Calls]
    • >>   modbus_process_rtu +
    • >>   HAL_TIM_Base_Stop_IT
    • >>   tim6_cnt

    [Called By]
    • >>   HAL_TIM_IRQHandler @@ -1166,27 +1166,27 @@ Global Symbols

    HAL_UARTEx_RxEventCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback)) -

    [Called By]

    • >>   HAL_UART_IRQHandler -
    • >>   UART_Receive_IT +

      [Called By]
      • >>   UART_Receive_IT +
      • >>   HAL_UART_IRQHandler

      HAL_UART_ErrorCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.HAL_UART_ErrorCallback)) -

      [Called By]

      • >>   HAL_UART_IRQHandler -
      • >>   UART_DMAError +

        [Called By]
        • >>   UART_DMAError
        • >>   UART_DMAAbortOnError +
        • >>   HAL_UART_IRQHandler

        HAL_UART_IRQHandler (Thumb, 740 bytes, Stack size 40 bytes, stm32f4xx_hal_uart.o(i.HAL_UART_IRQHandler))

        [Stack]

        • Max Depth = 152
        • Call Chain = HAL_UART_IRQHandler ⇒ UART_Receive_IT ⇒ HAL_UART_RxCpltCallback ⇒ modbus_rx_cb ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
        -
        [Calls]
        • >>   HAL_DMA_Abort -
        • >>   HAL_DMA_Abort_IT -
        • >>   HAL_UART_ErrorCallback +
          [Calls]
          • >>   HAL_UART_ErrorCallback
          • >>   HAL_UARTEx_RxEventCallback
          • >>   UART_Transmit_IT
          • >>   UART_Receive_IT
          • >>   UART_EndTransmit_IT
          • >>   UART_EndRxTransfer +
          • >>   HAL_DMA_Abort +
          • >>   HAL_DMA_Abort_IT

          [Called By]
          • >>   USART6_IRQHandler
          • >>   USART3_IRQHandler @@ -1241,8 +1241,8 @@ Global Symbols

            HAL_UART_Transmit (Thumb, 190 bytes, Stack size 40 bytes, stm32f4xx_hal_uart.o(i.HAL_UART_Transmit))

            [Stack]

            • Max Depth = 72
            • Call Chain = HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
            -
            [Calls]
            • >>   HAL_GetTick -
            • >>   UART_WaitOnFlagUntilTimeout +
              [Calls]
              • >>   UART_WaitOnFlagUntilTimeout +
              • >>   HAL_GetTick

              [Called By]
              • >>   modbus_rx_cb
              @@ -1628,9 +1628,9 @@ Global Symbols

              ads1220_setchannl (Thumb, 34 bytes, Stack size 8 bytes, ads1220.o(i.ads1220_setchannl))

              [Stack]

              • Max Depth = 60
              • Call Chain = ads1220_setchannl ⇒ ads1220_writeregister ⇒ ads1220_write_byte ⇒ delay_us
              -
              [Calls]
              • >>   HAL_GPIO_ReadPin -
              • >>   ads1220_writeregister +
                [Calls]
                • >>   ads1220_writeregister
                • >>   ads1220_write_byte +
                • >>   HAL_GPIO_ReadPin

                [Called By]
                • >>   ads1220_get_data
                @@ -1810,10 +1810,10 @@ Global Symbols

              [Calls]
              • >>   HAL_GPIO_WritePin
              • >>   encoder_init -
              • >>   HAL_GPIO_ReadPin
              • >>   _74hc165_read_byte
              • >>   hc595_write_data
              • >>   disp_out +
              • >>   HAL_GPIO_ReadPin
              • >>   led_ctrl

              [Called By]
              • >>   main @@ -2054,9 +2054,9 @@ Global Symbols

                [Stack]
                • Max Depth = 80
                • Call Chain = modbus_rx_cb ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout

                [Calls]
                • >>   HAL_TIM_Base_Start_IT -
                • >>   HAL_TIM_Base_Stop_IT
                • >>   HAL_UART_Transmit
                • >>   HAL_UART_Receive_IT +
                • >>   HAL_TIM_Base_Stop_IT

                [Called By]
                • >>   HAL_UART_RxCpltCallback
                @@ -2416,9 +2416,9 @@ Local Symbols
                [Address Reference Count : 1]
                • stm32f4xx_hal_uart.o(i.HAL_UART_Transmit_DMA)

                UART_EndRxTransfer (Thumb, 108 bytes, Stack size 0 bytes, stm32f4xx_hal_uart.o(i.UART_EndRxTransfer)) -

                [Called By]

                • >>   HAL_UART_IRQHandler -
                • >>   UART_WaitOnFlagUntilTimeout +

                  [Called By]
                  • >>   UART_WaitOnFlagUntilTimeout
                  • >>   UART_DMAError +
                  • >>   HAL_UART_IRQHandler

                  UART_EndTransmit_IT (Thumb, 32 bytes, Stack size 8 bytes, stm32f4xx_hal_uart.o(i.UART_EndTransmit_IT)) @@ -2459,8 +2459,8 @@ Local Symbols

                  UART_WaitOnFlagUntilTimeout (Thumb, 140 bytes, Stack size 32 bytes, stm32f4xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout))

                  [Stack]

                  • Max Depth = 32
                  • Call Chain = UART_WaitOnFlagUntilTimeout
                  -
                  [Calls]
                  • >>   HAL_GetTick -
                  • >>   UART_EndRxTransfer +
                    [Calls]
                    • >>   UART_EndRxTransfer +
                    • >>   HAL_GetTick

                    [Called By]
                    • >>   HAL_UART_Transmit
                    diff --git a/MDK-ARM/VOQC/VOQC.map b/MDK-ARM/VOQC/VOQC.map index 11f9318..f92bb8d 100644 --- a/MDK-ARM/VOQC/VOQC.map +++ b/MDK-ARM/VOQC/VOQC.map @@ -3104,83 +3104,83 @@ Image Symbol Table i.ads1256_read_byte 0x08004e24 Section 0 ads1256.o(i.ads1256_read_byte) i.ads1256_write_byte 0x08004e7c Section 0 ads1256.o(i.ads1256_write_byte) i.analog_ctrl 0x08004ef0 Section 0 provalctrl.o(i.analog_ctrl) - i.analog_gather 0x080050e8 Section 0 adcs.o(i.analog_gather) - i.ao_blf1_set 0x08005138 Section 0 dac7311.o(i.ao_blf1_set) - i.ao_blf2_set 0x08005184 Section 0 dac7311.o(i.ao_blf2_set) - i.ao_dwq_set 0x080051d0 Section 0 dac7311.o(i.ao_dwq_set) - i.ao_write 0x08005224 Section 0 dac7311.o(i.ao_write) - i.clrcs 0x08005378 Section 0 ms5803.o(i.clrcs) - i.dac7311_init 0x08005410 Section 0 dac7311.o(i.dac7311_init) - i.delay_ms 0x08005450 Section 0 main.o(i.delay_ms) - i.delay_tick 0x0800545a Section 0 main.o(i.delay_tick) - i.delay_us 0x08005468 Section 0 main.o(i.delay_us) - i.digital_ctrl 0x080054c8 Section 0 gpios.o(i.digital_ctrl) - i.disp_out 0x080055e8 Section 0 hc595.o(i.disp_out) - i.ds18b20_check 0x08005614 Section 0 ds18b20.o(i.ds18b20_check) - i.ds18b20_get_temp 0x08005674 Section 0 ds18b20.o(i.ds18b20_get_temp) - i.ds18b20_init 0x080056e0 Section 0 ds18b20.o(i.ds18b20_init) - i.ds18b20_read_bit 0x080056fc Section 0 ds18b20.o(i.ds18b20_read_bit) - i.ds18b20_read_byte 0x08005760 Section 0 ds18b20.o(i.ds18b20_read_byte) - i.ds18b20_rst 0x08005784 Section 0 ds18b20.o(i.ds18b20_rst) - i.ds18b20_start 0x080057c4 Section 0 ds18b20.o(i.ds18b20_start) - i.ds18b20_write_byte 0x080057dc Section 0 ds18b20.o(i.ds18b20_write_byte) - i.encoder_init 0x08005854 Section 0 encoder.o(i.encoder_init) - i.encoder_run 0x080058ac Section 0 encoder.o(i.encoder_run) - i.hc595_write_data 0x0800593c Section 0 hc595.o(i.hc595_write_data) - i.led_ctrl 0x080059a8 Section 0 gpios.o(i.led_ctrl) - i.main 0x080059cc Section 0 main.o(i.main) - i.mf5803_loop 0x08005a50 Section 0 mf5803.o(i.mf5803_loop) - i.mf5803_setup 0x08005bf8 Section 0 mf5803.o(i.mf5803_setup) - i.modbus_analysis_rtu 0x08005cb8 Section 0 modbus_rtu.o(i.modbus_analysis_rtu) - i.modbus_errfunction_rtu 0x08005d6c Section 0 modbus_rtu.o(i.modbus_errfunction_rtu) - i.modbus_process_rtu 0x08005dec Section 0 modbus_rtu.o(i.modbus_process_rtu) - i.modbus_rtu_init 0x08005e30 Section 0 modbus_rtu.o(i.modbus_rtu_init) - i.modbus_rx_cb 0x08005e84 Section 0 modbus_rtu.o(i.modbus_rx_cb) - i.prov_calibrate_step 0x08005f04 Section 0 provalctrl.o(i.prov_calibrate_step) - i.prov_ctrl 0x08006038 Section 0 provalctrl.o(i.prov_ctrl) - i.prov_init 0x080060f8 Section 0 provalctrl.o(i.prov_init) - i.readcoilstate_rtu 0x08006200 Section 0 modbus_rtu.o(i.readcoilstate_rtu) - i.readdisinputstate_rtu 0x08006350 Section 0 modbus_rtu.o(i.readdisinputstate_rtu) - i.readholdreg_rtu 0x0800649c Section 0 modbus_rtu.o(i.readholdreg_rtu) - i.readinputreg_rtu 0x080065a8 Section 0 modbus_rtu.o(i.readinputreg_rtu) - i.setcs 0x080066ac Section 0 ms5803.o(i.setcs) - i.tim6_cnt 0x08006714 Section 0 timer.o(i.tim6_cnt) - i.uart_send 0x08006898 Section 0 uarts.o(i.uart_send) - i.wf5803_ReadReg 0x080068ac Section 0 mf5803.o(i.wf5803_ReadReg) - i.wf5803_WriteReg 0x080068ce Section 0 mf5803.o(i.wf5803_WriteReg) - i.writemulticoil_rtu 0x080068f0 Section 0 modbus_rtu.o(i.writemulticoil_rtu) - i.writemultireg_rtu 0x08006a3c Section 0 modbus_rtu.o(i.writemultireg_rtu) - i.writesinglecoil_rtu 0x08006b40 Section 0 modbus_rtu.o(i.writesinglecoil_rtu) - i.writesinglereg_rtu 0x08006c04 Section 0 modbus_rtu.o(i.writesinglereg_rtu) - x$fpl$dadd 0x08006cbc Section 336 daddsub_clz.o(x$fpl$dadd) - $v0 0x08006cbc Number 0 daddsub_clz.o(x$fpl$dadd) - _dadd1 0x08006ccd Thumb Code 0 daddsub_clz.o(x$fpl$dadd) - x$fpl$ddiv 0x08006e0c Section 688 ddiv.o(x$fpl$ddiv) - $v0 0x08006e0c Number 0 ddiv.o(x$fpl$ddiv) - ddiv_entry 0x08006e13 Thumb Code 0 ddiv.o(x$fpl$ddiv) - x$fpl$dfix 0x080070bc Section 94 dfix.o(x$fpl$dfix) - $v0 0x080070bc Number 0 dfix.o(x$fpl$dfix) - x$fpl$dfixu 0x0800711c Section 90 dfixu.o(x$fpl$dfixu) - $v0 0x0800711c Number 0 dfixu.o(x$fpl$dfixu) - x$fpl$dflt 0x08007176 Section 46 dflt_clz.o(x$fpl$dflt) - $v0 0x08007176 Number 0 dflt_clz.o(x$fpl$dflt) - x$fpl$dfltll 0x080071a4 Section 162 dfltll_clz.o(x$fpl$dfltll) - $v0 0x080071a4 Number 0 dfltll_clz.o(x$fpl$dfltll) - x$fpl$dmul 0x08007248 Section 340 dmul.o(x$fpl$dmul) - $v0 0x08007248 Number 0 dmul.o(x$fpl$dmul) - x$fpl$dnaninf 0x0800739c Section 156 dnaninf.o(x$fpl$dnaninf) - $v0 0x0800739c Number 0 dnaninf.o(x$fpl$dnaninf) - x$fpl$dretinf 0x08007438 Section 12 dretinf.o(x$fpl$dretinf) - $v0 0x08007438 Number 0 dretinf.o(x$fpl$dretinf) - x$fpl$dsub 0x08007444 Section 468 daddsub_clz.o(x$fpl$dsub) - $v0 0x08007444 Number 0 daddsub_clz.o(x$fpl$dsub) - _dsub1 0x08007455 Thumb Code 0 daddsub_clz.o(x$fpl$dsub) - x$fpl$fpinit 0x08007618 Section 10 fpinit.o(x$fpl$fpinit) - $v0 0x08007618 Number 0 fpinit.o(x$fpl$fpinit) - .constdata 0x08007622 Section 8 stm32f4xx_hal_dma.o(.constdata) - x$fpl$usenofp 0x08007622 Section 0 usenofp.o(x$fpl$usenofp) - flagBitshiftOffset 0x08007622 Data 8 stm32f4xx_hal_dma.o(.constdata) - .constdata 0x0800762a Section 24 system_stm32f4xx.o(.constdata) + i.analog_gather 0x080050ec Section 0 adcs.o(i.analog_gather) + i.ao_blf1_set 0x0800513c Section 0 dac7311.o(i.ao_blf1_set) + i.ao_blf2_set 0x08005188 Section 0 dac7311.o(i.ao_blf2_set) + i.ao_dwq_set 0x080051d4 Section 0 dac7311.o(i.ao_dwq_set) + i.ao_write 0x08005228 Section 0 dac7311.o(i.ao_write) + i.clrcs 0x0800537c Section 0 ms5803.o(i.clrcs) + i.dac7311_init 0x08005414 Section 0 dac7311.o(i.dac7311_init) + i.delay_ms 0x08005454 Section 0 main.o(i.delay_ms) + i.delay_tick 0x0800545e Section 0 main.o(i.delay_tick) + i.delay_us 0x0800546c Section 0 main.o(i.delay_us) + i.digital_ctrl 0x080054cc Section 0 gpios.o(i.digital_ctrl) + i.disp_out 0x080055ec Section 0 hc595.o(i.disp_out) + i.ds18b20_check 0x08005618 Section 0 ds18b20.o(i.ds18b20_check) + i.ds18b20_get_temp 0x08005678 Section 0 ds18b20.o(i.ds18b20_get_temp) + i.ds18b20_init 0x080056e4 Section 0 ds18b20.o(i.ds18b20_init) + i.ds18b20_read_bit 0x08005700 Section 0 ds18b20.o(i.ds18b20_read_bit) + i.ds18b20_read_byte 0x08005764 Section 0 ds18b20.o(i.ds18b20_read_byte) + i.ds18b20_rst 0x08005788 Section 0 ds18b20.o(i.ds18b20_rst) + i.ds18b20_start 0x080057c8 Section 0 ds18b20.o(i.ds18b20_start) + i.ds18b20_write_byte 0x080057e0 Section 0 ds18b20.o(i.ds18b20_write_byte) + i.encoder_init 0x08005858 Section 0 encoder.o(i.encoder_init) + i.encoder_run 0x080058b0 Section 0 encoder.o(i.encoder_run) + i.hc595_write_data 0x08005940 Section 0 hc595.o(i.hc595_write_data) + i.led_ctrl 0x080059ac Section 0 gpios.o(i.led_ctrl) + i.main 0x080059d0 Section 0 main.o(i.main) + i.mf5803_loop 0x08005a54 Section 0 mf5803.o(i.mf5803_loop) + i.mf5803_setup 0x08005bfc Section 0 mf5803.o(i.mf5803_setup) + i.modbus_analysis_rtu 0x08005cbc Section 0 modbus_rtu.o(i.modbus_analysis_rtu) + i.modbus_errfunction_rtu 0x08005d70 Section 0 modbus_rtu.o(i.modbus_errfunction_rtu) + i.modbus_process_rtu 0x08005df0 Section 0 modbus_rtu.o(i.modbus_process_rtu) + i.modbus_rtu_init 0x08005e34 Section 0 modbus_rtu.o(i.modbus_rtu_init) + i.modbus_rx_cb 0x08005e88 Section 0 modbus_rtu.o(i.modbus_rx_cb) + i.prov_calibrate_step 0x08005f08 Section 0 provalctrl.o(i.prov_calibrate_step) + i.prov_ctrl 0x0800603c Section 0 provalctrl.o(i.prov_ctrl) + i.prov_init 0x080060fc Section 0 provalctrl.o(i.prov_init) + i.readcoilstate_rtu 0x08006204 Section 0 modbus_rtu.o(i.readcoilstate_rtu) + i.readdisinputstate_rtu 0x08006354 Section 0 modbus_rtu.o(i.readdisinputstate_rtu) + i.readholdreg_rtu 0x080064a0 Section 0 modbus_rtu.o(i.readholdreg_rtu) + i.readinputreg_rtu 0x080065ac Section 0 modbus_rtu.o(i.readinputreg_rtu) + i.setcs 0x080066b0 Section 0 ms5803.o(i.setcs) + i.tim6_cnt 0x08006718 Section 0 timer.o(i.tim6_cnt) + i.uart_send 0x0800689c Section 0 uarts.o(i.uart_send) + i.wf5803_ReadReg 0x080068b0 Section 0 mf5803.o(i.wf5803_ReadReg) + i.wf5803_WriteReg 0x080068d2 Section 0 mf5803.o(i.wf5803_WriteReg) + i.writemulticoil_rtu 0x080068f4 Section 0 modbus_rtu.o(i.writemulticoil_rtu) + i.writemultireg_rtu 0x08006a40 Section 0 modbus_rtu.o(i.writemultireg_rtu) + i.writesinglecoil_rtu 0x08006b44 Section 0 modbus_rtu.o(i.writesinglecoil_rtu) + i.writesinglereg_rtu 0x08006c08 Section 0 modbus_rtu.o(i.writesinglereg_rtu) + x$fpl$dadd 0x08006cc0 Section 336 daddsub_clz.o(x$fpl$dadd) + $v0 0x08006cc0 Number 0 daddsub_clz.o(x$fpl$dadd) + _dadd1 0x08006cd1 Thumb Code 0 daddsub_clz.o(x$fpl$dadd) + x$fpl$ddiv 0x08006e10 Section 688 ddiv.o(x$fpl$ddiv) + $v0 0x08006e10 Number 0 ddiv.o(x$fpl$ddiv) + ddiv_entry 0x08006e17 Thumb Code 0 ddiv.o(x$fpl$ddiv) + x$fpl$dfix 0x080070c0 Section 94 dfix.o(x$fpl$dfix) + $v0 0x080070c0 Number 0 dfix.o(x$fpl$dfix) + x$fpl$dfixu 0x08007120 Section 90 dfixu.o(x$fpl$dfixu) + $v0 0x08007120 Number 0 dfixu.o(x$fpl$dfixu) + x$fpl$dflt 0x0800717a Section 46 dflt_clz.o(x$fpl$dflt) + $v0 0x0800717a Number 0 dflt_clz.o(x$fpl$dflt) + x$fpl$dfltll 0x080071a8 Section 162 dfltll_clz.o(x$fpl$dfltll) + $v0 0x080071a8 Number 0 dfltll_clz.o(x$fpl$dfltll) + x$fpl$dmul 0x0800724c Section 340 dmul.o(x$fpl$dmul) + $v0 0x0800724c Number 0 dmul.o(x$fpl$dmul) + x$fpl$dnaninf 0x080073a0 Section 156 dnaninf.o(x$fpl$dnaninf) + $v0 0x080073a0 Number 0 dnaninf.o(x$fpl$dnaninf) + x$fpl$dretinf 0x0800743c Section 12 dretinf.o(x$fpl$dretinf) + $v0 0x0800743c Number 0 dretinf.o(x$fpl$dretinf) + x$fpl$dsub 0x08007448 Section 468 daddsub_clz.o(x$fpl$dsub) + $v0 0x08007448 Number 0 daddsub_clz.o(x$fpl$dsub) + _dsub1 0x08007459 Thumb Code 0 daddsub_clz.o(x$fpl$dsub) + x$fpl$fpinit 0x0800761c Section 10 fpinit.o(x$fpl$fpinit) + $v0 0x0800761c Number 0 fpinit.o(x$fpl$fpinit) + .constdata 0x08007626 Section 8 stm32f4xx_hal_dma.o(.constdata) + x$fpl$usenofp 0x08007626 Section 0 usenofp.o(x$fpl$usenofp) + flagBitshiftOffset 0x08007626 Data 8 stm32f4xx_hal_dma.o(.constdata) + .constdata 0x0800762e Section 24 system_stm32f4xx.o(.constdata) .data 0x20000000 Section 9 stm32f4xx_hal.o(.data) .data 0x2000000c Section 4 system_stm32f4xx.o(.data) .data 0x20000010 Section 24 ads1256.o(.data) @@ -3542,80 +3542,80 @@ Image Symbol Table ads1256_read_byte 0x08004e25 Thumb Code 78 ads1256.o(i.ads1256_read_byte) ads1256_write_byte 0x08004e7d Thumb Code 108 ads1256.o(i.ads1256_write_byte) analog_ctrl 0x08004ef1 Thumb Code 452 provalctrl.o(i.analog_ctrl) - analog_gather 0x080050e9 Thumb Code 64 adcs.o(i.analog_gather) - ao_blf1_set 0x08005139 Thumb Code 64 dac7311.o(i.ao_blf1_set) - ao_blf2_set 0x08005185 Thumb Code 64 dac7311.o(i.ao_blf2_set) - ao_dwq_set 0x080051d1 Thumb Code 68 dac7311.o(i.ao_dwq_set) - ao_write 0x08005225 Thumb Code 326 dac7311.o(i.ao_write) - clrcs 0x08005379 Thumb Code 130 ms5803.o(i.clrcs) - dac7311_init 0x08005411 Thumb Code 56 dac7311.o(i.dac7311_init) - delay_ms 0x08005451 Thumb Code 10 main.o(i.delay_ms) - delay_tick 0x0800545b Thumb Code 14 main.o(i.delay_tick) - delay_us 0x08005469 Thumb Code 90 main.o(i.delay_us) - digital_ctrl 0x080054c9 Thumb Code 260 gpios.o(i.digital_ctrl) - disp_out 0x080055e9 Thumb Code 38 hc595.o(i.disp_out) - ds18b20_check 0x08005615 Thumb Code 90 ds18b20.o(i.ds18b20_check) - ds18b20_get_temp 0x08005675 Thumb Code 108 ds18b20.o(i.ds18b20_get_temp) - ds18b20_init 0x080056e1 Thumb Code 22 ds18b20.o(i.ds18b20_init) - ds18b20_read_bit 0x080056fd Thumb Code 94 ds18b20.o(i.ds18b20_read_bit) - ds18b20_read_byte 0x08005761 Thumb Code 34 ds18b20.o(i.ds18b20_read_byte) - ds18b20_rst 0x08005785 Thumb Code 60 ds18b20.o(i.ds18b20_rst) - ds18b20_start 0x080057c5 Thumb Code 24 ds18b20.o(i.ds18b20_start) - ds18b20_write_byte 0x080057dd Thumb Code 114 ds18b20.o(i.ds18b20_write_byte) - encoder_init 0x08005855 Thumb Code 62 encoder.o(i.encoder_init) - encoder_run 0x080058ad Thumb Code 116 encoder.o(i.encoder_run) - hc595_write_data 0x0800593d Thumb Code 98 hc595.o(i.hc595_write_data) - led_ctrl 0x080059a9 Thumb Code 26 gpios.o(i.led_ctrl) - main 0x080059cd Thumb Code 126 main.o(i.main) - mf5803_loop 0x08005a51 Thumb Code 376 mf5803.o(i.mf5803_loop) - mf5803_setup 0x08005bf9 Thumb Code 184 mf5803.o(i.mf5803_setup) - modbus_analysis_rtu 0x08005cb9 Thumb Code 180 modbus_rtu.o(i.modbus_analysis_rtu) - modbus_errfunction_rtu 0x08005d6d Thumb Code 118 modbus_rtu.o(i.modbus_errfunction_rtu) - modbus_process_rtu 0x08005ded Thumb Code 64 modbus_rtu.o(i.modbus_process_rtu) - modbus_rtu_init 0x08005e31 Thumb Code 58 modbus_rtu.o(i.modbus_rtu_init) - modbus_rx_cb 0x08005e85 Thumb Code 98 modbus_rtu.o(i.modbus_rx_cb) - prov_calibrate_step 0x08005f05 Thumb Code 306 provalctrl.o(i.prov_calibrate_step) - prov_ctrl 0x08006039 Thumb Code 180 provalctrl.o(i.prov_ctrl) - prov_init 0x080060f9 Thumb Code 240 provalctrl.o(i.prov_init) - readcoilstate_rtu 0x08006201 Thumb Code 326 modbus_rtu.o(i.readcoilstate_rtu) - readdisinputstate_rtu 0x08006351 Thumb Code 322 modbus_rtu.o(i.readdisinputstate_rtu) - readholdreg_rtu 0x0800649d Thumb Code 258 modbus_rtu.o(i.readholdreg_rtu) - readinputreg_rtu 0x080065a9 Thumb Code 252 modbus_rtu.o(i.readinputreg_rtu) - setcs 0x080066ad Thumb Code 86 ms5803.o(i.setcs) - tim6_cnt 0x08006715 Thumb Code 308 timer.o(i.tim6_cnt) - uart_send 0x08006899 Thumb Code 20 uarts.o(i.uart_send) - wf5803_ReadReg 0x080068ad Thumb Code 34 mf5803.o(i.wf5803_ReadReg) - wf5803_WriteReg 0x080068cf Thumb Code 34 mf5803.o(i.wf5803_WriteReg) - writemulticoil_rtu 0x080068f1 Thumb Code 322 modbus_rtu.o(i.writemulticoil_rtu) - writemultireg_rtu 0x08006a3d Thumb Code 252 modbus_rtu.o(i.writemultireg_rtu) - writesinglecoil_rtu 0x08006b41 Thumb Code 188 modbus_rtu.o(i.writesinglecoil_rtu) - writesinglereg_rtu 0x08006c05 Thumb Code 176 modbus_rtu.o(i.writesinglereg_rtu) - __aeabi_dadd 0x08006cbd Thumb Code 0 daddsub_clz.o(x$fpl$dadd) - _dadd 0x08006cbd Thumb Code 332 daddsub_clz.o(x$fpl$dadd) - __aeabi_ddiv 0x08006e0d Thumb Code 0 ddiv.o(x$fpl$ddiv) - _ddiv 0x08006e0d Thumb Code 552 ddiv.o(x$fpl$ddiv) - __aeabi_d2iz 0x080070bd Thumb Code 0 dfix.o(x$fpl$dfix) - _dfix 0x080070bd Thumb Code 94 dfix.o(x$fpl$dfix) - __aeabi_d2uiz 0x0800711d Thumb Code 0 dfixu.o(x$fpl$dfixu) - _dfixu 0x0800711d Thumb Code 90 dfixu.o(x$fpl$dfixu) - __aeabi_i2d 0x08007177 Thumb Code 0 dflt_clz.o(x$fpl$dflt) - _dflt 0x08007177 Thumb Code 46 dflt_clz.o(x$fpl$dflt) - __aeabi_l2d 0x080071a5 Thumb Code 0 dfltll_clz.o(x$fpl$dfltll) - _ll_sto_d 0x080071a5 Thumb Code 162 dfltll_clz.o(x$fpl$dfltll) - __aeabi_dmul 0x08007249 Thumb Code 0 dmul.o(x$fpl$dmul) - _dmul 0x08007249 Thumb Code 332 dmul.o(x$fpl$dmul) - __fpl_dnaninf 0x0800739d Thumb Code 156 dnaninf.o(x$fpl$dnaninf) - __fpl_dretinf 0x08007439 Thumb Code 12 dretinf.o(x$fpl$dretinf) - __aeabi_dsub 0x08007445 Thumb Code 0 daddsub_clz.o(x$fpl$dsub) - _dsub 0x08007445 Thumb Code 464 daddsub_clz.o(x$fpl$dsub) - _fp_init 0x08007619 Thumb Code 10 fpinit.o(x$fpl$fpinit) - __fplib_config_fpu_vfp 0x08007621 Thumb Code 0 fpinit.o(x$fpl$fpinit) - __fplib_config_pureend_doubles 0x08007621 Thumb Code 0 fpinit.o(x$fpl$fpinit) - __I$use$fp 0x08007622 Number 0 usenofp.o(x$fpl$usenofp) - AHBPrescTable 0x0800762a Data 16 system_stm32f4xx.o(.constdata) - APBPrescTable 0x0800763a Data 8 system_stm32f4xx.o(.constdata) - Region$$Table$$Base 0x08007644 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x08007664 Number 0 anon$$obj.o(Region$$Table) + analog_gather 0x080050ed Thumb Code 64 adcs.o(i.analog_gather) + ao_blf1_set 0x0800513d Thumb Code 64 dac7311.o(i.ao_blf1_set) + ao_blf2_set 0x08005189 Thumb Code 64 dac7311.o(i.ao_blf2_set) + ao_dwq_set 0x080051d5 Thumb Code 68 dac7311.o(i.ao_dwq_set) + ao_write 0x08005229 Thumb Code 326 dac7311.o(i.ao_write) + clrcs 0x0800537d Thumb Code 130 ms5803.o(i.clrcs) + dac7311_init 0x08005415 Thumb Code 56 dac7311.o(i.dac7311_init) + delay_ms 0x08005455 Thumb Code 10 main.o(i.delay_ms) + delay_tick 0x0800545f Thumb Code 14 main.o(i.delay_tick) + delay_us 0x0800546d Thumb Code 90 main.o(i.delay_us) + digital_ctrl 0x080054cd Thumb Code 260 gpios.o(i.digital_ctrl) + disp_out 0x080055ed Thumb Code 38 hc595.o(i.disp_out) + ds18b20_check 0x08005619 Thumb Code 90 ds18b20.o(i.ds18b20_check) + ds18b20_get_temp 0x08005679 Thumb Code 108 ds18b20.o(i.ds18b20_get_temp) + ds18b20_init 0x080056e5 Thumb Code 22 ds18b20.o(i.ds18b20_init) + ds18b20_read_bit 0x08005701 Thumb Code 94 ds18b20.o(i.ds18b20_read_bit) + ds18b20_read_byte 0x08005765 Thumb Code 34 ds18b20.o(i.ds18b20_read_byte) + ds18b20_rst 0x08005789 Thumb Code 60 ds18b20.o(i.ds18b20_rst) + ds18b20_start 0x080057c9 Thumb Code 24 ds18b20.o(i.ds18b20_start) + ds18b20_write_byte 0x080057e1 Thumb Code 114 ds18b20.o(i.ds18b20_write_byte) + encoder_init 0x08005859 Thumb Code 62 encoder.o(i.encoder_init) + encoder_run 0x080058b1 Thumb Code 116 encoder.o(i.encoder_run) + hc595_write_data 0x08005941 Thumb Code 98 hc595.o(i.hc595_write_data) + led_ctrl 0x080059ad Thumb Code 26 gpios.o(i.led_ctrl) + main 0x080059d1 Thumb Code 126 main.o(i.main) + mf5803_loop 0x08005a55 Thumb Code 376 mf5803.o(i.mf5803_loop) + mf5803_setup 0x08005bfd Thumb Code 184 mf5803.o(i.mf5803_setup) + modbus_analysis_rtu 0x08005cbd Thumb Code 180 modbus_rtu.o(i.modbus_analysis_rtu) + modbus_errfunction_rtu 0x08005d71 Thumb Code 118 modbus_rtu.o(i.modbus_errfunction_rtu) + modbus_process_rtu 0x08005df1 Thumb Code 64 modbus_rtu.o(i.modbus_process_rtu) + modbus_rtu_init 0x08005e35 Thumb Code 58 modbus_rtu.o(i.modbus_rtu_init) + modbus_rx_cb 0x08005e89 Thumb Code 98 modbus_rtu.o(i.modbus_rx_cb) + prov_calibrate_step 0x08005f09 Thumb Code 306 provalctrl.o(i.prov_calibrate_step) + prov_ctrl 0x0800603d Thumb Code 180 provalctrl.o(i.prov_ctrl) + prov_init 0x080060fd Thumb Code 240 provalctrl.o(i.prov_init) + readcoilstate_rtu 0x08006205 Thumb Code 326 modbus_rtu.o(i.readcoilstate_rtu) + readdisinputstate_rtu 0x08006355 Thumb Code 322 modbus_rtu.o(i.readdisinputstate_rtu) + readholdreg_rtu 0x080064a1 Thumb Code 258 modbus_rtu.o(i.readholdreg_rtu) + readinputreg_rtu 0x080065ad Thumb Code 252 modbus_rtu.o(i.readinputreg_rtu) + setcs 0x080066b1 Thumb Code 86 ms5803.o(i.setcs) + tim6_cnt 0x08006719 Thumb Code 308 timer.o(i.tim6_cnt) + uart_send 0x0800689d Thumb Code 20 uarts.o(i.uart_send) + wf5803_ReadReg 0x080068b1 Thumb Code 34 mf5803.o(i.wf5803_ReadReg) + wf5803_WriteReg 0x080068d3 Thumb Code 34 mf5803.o(i.wf5803_WriteReg) + writemulticoil_rtu 0x080068f5 Thumb Code 322 modbus_rtu.o(i.writemulticoil_rtu) + writemultireg_rtu 0x08006a41 Thumb Code 252 modbus_rtu.o(i.writemultireg_rtu) + writesinglecoil_rtu 0x08006b45 Thumb Code 188 modbus_rtu.o(i.writesinglecoil_rtu) + writesinglereg_rtu 0x08006c09 Thumb Code 176 modbus_rtu.o(i.writesinglereg_rtu) + __aeabi_dadd 0x08006cc1 Thumb Code 0 daddsub_clz.o(x$fpl$dadd) + _dadd 0x08006cc1 Thumb Code 332 daddsub_clz.o(x$fpl$dadd) + __aeabi_ddiv 0x08006e11 Thumb Code 0 ddiv.o(x$fpl$ddiv) + _ddiv 0x08006e11 Thumb Code 552 ddiv.o(x$fpl$ddiv) + __aeabi_d2iz 0x080070c1 Thumb Code 0 dfix.o(x$fpl$dfix) + _dfix 0x080070c1 Thumb Code 94 dfix.o(x$fpl$dfix) + __aeabi_d2uiz 0x08007121 Thumb Code 0 dfixu.o(x$fpl$dfixu) + _dfixu 0x08007121 Thumb Code 90 dfixu.o(x$fpl$dfixu) + __aeabi_i2d 0x0800717b Thumb Code 0 dflt_clz.o(x$fpl$dflt) + _dflt 0x0800717b Thumb Code 46 dflt_clz.o(x$fpl$dflt) + __aeabi_l2d 0x080071a9 Thumb Code 0 dfltll_clz.o(x$fpl$dfltll) + _ll_sto_d 0x080071a9 Thumb Code 162 dfltll_clz.o(x$fpl$dfltll) + __aeabi_dmul 0x0800724d Thumb Code 0 dmul.o(x$fpl$dmul) + _dmul 0x0800724d Thumb Code 332 dmul.o(x$fpl$dmul) + __fpl_dnaninf 0x080073a1 Thumb Code 156 dnaninf.o(x$fpl$dnaninf) + __fpl_dretinf 0x0800743d Thumb Code 12 dretinf.o(x$fpl$dretinf) + __aeabi_dsub 0x08007449 Thumb Code 0 daddsub_clz.o(x$fpl$dsub) + _dsub 0x08007449 Thumb Code 464 daddsub_clz.o(x$fpl$dsub) + _fp_init 0x0800761d Thumb Code 10 fpinit.o(x$fpl$fpinit) + __fplib_config_fpu_vfp 0x08007625 Thumb Code 0 fpinit.o(x$fpl$fpinit) + __fplib_config_pureend_doubles 0x08007625 Thumb Code 0 fpinit.o(x$fpl$fpinit) + __I$use$fp 0x08007626 Number 0 usenofp.o(x$fpl$usenofp) + AHBPrescTable 0x0800762e Data 16 system_stm32f4xx.o(.constdata) + APBPrescTable 0x0800763e Data 8 system_stm32f4xx.o(.constdata) + Region$$Table$$Base 0x08007648 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08007668 Number 0 anon$$obj.o(Region$$Table) uwTick 0x20000000 Data 4 stm32f4xx_hal.o(.data) uwTickPrio 0x20000004 Data 4 stm32f4xx_hal.o(.data) uwTickFreq 0x20000008 Data 1 stm32f4xx_hal.o(.data) @@ -3720,9 +3720,9 @@ Memory Map of the image Image Entry point : 0x08000189 - Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000077d0, Max: 0x00100000, ABSOLUTE, COMPRESSED[0x00007678]) + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000077d4, Max: 0x00100000, ABSOLUTE, COMPRESSED[0x0000767c]) - Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00007664, Max: 0x00100000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00007668, Max: 0x00100000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object @@ -3954,78 +3954,78 @@ Memory Map of the image 0x08004dd4 0x08004dd4 0x00000050 Code RO 4451 i.ads1256_init ads1256.o 0x08004e24 0x08004e24 0x00000058 Code RO 4452 i.ads1256_read_byte ads1256.o 0x08004e7c 0x08004e7c 0x00000074 Code RO 4453 i.ads1256_write_byte ads1256.o - 0x08004ef0 0x08004ef0 0x000001f8 Code RO 5945 i.analog_ctrl provalctrl.o - 0x080050e8 0x080050e8 0x00000050 Code RO 5776 i.analog_gather adcs.o - 0x08005138 0x08005138 0x0000004c Code RO 4572 i.ao_blf1_set dac7311.o - 0x08005184 0x08005184 0x0000004c Code RO 4573 i.ao_blf2_set dac7311.o - 0x080051d0 0x080051d0 0x00000054 Code RO 4574 i.ao_dwq_set dac7311.o - 0x08005224 0x08005224 0x00000154 Code RO 4575 i.ao_write dac7311.o - 0x08005378 0x08005378 0x00000098 Code RO 4725 i.clrcs ms5803.o - 0x08005410 0x08005410 0x00000040 Code RO 4576 i.dac7311_init dac7311.o - 0x08005450 0x08005450 0x0000000a Code RO 15 i.delay_ms main.o - 0x0800545a 0x0800545a 0x0000000e Code RO 16 i.delay_tick main.o - 0x08005468 0x08005468 0x00000060 Code RO 17 i.delay_us main.o - 0x080054c8 0x080054c8 0x00000120 Code RO 5816 i.digital_ctrl gpios.o - 0x080055e8 0x080055e8 0x0000002c Code RO 4888 i.disp_out hc595.o - 0x08005614 0x08005614 0x00000060 Code RO 4822 i.ds18b20_check ds18b20.o - 0x08005674 0x08005674 0x0000006c Code RO 4823 i.ds18b20_get_temp ds18b20.o - 0x080056e0 0x080056e0 0x0000001c Code RO 4824 i.ds18b20_init ds18b20.o - 0x080056fc 0x080056fc 0x00000064 Code RO 4825 i.ds18b20_read_bit ds18b20.o - 0x08005760 0x08005760 0x00000022 Code RO 4826 i.ds18b20_read_byte ds18b20.o - 0x08005782 0x08005782 0x00000002 PAD - 0x08005784 0x08005784 0x00000040 Code RO 4827 i.ds18b20_rst ds18b20.o - 0x080057c4 0x080057c4 0x00000018 Code RO 4828 i.ds18b20_start ds18b20.o - 0x080057dc 0x080057dc 0x00000078 Code RO 4829 i.ds18b20_write_byte ds18b20.o - 0x08005854 0x08005854 0x00000058 Code RO 5994 i.encoder_init encoder.o - 0x080058ac 0x080058ac 0x00000090 Code RO 5995 i.encoder_run encoder.o - 0x0800593c 0x0800593c 0x0000006c Code RO 4889 i.hc595_write_data hc595.o - 0x080059a8 0x080059a8 0x00000024 Code RO 5817 i.led_ctrl gpios.o - 0x080059cc 0x080059cc 0x00000084 Code RO 18 i.main main.o - 0x08005a50 0x08005a50 0x000001a8 Code RO 4952 i.mf5803_loop mf5803.o - 0x08005bf8 0x08005bf8 0x000000c0 Code RO 4953 i.mf5803_setup mf5803.o - 0x08005cb8 0x08005cb8 0x000000b4 Code RO 5092 i.modbus_analysis_rtu modbus_rtu.o - 0x08005d6c 0x08005d6c 0x00000080 Code RO 5093 i.modbus_errfunction_rtu modbus_rtu.o - 0x08005dec 0x08005dec 0x00000044 Code RO 5094 i.modbus_process_rtu modbus_rtu.o - 0x08005e30 0x08005e30 0x00000054 Code RO 5095 i.modbus_rtu_init modbus_rtu.o - 0x08005e84 0x08005e84 0x00000080 Code RO 5096 i.modbus_rx_cb modbus_rtu.o - 0x08005f04 0x08005f04 0x00000132 Code RO 5946 i.prov_calibrate_step provalctrl.o - 0x08006036 0x08006036 0x00000002 PAD - 0x08006038 0x08006038 0x000000c0 Code RO 5947 i.prov_ctrl provalctrl.o - 0x080060f8 0x080060f8 0x00000108 Code RO 5948 i.prov_init provalctrl.o - 0x08006200 0x08006200 0x00000150 Code RO 5097 i.readcoilstate_rtu modbus_rtu.o - 0x08006350 0x08006350 0x0000014c Code RO 5098 i.readdisinputstate_rtu modbus_rtu.o - 0x0800649c 0x0800649c 0x0000010c Code RO 5099 i.readholdreg_rtu modbus_rtu.o - 0x080065a8 0x080065a8 0x00000104 Code RO 5100 i.readinputreg_rtu modbus_rtu.o - 0x080066ac 0x080066ac 0x00000068 Code RO 4733 i.setcs ms5803.o - 0x08006714 0x08006714 0x00000184 Code RO 5851 i.tim6_cnt timer.o - 0x08006898 0x08006898 0x00000014 Code RO 5894 i.uart_send uarts.o - 0x080068ac 0x080068ac 0x00000022 Code RO 4954 i.wf5803_ReadReg mf5803.o - 0x080068ce 0x080068ce 0x00000022 Code RO 4956 i.wf5803_WriteReg mf5803.o - 0x080068f0 0x080068f0 0x0000014c Code RO 5101 i.writemulticoil_rtu modbus_rtu.o - 0x08006a3c 0x08006a3c 0x00000104 Code RO 5102 i.writemultireg_rtu modbus_rtu.o - 0x08006b40 0x08006b40 0x000000c4 Code RO 5103 i.writesinglecoil_rtu modbus_rtu.o - 0x08006c04 0x08006c04 0x000000b8 Code RO 5104 i.writesinglereg_rtu modbus_rtu.o - 0x08006cbc 0x08006cbc 0x00000150 Code RO 6104 x$fpl$dadd fz_wm.l(daddsub_clz.o) - 0x08006e0c 0x08006e0c 0x000002b0 Code RO 6111 x$fpl$ddiv fz_wm.l(ddiv.o) - 0x080070bc 0x080070bc 0x0000005e Code RO 6114 x$fpl$dfix fz_wm.l(dfix.o) - 0x0800711a 0x0800711a 0x00000002 PAD - 0x0800711c 0x0800711c 0x0000005a Code RO 6122 x$fpl$dfixu fz_wm.l(dfixu.o) - 0x08007176 0x08007176 0x0000002e Code RO 6127 x$fpl$dflt fz_wm.l(dflt_clz.o) - 0x080071a4 0x080071a4 0x000000a2 Code RO 6132 x$fpl$dfltll fz_wm.l(dfltll_clz.o) - 0x08007246 0x08007246 0x00000002 PAD - 0x08007248 0x08007248 0x00000154 Code RO 6136 x$fpl$dmul fz_wm.l(dmul.o) - 0x0800739c 0x0800739c 0x0000009c Code RO 6168 x$fpl$dnaninf fz_wm.l(dnaninf.o) - 0x08007438 0x08007438 0x0000000c Code RO 6170 x$fpl$dretinf fz_wm.l(dretinf.o) - 0x08007444 0x08007444 0x000001d4 Code RO 6106 x$fpl$dsub fz_wm.l(daddsub_clz.o) - 0x08007618 0x08007618 0x0000000a Code RO 6339 x$fpl$fpinit fz_wm.l(fpinit.o) - 0x08007622 0x08007622 0x00000000 Code RO 6176 x$fpl$usenofp fz_wm.l(usenofp.o) - 0x08007622 0x08007622 0x00000008 Data RO 1568 .constdata stm32f4xx_hal_dma.o - 0x0800762a 0x0800762a 0x00000018 Data RO 4413 .constdata system_stm32f4xx.o - 0x08007642 0x08007642 0x00000002 PAD - 0x08007644 0x08007644 0x00000020 Data RO 6395 Region$$Table anon$$obj.o + 0x08004ef0 0x08004ef0 0x000001fc Code RO 5945 i.analog_ctrl provalctrl.o + 0x080050ec 0x080050ec 0x00000050 Code RO 5776 i.analog_gather adcs.o + 0x0800513c 0x0800513c 0x0000004c Code RO 4572 i.ao_blf1_set dac7311.o + 0x08005188 0x08005188 0x0000004c Code RO 4573 i.ao_blf2_set dac7311.o + 0x080051d4 0x080051d4 0x00000054 Code RO 4574 i.ao_dwq_set dac7311.o + 0x08005228 0x08005228 0x00000154 Code RO 4575 i.ao_write dac7311.o + 0x0800537c 0x0800537c 0x00000098 Code RO 4725 i.clrcs ms5803.o + 0x08005414 0x08005414 0x00000040 Code RO 4576 i.dac7311_init dac7311.o + 0x08005454 0x08005454 0x0000000a Code RO 15 i.delay_ms main.o + 0x0800545e 0x0800545e 0x0000000e Code RO 16 i.delay_tick main.o + 0x0800546c 0x0800546c 0x00000060 Code RO 17 i.delay_us main.o + 0x080054cc 0x080054cc 0x00000120 Code RO 5816 i.digital_ctrl gpios.o + 0x080055ec 0x080055ec 0x0000002c Code RO 4888 i.disp_out hc595.o + 0x08005618 0x08005618 0x00000060 Code RO 4822 i.ds18b20_check ds18b20.o + 0x08005678 0x08005678 0x0000006c Code RO 4823 i.ds18b20_get_temp ds18b20.o + 0x080056e4 0x080056e4 0x0000001c Code RO 4824 i.ds18b20_init ds18b20.o + 0x08005700 0x08005700 0x00000064 Code RO 4825 i.ds18b20_read_bit ds18b20.o + 0x08005764 0x08005764 0x00000022 Code RO 4826 i.ds18b20_read_byte ds18b20.o + 0x08005786 0x08005786 0x00000002 PAD + 0x08005788 0x08005788 0x00000040 Code RO 4827 i.ds18b20_rst ds18b20.o + 0x080057c8 0x080057c8 0x00000018 Code RO 4828 i.ds18b20_start ds18b20.o + 0x080057e0 0x080057e0 0x00000078 Code RO 4829 i.ds18b20_write_byte ds18b20.o + 0x08005858 0x08005858 0x00000058 Code RO 5994 i.encoder_init encoder.o + 0x080058b0 0x080058b0 0x00000090 Code RO 5995 i.encoder_run encoder.o + 0x08005940 0x08005940 0x0000006c Code RO 4889 i.hc595_write_data hc595.o + 0x080059ac 0x080059ac 0x00000024 Code RO 5817 i.led_ctrl gpios.o + 0x080059d0 0x080059d0 0x00000084 Code RO 18 i.main main.o + 0x08005a54 0x08005a54 0x000001a8 Code RO 4952 i.mf5803_loop mf5803.o + 0x08005bfc 0x08005bfc 0x000000c0 Code RO 4953 i.mf5803_setup mf5803.o + 0x08005cbc 0x08005cbc 0x000000b4 Code RO 5092 i.modbus_analysis_rtu modbus_rtu.o + 0x08005d70 0x08005d70 0x00000080 Code RO 5093 i.modbus_errfunction_rtu modbus_rtu.o + 0x08005df0 0x08005df0 0x00000044 Code RO 5094 i.modbus_process_rtu modbus_rtu.o + 0x08005e34 0x08005e34 0x00000054 Code RO 5095 i.modbus_rtu_init modbus_rtu.o + 0x08005e88 0x08005e88 0x00000080 Code RO 5096 i.modbus_rx_cb modbus_rtu.o + 0x08005f08 0x08005f08 0x00000132 Code RO 5946 i.prov_calibrate_step provalctrl.o + 0x0800603a 0x0800603a 0x00000002 PAD + 0x0800603c 0x0800603c 0x000000c0 Code RO 5947 i.prov_ctrl provalctrl.o + 0x080060fc 0x080060fc 0x00000108 Code RO 5948 i.prov_init provalctrl.o + 0x08006204 0x08006204 0x00000150 Code RO 5097 i.readcoilstate_rtu modbus_rtu.o + 0x08006354 0x08006354 0x0000014c Code RO 5098 i.readdisinputstate_rtu modbus_rtu.o + 0x080064a0 0x080064a0 0x0000010c Code RO 5099 i.readholdreg_rtu modbus_rtu.o + 0x080065ac 0x080065ac 0x00000104 Code RO 5100 i.readinputreg_rtu modbus_rtu.o + 0x080066b0 0x080066b0 0x00000068 Code RO 4733 i.setcs ms5803.o + 0x08006718 0x08006718 0x00000184 Code RO 5851 i.tim6_cnt timer.o + 0x0800689c 0x0800689c 0x00000014 Code RO 5894 i.uart_send uarts.o + 0x080068b0 0x080068b0 0x00000022 Code RO 4954 i.wf5803_ReadReg mf5803.o + 0x080068d2 0x080068d2 0x00000022 Code RO 4956 i.wf5803_WriteReg mf5803.o + 0x080068f4 0x080068f4 0x0000014c Code RO 5101 i.writemulticoil_rtu modbus_rtu.o + 0x08006a40 0x08006a40 0x00000104 Code RO 5102 i.writemultireg_rtu modbus_rtu.o + 0x08006b44 0x08006b44 0x000000c4 Code RO 5103 i.writesinglecoil_rtu modbus_rtu.o + 0x08006c08 0x08006c08 0x000000b8 Code RO 5104 i.writesinglereg_rtu modbus_rtu.o + 0x08006cc0 0x08006cc0 0x00000150 Code RO 6104 x$fpl$dadd fz_wm.l(daddsub_clz.o) + 0x08006e10 0x08006e10 0x000002b0 Code RO 6111 x$fpl$ddiv fz_wm.l(ddiv.o) + 0x080070c0 0x080070c0 0x0000005e Code RO 6114 x$fpl$dfix fz_wm.l(dfix.o) + 0x0800711e 0x0800711e 0x00000002 PAD + 0x08007120 0x08007120 0x0000005a Code RO 6122 x$fpl$dfixu fz_wm.l(dfixu.o) + 0x0800717a 0x0800717a 0x0000002e Code RO 6127 x$fpl$dflt fz_wm.l(dflt_clz.o) + 0x080071a8 0x080071a8 0x000000a2 Code RO 6132 x$fpl$dfltll fz_wm.l(dfltll_clz.o) + 0x0800724a 0x0800724a 0x00000002 PAD + 0x0800724c 0x0800724c 0x00000154 Code RO 6136 x$fpl$dmul fz_wm.l(dmul.o) + 0x080073a0 0x080073a0 0x0000009c Code RO 6168 x$fpl$dnaninf fz_wm.l(dnaninf.o) + 0x0800743c 0x0800743c 0x0000000c Code RO 6170 x$fpl$dretinf fz_wm.l(dretinf.o) + 0x08007448 0x08007448 0x000001d4 Code RO 6106 x$fpl$dsub fz_wm.l(daddsub_clz.o) + 0x0800761c 0x0800761c 0x0000000a Code RO 6339 x$fpl$fpinit fz_wm.l(fpinit.o) + 0x08007626 0x08007626 0x00000000 Code RO 6176 x$fpl$usenofp fz_wm.l(usenofp.o) + 0x08007626 0x08007626 0x00000008 Data RO 1568 .constdata stm32f4xx_hal_dma.o + 0x0800762e 0x0800762e 0x00000018 Data RO 4413 .constdata system_stm32f4xx.o + 0x08007646 0x08007646 0x00000002 PAD + 0x08007648 0x08007648 0x00000020 Data RO 6395 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08007664, Size: 0x00001a18, Max: 0x0001c000, ABSOLUTE, COMPRESSED[0x00000014]) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08007668, Size: 0x00001a18, Max: 0x0001c000, ABSOLUTE, COMPRESSED[0x00000014]) Exec Addr Load Addr Size Type Attr Idx E Section Name Object @@ -4063,7 +4063,7 @@ Memory Map of the image 0x20001618 - 0x00000400 Zero RW 1 STACK startup_stm32f407xx.o - Execution Region RW_IRAM2 (Exec base: 0x2001c000, Load base: 0x08007678, Size: 0x00000000, Max: 0x00004000, ABSOLUTE) + Execution Region RW_IRAM2 (Exec base: 0x2001c000, Load base: 0x0800767c, Size: 0x00000000, Max: 0x00004000, ABSOLUTE) **** No section assigned to this execution region **** @@ -4093,7 +4093,7 @@ Image component sizes 358 32 0 110 196 7180 modbus.o 2756 142 0 0 2048 13994 modbus_rtu.o 256 50 0 17 0 3199 ms5803.o - 1266 88 0 16 112 4240 provalctrl.o + 1270 92 0 16 112 4240 provalctrl.o 204 22 0 0 88 1861 spi.o 64 26 392 0 1536 892 startup_stm32f407xx.o 212 36 0 9 0 9777 stm32f4xx_hal.o @@ -4116,7 +4116,7 @@ Image component sizes 1288 114 0 0 840 5222 usart.o ---------------------------------------------------------------------- - 26516 1794 458 364 6220 932141 Object Totals + 26520 1798 458 364 6220 932141 Object Totals 0 0 32 0 0 0 (incl. Generated) 26 0 2 10 0 0 (incl. Padding) @@ -4181,15 +4181,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 29850 1986 458 364 6316 913489 Grand Totals - 29850 1986 458 20 6316 913489 ELF Image Totals (compressed) - 29850 1986 458 20 0 0 ROM Totals + 29854 1990 458 364 6316 913489 Grand Totals + 29854 1990 458 20 6316 913489 ELF Image Totals (compressed) + 29854 1990 458 20 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 30308 ( 29.60kB) + Total RO Size (Code + RO Data) 30312 ( 29.60kB) Total RW Size (RW Data + ZI Data) 6680 ( 6.52kB) - Total ROM Size (Code + RO Data + RW Data) 30328 ( 29.62kB) + Total ROM Size (Code + RO Data + RW Data) 30332 ( 29.62kB) ============================================================================== diff --git a/MDK-ARM/VOQC/VOQC_VOQC.dep b/MDK-ARM/VOQC/VOQC_VOQC.dep index aae357b..f480b79 100644 --- a/MDK-ARM/VOQC/VOQC_VOQC.dep +++ b/MDK-ARM/VOQC/VOQC_VOQC.dep @@ -1,7 +1,7 @@ Dependencies for Project 'VOQC', Target 'VOQC': (DO NOT MODIFY !) CompilerVersion: 5060960::V5.06 update 7 (build 960)::.\ARM Compiler_5_06 F (startup_stm32f407xx.s)(0x66C2E5B4)(--cpu Cortex-M4.fp.sp -g --apcs=interwork -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include --pd "__UVISION_VERSION SETA 539" --pd "_RTE_ SETA 1" --pd "STM32F407xx SETA 1" --pd "_RTE_ SETA 1" --list startup_stm32f407xx.lst --xref -o voqc\startup_stm32f407xx.o --depend voqc\startup_stm32f407xx.d) -F (../Core/Src/main.c)(0x66C3FC55)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx -o voqc\main.o --omf_browse voqc\main.crf --depend voqc\main.d) +F (../Core/Src/main.c)(0x66C43E3A)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx -o voqc\main.o --omf_browse voqc\main.crf --depend voqc\main.d) I (../Core/Inc/main.h)(0x6694D721) I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h)(0x66B41EAC) I (../Core/Inc/stm32f4xx_hal_conf.h)(0x66C2E5B0) @@ -2239,7 +2239,7 @@ I (../Core/Inc/spi.h)(0x668F85FC) I (../CH395Q/ch395cmd.h)(0x664FF969) I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\string.h)(0x5E8E3CC2) I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\stdio.h)(0x5E8E3CC2) -F (..\users\Src\provalctrl.c)(0x66C4372B)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx -o voqc\provalctrl.o --omf_browse voqc\provalctrl.crf --depend voqc\provalctrl.d) +F (..\users\Src\provalctrl.c)(0x66C43F7B)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx -o voqc\provalctrl.o --omf_browse voqc\provalctrl.crf --depend voqc\provalctrl.d) I (../users/Inc/provalctrl.h)(0x66C42ED5) I (../modbus/Inc/modbus.h)(0x669A1795) I (../users/Inc/timer.h)(0x66C43301) @@ -2290,7 +2290,7 @@ I (../Core/Inc/spi.h)(0x668F85FC) I (../CH395Q/ch395cmd.h)(0x664FF969) I (C:\Users\admin\Desktop\wujunchao\99_General softwares\Keil_v5\ARM\ARM Compiler_5_06\include\string.h)(0x5E8E3CC2) I (../board/Inc/dac7311.h)(0x66949B65) -F (..\users\Src\encoder.c)(0x66C3EBFF)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx -o voqc\encoder.o --omf_browse voqc\encoder.crf --depend voqc\encoder.d) +F (..\users\Src\encoder.c)(0x66C43FCC)(--c99 -c --cpu Cortex-M4.fp.sp -g -O0 -Otime --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../board/Inc -I ../CH395Q -I ../modbus/Inc -I ../users/Inc -I.\RTE\_VOQC -IC:\Users\admin\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\admin\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.15.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION="539" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx -o voqc\encoder.o --omf_browse voqc\encoder.crf --depend voqc\encoder.d) I (../users/Inc/encoder.h)(0x66C3E76F) I (../modbus/Inc/modbus.h)(0x669A1795) I (../users/Inc/timer.h)(0x66C43301) diff --git a/MDK-ARM/VOQC/encoder.crf b/MDK-ARM/VOQC/encoder.crf index 90987f64ba05e31acae897e5a4b6972f20ed3541..17362977703b495524270c8eea20d842f618d801 100644 GIT binary patch delta 77 zcmdnfZLz1@VnZS?*O~tlwy`k)!K~(N-u7%>Mj&PaVrC#_0b*7lW&>h&Am#vKP9Ww2 PVs0Sj*`CeI8~6hN-VPU< delta 77 zcmdnfZLz1@VnZS?*Z=GN+t?U@U_x^?Z+kW`BM>tIF*6Xe05K~NvjH(X5OV-AClGT1 PF*gwNY|rN94g3KB-jWxZ diff --git a/MDK-ARM/VOQC/encoder.o b/MDK-ARM/VOQC/encoder.o index 7fb98c323499e4d8f281a4bea4e9fddda413a98e..5441ac06da31e61ccdc61523a2a92a7c1467fca8 100644 GIT binary patch delta 96 zcmeC!ZP&5eZi5~#yQ!6dxs{r?{-sOz73DrO)L_Vb&VM&Co+0&H~q*LyaoWIZ5b2* delta 96 zcmeC!ZP&5eZi5~#yNQ*dsgr?{-sOz73Dr4b9RFbd4D%Co+0&H~q*LyaoWGH5lUn diff --git a/MDK-ARM/VOQC/main.crf b/MDK-ARM/VOQC/main.crf index 480336062f8491cadb28324cab5efcfc52885d70..7a857800a61ba7b287eb396752abbd63d44ea4a4 100644 GIT binary patch delta 81 zcmeyl$@1qW%MIcJT)X~E*v7^H1WL_{0_}rF9%m&2lK+FNeoIuP4 R#N0s41H`=B6$SVrJOR036U+br delta 81 zcmeyl$@1qW%MIcJTvvbeZ)0Ns0-k0?fp$d!Mj&PaVrC#_0b*7lW&>h&Am#vKP9Ww2 RVs0Sj0b<_miUNEQo&dTn6U+br diff --git a/MDK-ARM/VOQC/main.o b/MDK-ARM/VOQC/main.o index ab2ca2ec231806956f9972235fc5145ee0d7094f..febada6b2d4813d19468bc8b4214007022cf40f8 100644 GIT binary patch delta 105 zcmZoU;m~rzVS|(yyQ!6dxs{rFA(!>R}|x~)nqp|F-g`nW|;m_l-qK$Ka;@rclP{ZPXI-p8NvVn delta 105 zcmZoU;m~rzVS|(yyNQ*diIuTYv!YnLq8K9(GXXI(5VHU=D-g2*F*^`*05K;Ja{)0o p5c2>rFA(!>R}|x~)nqp@wY1PRW|;m_l-qK$Ka;@rclP{ZPXI$q8J_?E diff --git a/MDK-ARM/VOQC/provalctrl.crf b/MDK-ARM/VOQC/provalctrl.crf index 6a54cee8ce6f770e12b5c3df3edb9377ed3db171..4ab6fb741f658d8bdeef0515dba13d3fda9f6491 100644 GIT binary patch delta 81 zcmZ2I*JAZtiw(WJT)+QK*v7^H1b>^S^R`dtWdvd-AZ7+)79eH?Vm2UV2VxE&<^*Cc SAm#>Q9w6r3KAo3Ogb@J2ry9lp delta 81 zcmZ2I*JAZtiw(WJT&v$r*v7^H1hLK2dE2M+G6FFZ5HkZY3lOscF&hxG12G2>a{@6J S5OV`D4-oTipU%rC!UzC>R~g0t diff --git a/MDK-ARM/VOQC/provalctrl.o b/MDK-ARM/VOQC/provalctrl.o index f08ede5e63bd07a12c08fd0389c97776ede491ee..d9f9ed67e15aa3e60b299a0acc9e8eb81cd14295 100644 GIT binary patch delta 2960 zcmYM$e@xtG9S88|3wK{QxF4Wb3k_9n#SRQ@xX5BzutJ6rvS#5D{us(47^20X;Ua$& z*JfNx*Rq~1w77S1XnPyoKv~DR&h8R)#WWKZvh++fBS8ZRi6ycQ5)w;7jPEz!>m+%2 zwj3f@7kwNUP)NRzArb{eV*^T@)zcNGI>z>6+5du>r}(Lm02(E$$9GOs&70Ut~!(2 zdoH!t;>hC2=5TSiIc$y`j$958M;=E$hnK^5JGIyU##(mu502daz7?3?>shyq$%+`W zaXVZbc=kuu4o>w44p?K$O^b ze8x0ecTu{RZ>9$cC!ZHCY>IZ&zfAgfv9FgH^EHEy&+?)lVOYsJ zQeq1$A_&hpQiiaoMXNZ8m>9vN7)P48Ys-xp!v66<8A9h-4x&kvAxhl$Dme%E#~{;L zm2}c;Y08uxLlC=s}Fw(^Vc*VBzRs z-~iI9Phnf!LFgB}(1Ra(OuuuXIer|4SC|x`Mr@&jxLwb9 zO*#H}fy<#1Nd@Cr6!&3`@C2(3Ui0WM{I6*WSm1u^6QxKfuKKyxOzgqo5yqRUH>3EM zLa#n*X!lm)KnQL&0y;@*1IXUd%S#>Ib?K|g97I*2`V)n_(5k0&>& zq#BFjIIK~g;KU7`;Ls)RqzGU0q1Pw2kRZ0}EuVQ*>>R#>O(k&@|BAGrp5%0X=rcub zgG(0!PheQV7E)pzE5zPe@R`+sbAn}rUt`jPR&gCMVo(3mXIx)$8g3!2q#WC#8KE&Y zv~T-NOZMZ2C`tq07;vT!>=X3ScE1dS2%J(rTTu2kU=+A!BoO#d35lXPs{2{NH z?ObshQI`0$8WmNTCGN(L{HDRVVjP99Gnhb);4UC`?t^H8=yV!vB z2AkVaA$kxY_VQo-X35}YoQp4^dMD<^32c(=p}+a@y>o%DTK7;t&hiwx#2ki+{mI|` z=6L3#ufvLxC3tR-X@rS==U=JVKhdbJsM5yW4gMp*I;+qDd4XO6S!f&NMF@^-e#zeq{g^56!)qqXaJ5fAI?xJ4QqD%01fQTa{MzA98!t-0QfUwv> zt8gJEf|wL#NQ-K0iw1;#M_SM%IuRAU7!`5Miu+g-UKCD|Hq?l5bciJkid7`VIu^wi zthdPyDufFW;YFVaA|XmJFUqhf_&et&;cge*=n`8P7G9(T-=8=J&pV_AVQ~_zVgNBw zjY-jlwCKdPIEm0S89|enLR9eSCMq#2#<3=5P?#h;s1dd35G@!KTS$sdEIO~O-}6;B zDntt+VgY?(6$ufkfB>-KK3LM$O7 Z_{bLDLV^^1=cRx-YySVoAGN!G{{wh`#4G>+ delta 4165 zcmYk9e^6A{701uwK3IOdeM`g$y4#?j(hQ^!HAN#CtT;m($iSqT;SXtX#x`^c9c=6j z)4&A$1?m!4K@Td(BBHCZ2BL}k2TV!Frld*+Q`7PXbjXa;;8c{%I4wz~)9-nAcOQQ| z?%DJC-gD1A@4kC451za>^W-&Ox@~M|%}(2j?rdW_@7)|iGBahtZj{KKuAw;UK* z*)p=yh9?HkGCX!X8lG4@ad;ef;_)QlNyL+cN53_)(%JVgZsRMvb8|LQ`|jtq-16HD z@5=aD8&OO-(W6_N(~Q^Owk>dTlaXQD#{Esk23sAEqtSBhL=FMVIjPxj+49-b40pap z$jU zB1-38q@!gf6Q!6YrciJYx=qW83VHiMz{TV}iFFuLzz&tc5A!ECfHfEP`meF}4} z>N;>3U1xa<w)IaKvZgcCp?9ce;ltl|MO#i1}P8o_f=B?>L6;YJt$lLAYc6FJL|n z-r8cU)$+55e7w5_iH^Z6W*bAjtq#(6j}%897WEl zJBjKO`MW+N!(L_v_CpKH$L9QoMO(w;qHTJUD6~5~zmJIK%`9wLyz>~!Ok68XCZCcf zpGVMW6`v99;pRRglXWkCyY3MEL`|>6i^#jU67IMfxC?*b;8$CWHMRi`!iOdHr8EIv zL=!vwRy<`TtFa&aG9K%}tnHq++z1{LNXz zZCl50oW#D+xiK0yi@Q%kdwa8`y`ai)AFjJRbOI~WUzkMuRL&_}&<_3lk1TyJ=bbd% z_8m#6fqYC_7R-A7q(^Ej;)x{m(8a83u3o_t3VDQ}Yk zL*Mzjr9Y=~4R8=d3%#dfMatsD;$9SO#X(DZQE9QEGPK1V(YT}B4Uax^+S2xO@^KUl zp76(>=XFVm;n(W#L?<`TBchzWYbmd)92Veu zp!T(?sc7UHt~>{Q*FP-%bv|(#k%RDSgHLs=v#*Yz4vV5I`PR}6a=CnOrCp+X7R>jzY0+l) zSlVvUy6x}~m!Cx7Z39kfRp0$>Zafe9#p_POiDzz7AFE1);Bu=E<37w9^)?FG(}My1 zLr(gwoaVR!^kCae;aa$3GjBL)K2dFoDSwbb%uTTi=7id0pNYDLbw7eMjXJ~U*s{)1 zC;z;~Sf@?Gw;+e2n{&KIoNa=Gkm~eDE5GBs_kBzUo-!`)!gTih$tg#atnd;p?M38) z&z$sYHK4Z_1EzAfxU>Hf8Bi;NS){USh3QsX_C+qZfYIjfSfichz3mw7t`kQl4xkLJ zl%U zbg1HS>9Ft1Xo_B#g=~|f64um`q6E11BGSD5H|rg@s+V>ju4=V>xBWAcr)`q;e&`3j zw)8DLbRHY)*ZetNza601Jd`;o!l$#A@P?ZILwT9zF6o7-=8uE6^b+JL|FX(;n9F^b zY&ZOx|B3n9<-OGLoOrxXos^-flzkbK9^`_{aF4IO)C;-xcvB zPm6dKZgu<7=v%3wDGtEI8j#CZO#osaHwGZ?{LYEZ&%BTfi+dZ7i@T5vT&zrY(iOO? z*mDI(`zY^}CZB7iso+!6wDJfV-Ir!iZukpH;@&Gb#z$Gd3Np5YI2BpoN)X&Y4oTzU zpy<+98PU)8IX-a}5psD^NZ}HaqDUE+UPIR^{+%>++>J(Wg|0Z9Ln=34Lxc&Q6XIBH z5bj9k_q$4w3N9D`@q^@tiCbki$!$VrKyWEH`@EpYEKh^j=2;7(S>PNrICLys7AFTW zs)HMaxR#I?6-niBA?YBg;n;a9AN=!h9i(gt*`i1_*9w{USberD;@}Y>zV8_nTBb7n zu^OkC^$#T4T7z(#HRte#BK2G;qzPmYS1!4By{V$*a!^P`rZt}mMXGpFNIgg->ncTj zTsjC6SVF25!2u~GYn?&$;SA~&@$;OJ5J+K|)GM;U1w$bD>#cE`6e;62A@d-0;XbX3 zRPnS)vaNA^id1vXhv-xGl0`Zd8RJGFGa!*Q>sQ3Z<3h52V3037PC$_mdv1VCfJ7=f zsK^4>3JK&|D=DPN437wzec7NuINGQpKGttapN-Z`$JF~7)_ y>J#8LA)`ykzZJo@Bqa2THO_w(8ReW?_>3m`EopF%k>*wIN2Bd{&!9u*e)WGzaBH0a diff --git a/board/Src/mf.c b/board/Src/mf.c index 5b2c3f4..8935034 100644 --- a/board/Src/mf.c +++ b/board/Src/mf.c @@ -1,106 +1,106 @@ #include "mf.h" -int flow_addr = 1; //Ƶַ -double flow1 = 0; //Сmf4700ۻ -double flow2 = 0; //mf5003ۻ -double flow3 = 0; //mf5008ۻ -int mf_cnt = 0; //ݽռ +int flow_addr = 1; //流量计地址 +double flow1 = 0; //小流量计mf4700累积流量 +double flow2 = 0; //大流量计mf5003累积流量 +double flow3 = 0; //大流量计mf5008累积流量 +int mf_cnt = 0; //数据接收计数 -uint8_t tx_buf[20] = {0}; //ݷ +uint8_t tx_buf[20] = {0}; //数据发送数组 -uint8_t mf4700_buf[36] = {0};//Сmf4700ۻݽ -uint8_t mf5003_buf[36] = {0};//mf5003ۻݽ -uint8_t mf5008_buf[36] = {0};//mf5008ۻݽ +uint8_t mf4700_buf[36] = {0};//小流量计mf4700累积流量数据接收数组 +uint8_t mf5003_buf[36] = {0};//大流量计mf5003累积流量数据接收数组 +uint8_t mf5008_buf[36] = {0};//大流量计mf5008累积流量数据接收数组 /* -*:[Ӳַ][03][ʼַ][ʼַ][ܼĴ][ܼĴ][CRC][CRC] -*:[Ӳַ][03][ֽ][Ĵ0][Ĵ0][Ĵ1][Ĵ1][Ĵn][Ĵn][CRC][CRC] +*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高] +*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高] */ void read_mf(uint8_t local_addr, uint16_t start_addr, uint16_t read_len) { uint8_t tx_len = 0; uint16_t CRC_Num = 0; - tx_buf[tx_len ++] = local_addr; //ͨѶַ - tx_buf[tx_len ++] = Read_Hold; // 0x03 + tx_buf[tx_len ++] = local_addr; //通讯地址 + tx_buf[tx_len ++] = Read_Hold; //命令字 0x03 tx_buf[tx_len ++] = (uint8_t)(start_addr >> 8); - tx_buf[tx_len ++] = (uint8_t)(start_addr & 0xFF); //ʼַ + tx_buf[tx_len ++] = (uint8_t)(start_addr & 0xFF); //起始地址 tx_buf[tx_len ++] = (uint8_t)(read_len >> 8); - tx_buf[tx_len ++] = (uint8_t)(read_len & 0xFF); //ȡĴ + tx_buf[tx_len ++] = (uint8_t)(read_len & 0xFF); //读取寄存器数 CRC_Num = ModbusCRC16(tx_buf,tx_len); tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF); - tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRCУ飬λǰ + tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRC校验,低位在前 usart6_send(tx_buf,tx_len); } /* -*:[Ӳַ][06][Ĵַ][Ĵַ][Ĵֵ][Ĵֵ][CRC][CRC] -*:[Ӳַ][06][Ĵַ][Ĵַ][Ĵֵ][Ĵֵ][CRC][CRC] +*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] +*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] */ void write_mf(uint8_t local_addr, uint16_t reg_addr, uint16_t write_data) { uint8_t tx_len = 0; uint16_t CRC_Num = 0; - tx_buf[tx_len ++] = local_addr; //ͨѶַ - tx_buf[tx_len ++] = Write_Single; // 0x06 + tx_buf[tx_len ++] = local_addr; //通讯地址 + tx_buf[tx_len ++] = Write_Single; //命令字 0x06 tx_buf[tx_len ++] = (uint8_t)(reg_addr >> 8); - tx_buf[tx_len ++] = (uint8_t)(reg_addr & 0xFF); //ʼַ + tx_buf[tx_len ++] = (uint8_t)(reg_addr & 0xFF); //起始地址 tx_buf[tx_len ++] = (uint8_t)(write_data >> 8); - tx_buf[tx_len ++] = (uint8_t)(write_data & 0xFF); //д + tx_buf[tx_len ++] = (uint8_t)(write_data & 0xFF); //写入数据 CRC_Num = ModbusCRC16(tx_buf,tx_len); tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF); - tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRCУ飬λǰ + tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); //CRC校验,低位在前 usart6_send(tx_buf,tx_len); } -//mf4700˲ʱ +//读mf4700瞬时流量 void read_mf4700_flow(void) { read_mf(MF4700_ADDR,MF4700_Ins_Flow_Addr,2); } -//mf4701ۻ +//读mf4701累积流量 void read_mf4701_flow(void) { read_mf(MF4700_ADDR,MF4700_Cum_Flow_Addr,3); } -//mf5600˲ʱ +//读mf5600瞬时流量 void read_mf5000_flow(void) { read_mf(MF5003_ADDR,MF5000_Ins_Flow_Addr,2); } -//mf5603ۻ +//读mf5603累积流量 void read_mf5003_flow(void) { read_mf(MF5003_ADDR,MF5000_Cum_Flow_Addr,3); } -//mf5608ۻ +//读mf5608累积流量 void read_mf5008_flow(void) { read_mf(MF5008_ADDR,MF5000_Cum_Flow_Addr,3); } -//mf4700ԶУ +//mf4700自动校零 void mf4700_zero(void) { write_mf(MF4700_ADDR,MF4700_Auto_Zero_Addr,General_Data); } -//mf5600ԶУ +//mf5600自动校零 void mf5000_zero(void) { write_mf(MF5003_ADDR,MF5000_Auto_Zero_Addr,General_Data); } -//ȡƶ뱣ּĴ +//获取流量计读数,存入保持寄存器 void mf_read(void) { switch(flow_addr) @@ -137,9 +137,9 @@ void mf_read(void) } } -//ۻ -//mf4700ҪֶۻĴд0 -//mf5003mf5008ҪдĴд0xAA55رдȻָĴд0x0001ۻ +//清除累积流量 +//mf4700需要手动向累积流量寄存器写0 +//mf5003和mf5008需要先向写保护寄存器写入0xAA55关闭写保护,然后向指定寄存器写入0x0001清除累积流量 void mf_clear(void) { switch(flow_state) @@ -185,13 +185,13 @@ void mf_clear(void) void mf_rx_cb(void) { - // жϣյ1֡е + // 空闲中断,表明接收到了1帧所有的数据 if(LL_USART_IsActiveFlag_IDLE(USART6)) { - //ж + //清除空闲中断 LL_USART_ClearFlag_IDLE(USART6); int j = 0; - //ݵַݷֱ벻ͬ + //根据地址将数据分别存入不同的数组 if(usart6_rx_buf[0] == 0x01 && usart6_rx_buf[1] == 0x03) { for(j = 0;j < mf_cnt+1;j++) @@ -221,11 +221,11 @@ void mf_rx_cb(void) } - // Rxǿжϣյһֽ - // ȡRxԶжϱ־λ + // Rx非空中断,表明接收到了一个字节 + // 读取Rx可自动清除中断标志位 if(LL_USART_IsActiveFlag_RXNE(USART6)) { - // 鳤ȴõdata󳤶ȣֱֹͣ + // 如果数组长度大于设置的data最大长度,直接停止接收 if(mf_cnt > 50) mf_cnt = 0; // wait for the next data usart6_rx_buf[mf_cnt] = LL_USART_ReceiveData8(USART6); diff --git a/board/Src/mf5803.c b/board/Src/mf5803.c index 34cdad0..0f6418c 100644 --- a/board/Src/mf5803.c +++ b/board/Src/mf5803.c @@ -1,8 +1,8 @@ #include "mf5803.h" /* - ** ֵ : temp--SPIȡһֽ - ** : ½ضݣÿζȡ 1 bit + ** 返回值 : temp--SPI读取的一字节数据 + ** 描 述 : 下降沿读数据,每次读取 1 bit */ uint8_t SPI_Read_OneByte(void) { @@ -10,12 +10,12 @@ uint8_t SPI_Read_OneByte(void) uint8_t temp = 0; for (i = 0; i < 8; i++) { - //ȡMISO 8ֵtemp֮ԲڡSCK = 0֮λΪ - //ȡ1byteһλ(LSB)֮󣬲 + //读取MISO 8次输入的值,存入temp。之所以不放在“SCK = 0”语句之后的位置是因为: + //读取最后1byte的最后一位(即LSB)之后,不能再左移了 temp <<= 1; MF5803_SCK(1); delay_tick(10); - if(MF5803_MISO) //ȡλĩβͨλɶֽ + if(MF5803_MISO) //读取最高位,保存至最末尾,通过左移位完成读整个字节 temp |= 0x01; else temp &= ~0x01; @@ -27,8 +27,8 @@ uint8_t SPI_Read_OneByte(void) } /* -** : u8_writedata--SPIдһֽ -** : дݣÿд 1 bit +** 参 数 : u8_writedata--SPI写入的一字节数据 +** 描 述 : 上升沿写数据,每次写入 1 bit */ void SPI_Write_OneByte(uint8_t u8_writedata) { @@ -36,25 +36,25 @@ void SPI_Write_OneByte(uint8_t u8_writedata) for (i = 0; i < 8; i++) { delay_tick(10); - if (u8_writedata & 0x80) //жλǷλ + if (u8_writedata & 0x80) //判断最高位,总是发送最高位 { - MF5803_MOSI(1); //MOSI1׼1 + MF5803_MOSI(1); //MOSI输出1,数据总线准备数据1 } else { - MF5803_MOSI(0);//MOSI0׼0 + MF5803_MOSI(0);//MOSI输出0,数据总线准备数据0 } - MF5803_SCK(1); //(SCK0-->1)ϵд뵽 + MF5803_SCK(1); //上升沿来了(SCK从0-->1),数据总线上的数据写入到器件 delay_tick(10); - u8_writedata <<= 1; //Ѿλ - MF5803_SCK(0); //SCKźţʼΪ0 + u8_writedata <<= 1; //左移抛弃已经输出的最高位 + MF5803_SCK(0); //拉低SCK信号,初始化为0 delay_tick(10); } } /* -** ֵ : u8_readdata--SPIȡһֽ -** : u8_writedata--SPIдһֽ -** : д½ض +** 返回值 : u8_readdata--SPI读取的一字节数据 +** 参 数 : u8_writedata--SPI写入的一字节数据 +** 描 述 : 上升沿写,下降沿读 */ uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata) { @@ -62,18 +62,18 @@ uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata) uint8_t u8_readdata = 0x00; for (i = 0; i < 8; i++) { - u8_readdata <<= 1;//ȡMISO 8ֵu8_readdata - if (u8_writedata & 0x80)//жλдλλ - MF5803_MOSI(1);//MOSI1׼1 + u8_readdata <<= 1;//读取MISO 8次输入的值,存入u8_readdata + if (u8_writedata & 0x80)//判断最高位,总是写最高位(输出最高位) + MF5803_MOSI(1);//MOSI输出1,数据总线准备数据1 else - MF5803_MOSI(0);//MOSI0׼0 - u8_writedata <<= 1;//Ѿλ - MF5803_SCK(1);//(SCK0-->1)ϵд - if(MF5803_MISO)//ȡλĩβͨλɶֽ + MF5803_MOSI(0);//MOSI输出0,数据总线准备数据0 + u8_writedata <<= 1;//左移抛弃已经输出的最高位 + MF5803_SCK(1);//上升沿来了(SCK从0-->1),数据总线上的数据写入器件 + if(MF5803_MISO)//读取最高位,保存至最末尾,通过左移位完成读整个字节 u8_readdata |= 0x01; else u8_readdata &= ~0x01; - MF5803_SCK(0);//½(SCK1-->0)MISOϽµݣȡu8readdata + MF5803_SCK(0);//下降沿来了(SCK从1-->0),MISO上将产生新的数据,读取存入u8——readdata } return u8_readdata; } @@ -82,15 +82,15 @@ uint8_t SPI_WriteAndRead_OneByte(uint8_t u8_writedata) uint8_t RawData[5]; uint8_t* GetSensorData() { - //0 + //重置清0 memset(RawData, 0, sizeof(uint8_t) * 5); - //ɼ¶ + //采集温度数据 wf5803_WriteReg(0x30, 0x08); delay_ms(2); RawData[3] = wf5803_ReadReg(0x09); RawData[4] = wf5803_ReadReg(0x0A); - //ɼѹ + //采集气压数据 wf5803_WriteReg(0x30, 0x09); delay_ms(3); RawData[0] = wf5803_ReadReg(0x06); @@ -101,60 +101,60 @@ uint8_t* GetSensorData() } /* -** : (1)uint8_t addr--Ĵַ -** (2)uint8_t value--дֵ -** ˵ : wf5803Ĵд +** 参 数 : (1)uint8_t addr--寄存器地址 +** (2)uint8_t value--写入值 +** 说 明 : wf5803寄存器写函数 */ void wf5803_WriteReg(uint8_t addr, uint8_t value) { - clrcs();//CSƬѡ - SPI_Write_OneByte(0x00);//SPIдַ + clrcs();//CS片选拉低 + SPI_Write_OneByte(0x00);//SPI写地址命令 SPI_Write_OneByte(addr); - SPI_Write_OneByte(value);//SPIд - setcs();//CSƬѡ + SPI_Write_OneByte(value);//SPI写数据 + setcs();//CS片选拉高 } /* -** ֵ: value--ȡĴֵ -** : addr--Ĵַ -** ˵ : wf5803Ĵ +** 返回值: value--读取寄存器值 +** 参 数 : addr--寄存器地址 +** 说 明 : wf5803寄存器读函数 */ uint8_t wf5803_ReadReg(uint8_t addr) { uint8_t value; - clrcs();//CSƬѡ - SPI_Write_OneByte(0x80);//SPIдַ + clrcs();//CS片选拉低 + SPI_Write_OneByte(0x80);//SPI写地址命令 SPI_Write_OneByte(addr); - value = SPI_Read_OneByte();//SPI - setcs();//CSƬѡ + value = SPI_Read_OneByte();//SPI读数据 + setcs();//CS片选拉高 return value; } void wf5803_ReadRegMulti(uint8_t addr, uint8_t lens, uint8_t* value) { - clrcs();//CSƬѡ + clrcs();//CS片选拉低 if (lens == 1) { - SPI_Write_OneByte(0x80);//SPIдַ + SPI_Write_OneByte(0x80);//SPI写地址命令 } else if (lens == 2) { - SPI_Write_OneByte(0xA0);//SPIдַ + SPI_Write_OneByte(0xA0);//SPI写地址命令 } else if (lens == 3) { - SPI_Write_OneByte(0xC0);//SPIдַ + SPI_Write_OneByte(0xC0);//SPI写地址命令 } else { - SPI_Write_OneByte(0xE0);//SPIдַ + SPI_Write_OneByte(0xE0);//SPI写地址命令 } SPI_Write_OneByte(addr); for (uint8_t i = 0; i < lens; i++) { - value[i] = SPI_Read_OneByte();//SPI + value[i] = SPI_Read_OneByte();//SPI读数据 } - setcs();//CSƬѡ + setcs();//CS片选拉高 } @@ -162,7 +162,7 @@ void wf5803_ReadRegMulti(uint8_t addr, uint8_t lens, uint8_t* value) void mf5803_setup() { - setcs();//CSƬѡ + setcs();//CS片选拉高 SENSOR_SELECT(0); delay_ms(10); @@ -202,7 +202,7 @@ void mf5803_setup() long reading = 0; float press = 0; //kPa -float temp = 0; // +float temp = 0; //℃ float fDat; uint8_t flt_cnt = 0; float p_flt_window[6][20] = {0}; //sliding window, sensor_1&2 -> pressure[A,B,S] @@ -223,9 +223,9 @@ void mf5803_loop() { fDat = reading / 8388608.0f; } - press = (10000 * fDat + 9000) / 12.0f; //λ0.1Kpa + press = (10000 * fDat + 9000) / 12.0f; //单位0.1Kpa - p_flt_window[ NSS_Select -1 ][flt_cnt] = press*10; //ڼ¼ + p_flt_window[ NSS_Select -1 ][flt_cnt] = press*10; //滑动窗口记录 NSS_Select++; @@ -233,11 +233,11 @@ void mf5803_loop() { SENSOR_SELECT(1); } - if(NSS_Select > 6) //¼6·ѹ˴ÿ6*10ms + if(NSS_Select > 6) //记录完6路气压后进入此处,每6*10ms { NSS_Select = 1; - for( uint8_t i = 0; i < 6; i++ ) //ֵ˲ + for( uint8_t i = 0; i < 6; i++ ) //均值滤波 { sums = 0; for( uint8_t j = 0; j < 20; j++ ) @@ -247,7 +247,7 @@ void mf5803_loop() InputReg[ 13 + i ] = sums/20; //InputReg[13]~InputReg[18] } flt_cnt++; - if(flt_cnt > 19) //ڳ20ѭ¼ + if(flt_cnt > 19) //滑动窗口长度20,循环记录 { flt_cnt = 0; } diff --git a/board/Src/ms5803.c b/board/Src/ms5803.c index 517c1e2..b14edb1 100644 --- a/board/Src/ms5803.c +++ b/board/Src/ms5803.c @@ -12,7 +12,7 @@ uint8_t aRxBuffer[4]; uint8_t NSS_Select = 1; -//Ƭѡ +//拉高所有片选脚 void setcs(void) { HAL_GPIO_WritePin(MS5803_NSS1_GPIO_Port,MS5803_NSS1_Pin,GPIO_PIN_SET); @@ -57,10 +57,10 @@ void clrcs(void) } /************************************************ - Write_SPI_Byte - SPIдһֽ - Byte ---- - ֵ Byte ---- +函数名称 : Write_SPI_Byte +功 能 : SPI写一个字节 +参 数 : Byte ---- 数据 +返 回 值 : Byte ---- 数据 *************************************************/ uint8_t ms5803_write_byte( uint8_t Byte ) { @@ -69,7 +69,7 @@ uint8_t ms5803_write_byte( uint8_t Byte ) for(i = 0;i < 8;i++) { MS5803_SCK(0); - delay_us(1); // յȴ + delay_us(1); // 空等待 if(Byte & 0x80) { @@ -81,9 +81,9 @@ uint8_t ms5803_write_byte( uint8_t Byte ) } Byte <<= 1; - delay_us(1); // յȴ + delay_us(1); // 空等待 MS5803_SCK(1); - delay_us(1); // յȴ + delay_us(1); // 空等待 Byte |= MS5803_MISO; } @@ -93,10 +93,10 @@ uint8_t ms5803_write_byte( uint8_t Byte ) } /************************************************ - Read_SPI_Byte - SPIֻһֽ - - ֵ temp ---- +函数名称 : Read_SPI_Byte +功 能 : SPI只读一个字节 +参 数 : 无 +返 回 值 : temp ---- 数据 *************************************************/ uint8_t ms5803_read_byte(void) { @@ -106,14 +106,14 @@ uint8_t ms5803_read_byte(void) for(i = 0;i < 8;i++) { MS5803_SCK(0); - delay_us(1); // յȴ + delay_us(1); // 空等待 temp <<= 1; temp |= MS5803_MISO; - //delay_us(1); // յȴ + //delay_us(1); // 空等待 MS5803_SCK(1); - delay_us(1); // յȴ + delay_us(1); // 空等待 } MS5803_SCK(0); @@ -122,9 +122,9 @@ uint8_t ms5803_read_byte(void) } //**************************************** -//*ܣMS5803д -//*CMD -//*أTrue/False +//*功能:向MS5803写入命令 +//*参数:CMD +//*返回:True/False static int writecmd(uint8_t CMD) { @@ -141,9 +141,9 @@ static int writecmd(uint8_t CMD) } //**************************************** -//*ܣָMS5803Ӧ -//*CMD,Count -//*أTrue/False +//*功能:根据指令从MS5803读相应数据 +//*参数:CMD,Count +//*返回:True/False static int readcmddata(uint8_t CMD,uint8_t Count) { @@ -165,20 +165,20 @@ static int readcmddata(uint8_t CMD,uint8_t Count) } //**************************************** -//*ܣλMS5803 -//* -//*أ +//*功能:复位MS5803 +//*参数: +//*返回: static void resetdevice() { writecmd(RESET); - delay_ms(3); //ʱ3ms + delay_ms(3); //必须延时3ms } //**************************************** -//*ܣȡPROMУ׼,ֻҪȡһ -//* -//*أ +//*功能:获取PROM校准参数,只需要获取一次 +//*参数: +//*返回: static void getpromdata() { @@ -208,9 +208,9 @@ static void getpromdata() } //**************************************** -//*ܣMS5803ʼ -//* -//*أ +//*功能:MS5803初始化 +//*参数: +//*返回: void ms5803_init() { @@ -220,19 +220,19 @@ void ms5803_init() NSS_Select = 1; delay_tick(10); - //ʼ + //初始化代码 resetdevice(); getpromdata(); NSS_Select = 2; delay_tick(10); - //ʼ + //初始化代码 resetdevice(); getpromdata(); NSS_Select = 3; delay_tick(10); - //ʼ + //初始化代码 resetdevice(); getpromdata(); @@ -240,28 +240,28 @@ void ms5803_init() NSS_Select = 4; delay_tick(10); - //ʼ + //初始化代码 resetdevice(); getpromdata(); NSS_Select = 5; delay_tick(10); - //ʼ + //初始化代码 resetdevice(); getpromdata(); NSS_Select = 6; delay_tick(10); - //ʼ + //初始化代码 resetdevice(); getpromdata(); } //**************************************** -//*ܣȡ¶Ⱥѹ MS5803-14BA -//* -//*أ +//*功能:获取温度和压力 MS5803-14BA +//*参数: +//*返回: void start_calculation() { @@ -271,19 +271,19 @@ void start_calculation() int64_t OFF,SENS; - //תѹ + //转换压力 writecmd(CD1_256); - delay_ms(1); //ʱ1ms + delay_ms(1); //必须延时1ms readcmddata(ADC_Read,3); D1 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0]; - //ת¶ + //转换温度 writecmd(CD2_256); - delay_ms(1); //ʱ1ms + delay_ms(1); //必须延时1ms readcmddata(ADC_Read,3); D2 = (aRxBuffer[2] * pow(2,16)) + (aRxBuffer[1] * pow(2,8)) + aRxBuffer[0]; - //¶ + //计算温度 dT = D2 - (PROMData.C5[NSS_Select] * pow(2,8)); if(dT > 16777216) @@ -297,7 +297,7 @@ void start_calculation() TEMP = 2000 + ((((long long)dT) * PROMData.C6[NSS_Select]) / pow(2,23)); - //ѹ + //计算压力 OFF = (PROMData.C2[NSS_Select] * pow(2,16)) + ((((long long)dT) * PROMData.C4[NSS_Select]) / pow(2,7)); if(OFF > 51538821120) { @@ -364,7 +364,7 @@ void ms5803_task(void) NSS_Select = 1; } start_calculation(); - InputReg[NSS_Select + 12] = CurrentPress / 10;//ѹݴ + InputReg[NSS_Select + 12] = CurrentPress / 10;//压力数据存入 NSS_Select++; } diff --git a/modbus/Src/modbus.c b/modbus/Src/modbus.c index e80fdf0..c84d9f5 100644 --- a/modbus/Src/modbus.c +++ b/modbus/Src/modbus.c @@ -1,17 +1,17 @@ #include "modbus.h" -uint8_t CoilState[(MAX_COIL_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00}; //ȦĴ -uint8_t DisState[(MAX_DIS_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00,0x00}; //ɢĴ -uint16_t InputReg[MAX_INPUT_REG_NUM] = {0x0000,0x0000,0x0000,0x0000}; //Ĵ -uint16_t HoldReg[MAX_HOLD_REG_NUM] = {0,0,0,0x0064}; //ּĴ +uint8_t CoilState[(MAX_COIL_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00}; //线圈寄存器 +uint8_t DisState[(MAX_DIS_NUM + 7) / 8] = {0x00,0x00,0x00,0x00,0x00,0x00}; //离散量寄存器 +uint16_t InputReg[MAX_INPUT_REG_NUM] = {0x0000,0x0000,0x0000,0x0000}; //输入寄存器 +uint16_t HoldReg[MAX_HOLD_REG_NUM] = {0,0,0,0x0064}; //保持寄存器 Var_Reg SamVarReg; /******************************************************************************* - ModbusCRC16 - CRCУ - ptr--Уָ len--Уݳ - ֵ CRCУ룬˫ֽ +函数名称 : ModbusCRC16 +功 能 : CRC校验 +参 数 : ptr--校验数组指针 len--校验数据长度 +返 回 值 : CRC校验码,双字节 *******************************************************************************/ uint16_t ModbusCRC16(uint8_t *ptr, uint16_t len) { @@ -70,10 +70,10 @@ void GetOneDisInputVal(uint16_t wDisInputAddr, uint8_t *pDisInputVal) } /******************************************************************************* - GetHoldRegData - ȡRegAdd - u16 RegAdd - ֵ ֽڼĴ +函数名称 : GetHoldRegData +功 能 : 获取RegAdd的数据 +参 数 : u16 RegAdd +返 回 值 : 两字节寄存器数据 *******************************************************************************/ uint16_t GetHoldRegData(uint16_t RegAdd) { @@ -85,10 +85,10 @@ uint16_t GetHoldRegData(uint16_t RegAdd) } /******************************************************************************* - GetInputRegData - ȡRegAdd - u16 RegAdd - ֵ ֽڼĴ +函数名称 : GetInputRegData +功 能 : 获取RegAdd的数据 +参 数 : u16 RegAdd +返 回 值 : 两字节寄存器数据 *******************************************************************************/ uint16_t GetInputRegData(uint16_t RegAdd) { @@ -100,10 +100,10 @@ uint16_t GetInputRegData(uint16_t RegAdd) } /******************************************************************************* - : WriteHoldRegData - : дıּĴ - : u16 StartAdd - ֵ : +函数名称 : WriteHoldRegData +功 能 : 保存写入的保持寄存器数据 +参 数 : u16 StartAdd +返 回 值 : 无 *******************************************************************************/ void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData) { @@ -111,10 +111,10 @@ void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData) } /******************************************************************************* - : WriteOneCoilData - : дȦĴ - : u16 StartAdd - ֵ : +函数名称 : WriteOneCoilData +功 能 : 保存写入的线圈寄存器数据 +参 数 : u16 StartAdd +返 回 值 : 无 *******************************************************************************/ void WriteOneCoilData(uint16_t wRegAddr, uint16_t RegData) { diff --git a/modbus/Src/modbus_rtu.c b/modbus/Src/modbus_rtu.c index 5c506c4..abf3ef1 100644 --- a/modbus/Src/modbus_rtu.c +++ b/modbus/Src/modbus_rtu.c @@ -2,49 +2,49 @@ void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode); -uint8_t uart1_rx_buf[UART1_RXSIZE]; //ݻ -uint8_t uart1_tx_buf[UART1_TXSIZE]; //ݻ +uint8_t uart1_rx_buf[UART1_RXSIZE]; //发送数据缓冲数组 +uint8_t uart1_tx_buf[UART1_TXSIZE]; //接收数据缓冲数据 void modbus_rtu_init(void) { - MODBUS_UART.rx_buf = uart1_rx_buf; //ݱʼ + MODBUS_UART.rx_buf = uart1_rx_buf; //接收数据变量初始化 MODBUS_UART.rx_buf_cnt = 0; MODBUS_UART.rx_size = 0; MODBUS_UART.rx_flag = 0; - MODBUS_UART.tx_buf = uart1_tx_buf; //ݱʼ + MODBUS_UART.tx_buf = uart1_tx_buf; //发送数据变量初始化 MODBUS_UART.tx_buf_cnt = UART1_TXSIZE; MODBUS_UART.tx_size = 0; - HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); //ж - __HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE); //ֶ + HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); //开启接收中断 + __HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE); //手动添加 HAL_TIM_Base_Start_IT(&MODBUS_HTIM); } void modbus_rx_cb(void) { - if(uart1.rx_buf_cnt >= UART1_RXSIZE-1) //ޣ + if(uart1.rx_buf_cnt >= UART1_RXSIZE-1) //接收数据量超限,错误 { MODBUS_UART.rx_buf_cnt = 0; memset(MODBUS_UART.rx_buf, 0x00, sizeof(&MODBUS_UART.rx_buf)); - HAL_UART_Transmit(&MODBUS_HUART, (uint8_t *)"", 10, 0xFFFF); + HAL_UART_Transmit(&MODBUS_HUART, (uint8_t *)"数据溢出", 10, 0xFFFF); } - else // + else //接收正常 { - uart1.rx_buf[MODBUS_UART.rx_buf_cnt++] = RxBuffer; //ݴ洢rx_buf + uart1.rx_buf[MODBUS_UART.rx_buf_cnt++] = RxBuffer; //接收数据存储到rx_buf HAL_TIM_Base_Stop_IT(&MODBUS_HTIM); __HAL_TIM_SET_COUNTER(&MODBUS_HTIM, 0); - HAL_TIM_Base_Start_IT(&MODBUS_HTIM); //ʱ7ļֵ¼ + HAL_TIM_Base_Start_IT(&MODBUS_HTIM); //将定时器7的计数值清零后重新计数 } HAL_UART_Receive_IT(&MODBUS_HUART, (uint8_t *)&RxBuffer, 1); } /******************************************************************************* - ReadCoilStateFUNC - :0x01,ȡȦ - - ֵ -*:[Ӳַ][01][Ȧʼַ][Ȧʼַ][Ȧ][Ȧ][CRC][CRC] -*:[Ӳַ][01][ֽڳ][Ȧֵ][Ȧֵ][Ȧֵ][CRC][CRC] +函数名称 : ReadCoilStateFUNC +功 能 : 功能码:0x01,读取线圈 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][01][线圈起始地址高][线圈起始地址低][线圈数量高][线圈数量低][CRC低][CRC高] +*返回:[硬件地址][01][字节长度][线圈值][线圈值][线圈值][CRC低][CRC高] *******************************************************************************/ void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -52,15 +52,15 @@ void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t i,k,uCommIndexNum = 0,uByteCount,uCoilVal,uErrorCode,uExit = 0; uint8_t upTxdbuf[100] = {0}; - wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡȦʼַ - wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȦ + wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址 + wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM)) { if(((wCoilStartAddr <= COIL_ADD_MAX)) && (wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) && { - uByteCount = (wCoilNum + 7) / 8; //ֽڸ + uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数 upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS; upTxdbuf[uCommIndexNum ++] = ReadCoilState; @@ -116,12 +116,12 @@ void readcoilstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - ReadDisInputStateFUNC - :0x02,ȡɢ - - ֵ -*:[Ӳַ][02][ɢʼַ][ɢʼַ][ɢ][ɢ][CRC][CRC] -*:[Ӳַ][02][ֽڳ][ɢֵ][ɢֵ][ɢֵ][CRC][CRC] +函数名称 : ReadDisInputStateFUNC +功 能 : 功能码:0x02,读取离散量 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][02][离散量起始地址高][离散量起始地址低][离散量数量高][离散量数量低][CRC低][CRC高] +*返回:[硬件地址][02][字节长度][离散量值][离散量值][离散量值][CRC低][CRC高] *******************************************************************************/ void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -129,15 +129,15 @@ void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t i,k,uCommIndexNum = 0,uByteCount,uDisVal,uErrorCode,uExit = 0; uint8_t upTxdbuf[100]; - wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡɢʼַ - wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡɢ + wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址 + wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数 if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM)) { if(((wDisStartAddr <= DIS_ADD_MAX)) && (wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) && { - uByteCount = (wDisNum + 7) / 8; //ֽڸ + uByteCount = (wDisNum + 7) / 8; //返回数据字节个数 upTxdbuf[uCommIndexNum ++] = LOCAL_ADDRESS; upTxdbuf[uCommIndexNum ++] = ReadDisInputState; @@ -193,12 +193,12 @@ void readdisinputstate_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - ReadHoldRegFUNC - :0x03,ȡּĴ - - ֵ -*:[Ӳַ][03][ʼַ][ʼַ][ܼĴ][ܼĴ][CRC][CRC] -*:[Ӳַ][03][ֽ][Ĵ0][Ĵ0][Ĵ1][Ĵ1][Ĵn][Ĵn][CRC][CRC] +函数名称 : ReadHoldRegFUNC +功 能 : 功能码:0x03,读取保持寄存器 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高] +*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高] *******************************************************************************/ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -208,8 +208,8 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴʼַ - wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȡĴ + wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 + wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 if((wRegLen >= 0x01) && (wRegLen <= MAX_HOLD_REG_NUM)) { @@ -222,15 +222,15 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) for(i = 0; i < wRegLen; i++) { - //ȡ16λݲ + //获取16位数据并返回 wRegValue = GetHoldRegData(wRegStartAdd + i); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); } CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16ֽǰ - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16ֽں + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前 + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后 MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size); @@ -252,12 +252,12 @@ void readholdreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - ReadInputRegFUNC - :0x04,ȡĴ - - ֵ -*:[Ӳַ][04][ʼַ][ʼַ][ܼĴ][ܼĴ][ CRC ][ CRC ] -*:[Ӳַ][04][ ֽ ][Ĵ0 ][ Ĵ0 ][ Ĵ1 ][ Ĵ1 ][ Ĵn ][ Ĵn ][ CRC ][ CRC ] +函数名称 : ReadInputRegFUNC +功 能 : 功能码:0x04,读取输入寄存器 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][04][起始地址高][起始地址低][总寄存器数高][总寄存器数低][ CRC低 ][ CRC高 ] +*返回:[硬件地址][04][ 字节数 ][寄存器0高 ][ 寄存器0低 ][ 寄存器1高 ][ 寄存器1低 ][ 寄存器n高 ][ 寄存器n低 ][ CRC低 ][ CRC高 ] *******************************************************************************/ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -267,8 +267,8 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴʼַ - wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȡĴ + wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 + wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 if((wRegLen >= 0x01) && (wRegLen <= MAX_INPUT_REG_NUM)) { @@ -281,15 +281,15 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) for(i = 0; i < wRegLen; i++) { - //ȡ16λݲ + //获取16位数据并返回 wRegValue = GetInputRegData(wRegStartAdd + i); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); } CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16ֽǰ - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16ֽں + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前 + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后 MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size); @@ -311,12 +311,12 @@ void readinputreg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteSingleRegFUNC - :0x06 Ԥ(д)Ĵ - - ֵ -*:[Ӳַ][06][Ĵַ][Ĵַ][Ĵֵ][Ĵֵ][CRC][CRC] -*:[Ӳַ][06][Ĵַ][Ĵַ][Ĵֵ][Ĵֵ][CRC][CRC] +函数名称 : WriteSingleRegFUNC +功 能 : 功能码:0x06 预设(写)单寄存器 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] +*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] *******************************************************************************/ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -326,8 +326,8 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴַ - wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡ + wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 + wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据 if((wRegAddr <= HOLD_REG_ADD_MAX))//(wRegAddr >= HOLD_REG_ADD_MIN) && { @@ -339,8 +339,8 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) uCommIndexNum += 4; CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16ֽǰ - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16ֽں + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); // crc16低字节在前 + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); // crc16高字节在后 MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); memcpy(MODBUS_UART.tx_buf, upTxdbuf, MODBUS_UART.tx_size); @@ -356,10 +356,10 @@ void writesinglereg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteMultiRegFUNC - :0x10 дּĴ - - ֵ +函数名称 : WriteMultiRegFUNC +功 能 : 功能码:0x10 写多个保持寄存器 +参 数 : 无 +返 回 值 : 无 *******************************************************************************/ void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -369,9 +369,9 @@ void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴַ - wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡĴ - uByteNum = upRxdbuf[4]; //ȡֽ + wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 + wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量 + uByteNum = upRxdbuf[4]; //获取字节数 if((wRegNum >= 0x01) && (wRegNum <= MAX_HOLD_REG_NUM) && (uByteNum == wRegNum * 2)) { @@ -413,10 +413,10 @@ void writemultireg_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteSingleCoilFUNC - :0x05 дȦĴ - - ֵ +函数名称 : WriteSingleCoilFUNC +功 能 : 功能码:0x05 写单个线圈寄存器 +参 数 : 无 +返 回 值 : 无 *******************************************************************************/ void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -424,8 +424,8 @@ void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t uCommIndexNum = 0, uErrorCode; uint8_t upTxdbuf[100]; - wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡȦַ - wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȦ + wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 + wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据 if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00)) { @@ -462,12 +462,12 @@ void writesinglecoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteMultiCoilFUNC - :0x0F,дȦ - - ֵ -*:[Ӳַ][0F][ʼַ][ʼַ][Ȧ][Ȧ][ֽ][Ȧֵ][CRC][CRC] -*:[Ӳַ][0F][ʼַ][ʼַ][Ȧ][Ȧ][CRC][CRC] +函数名称 : WriteMultiCoilFUNC +功 能 : 功能码:0x0F,写多个线圈 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][字节数][线圈值][CRC低][CRC高] +*返回:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][CRC低][CRC高] *******************************************************************************/ void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -475,9 +475,9 @@ void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t i,k,uCommIndexNum = 0,uByteNum,uByteVal,uExit = 0,uErrorCode; uint8_t upTxdbuf[100]; - wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡȦַ - wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȦ - uByteNum = upRxdbuf[4]; //ȡֽ + wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 + wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 + uByteNum = upRxdbuf[4]; //获取字节数 if((wCoilNum >= 0x01) && (wCoilNum <= MAX_COIL_NUM) && (wCoilNum <= 8 * uByteNum)) { @@ -539,11 +539,11 @@ void writemulticoil_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) /******** *********************************************************************** - : MODBUS_ERRFunction - : Ӧָ - : - ֵ: -쳣 = +0x80 +函数名称 : MODBUS_ERRFunction +功 能: 错误回应指令 +参 数: 无 +返 回 值: 无 +异常功能码 = 功能码+0x80 *******************************************************************************/ void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode) { @@ -556,7 +556,7 @@ void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode) upTxdbuf[uCommIndexNum ++] = uErrorCode; CRC16Temp = ModbusCRC16(upTxdbuf, uCommIndexNum); - upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); //crc16ֽǰ + upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp & 0xFF); //crc16低字节在前 upTxdbuf[uCommIndexNum ++] = (uint8_t)(CRC16Temp >> 8); MODBUS_UART.tx_size = (uCommIndexNum <= MODBUS_UART.tx_buf_cnt ? uCommIndexNum : MODBUS_UART.tx_buf_cnt); @@ -565,10 +565,10 @@ void modbus_errfunction_rtu(uint8_t uCmdCode, uint8_t uErrorCode) } /******************************************************************************* - Modbus_Analysis - CRCУ - ptr--Уָ len--Уݳ - ֵ CRCУ룬˫ֽ +函数名称 : Modbus_Analysis +功 能 : CRC校验 +参 数 : ptr--校验数组指针 len--校验数据长度 +返 回 值 : CRC校验码,双字节 *******************************************************************************/ void modbus_analysis_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -579,45 +579,45 @@ void modbus_analysis_rtu(uint8_t * upRxdbuf, uint16_t wRxdLen) uSlaveAdd = upRxdbuf[0]; uCmdCode = upRxdbuf[1]; - // ӻַΪַǹ㲥֡ + // 从机地址为本机地址或者是广播帧 if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS)) { switch(uCmdCode) { case ReadCoilState: - readcoilstate_rtu(upRxdbuf + 2, wRxdLen - 2); // Ȧ״̬, read&write binary + readcoilstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读线圈状态, read&write binary break; case ReadDisInputState: - readdisinputstate_rtu(upRxdbuf + 2, wRxdLen - 2); // ɢ״̬, only read + readdisinputstate_rtu(upRxdbuf + 2, wRxdLen - 2); // 读离散输入状态, only read break; case ReadHoldReg: - readholdreg_rtu(upRxdbuf + 2, wRxdLen - 2); // ȡּĴ, read&write u16 + readholdreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取保持寄存器, read&write u16 break; case ReadInputReg: - readinputreg_rtu(upRxdbuf + 2, wRxdLen - 2); // ȡĴ + readinputreg_rtu(upRxdbuf + 2, wRxdLen - 2); // 读取输入寄存器 break; case WriteSingleReg: - writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // дĴ + writesinglereg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个寄存器 break; case WriteMultiCoil: - writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // дȦ + writemulticoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个线圈 break; case WriteMultiReg: - writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // дĴ + writemultireg_rtu(upRxdbuf + 2, wRxdLen - 2); // 写多个寄存器 break; case WriteSingleCoil: - writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // дȦ + writesinglecoil_rtu(upRxdbuf + 2, wRxdLen - 2); // 写单个线圈 break; default: - modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 봦 + modbus_errfunction_rtu(upRxdbuf[1], 0x01); // 错误码处理 break; } } @@ -629,18 +629,18 @@ void modbus_process_rtu(void) uint16_t wFrameLen = 0; uint16_t wFrameCRC, wCalCRC; - pFrame = MODBUS_UART.rx_buf; // ʼַ - wFrameLen = MODBUS_UART.rx_size; // ݳ + pFrame = MODBUS_UART.rx_buf; // 接收数据起始地址 + wFrameLen = MODBUS_UART.rx_size; // 接收数据长度 - if(wFrameLen < 2) return; // ݳȲЧֵ + if(wFrameLen < 2) return; // 数据长度不是有效值 - // ȡ֡еУ + // 获取接收数据帧中的校验和 wFrameCRC = MAKEWORD(pFrame[wFrameLen - 2], pFrame[wFrameLen - 1]); - // յݵУ + // 计算接收到的数据的校验和 wCalCRC = ModbusCRC16(pFrame, wFrameLen - 2); if(wFrameCRC != wCalCRC) return; - modbus_analysis_rtu(MODBUS_UART.rx_buf, MODBUS_UART.rx_size);// Э鴦 + modbus_analysis_rtu(MODBUS_UART.rx_buf, MODBUS_UART.rx_size);// 协议处理 } diff --git a/modbus/Src/modbus_tcp.c b/modbus/Src/modbus_tcp.c index 0a4819a..0b358da 100644 --- a/modbus/Src/modbus_tcp.c +++ b/modbus/Src/modbus_tcp.c @@ -6,12 +6,12 @@ void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode); /******************************************************************************* - ReadCoilStateFUNC - :0x01,ȡȦ - - ֵ -*:[Ӳַ][01][Ȧʼַ][Ȧʼַ][Ȧ][Ȧ][CRC][CRC] -*:[Ӳַ][01][ֽڳ][Ȧֵ][Ȧֵ][Ȧֵ][CRC][CRC] +函数名称 : ReadCoilStateFUNC +功 能 : 功能码:0x01,读取线圈 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][01][线圈起始地址高][线圈起始地址低][线圈数量高][线圈数量低][CRC低][CRC高] +*返回:[硬件地址][01][字节长度][线圈值][线圈值][线圈值][CRC低][CRC高] *******************************************************************************/ void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -19,15 +19,15 @@ void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t i,k,uCommIndexNum = 0,uByteCount,uCoilVal,uErrorCode,uExit = 0; uint8_t upTxdbuf[100] = {0}; - wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡȦʼַ - wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȦ + wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈起始地址 + wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 if((wCoilNum >= 0x0001) || (wCoilNum <= MAX_COIL_NUM)) { if(((wCoilStartAddr <= COIL_ADD_MAX)) && (wCoilNum + wCoilStartAddr <= COIL_ADD_MAX + 1))//(wCoilStartAddr >= COIL_ADD_MIN) && { - uByteCount = (wCoilNum + 7) / 8; //ֽڸ + uByteCount = (wCoilNum + 7) / 8; //返回数据字节个数 upTxdbuf[uCommIndexNum ++] = 0x00; upTxdbuf[uCommIndexNum ++] = 0x01; @@ -84,12 +84,12 @@ void readcoilstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - ReadDisInputStateFUNC - :0x02,ȡɢ - - ֵ -*:[Ӳַ][02][ɢʼַ][ɢʼַ][ɢ][ɢ][CRC][CRC] -*:[Ӳַ][02][ֽڳ][ɢֵ][ɢֵ][ɢֵ][CRC][CRC] +函数名称 : ReadDisInputStateFUNC +功 能 : 功能码:0x02,读取离散量 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][02][离散量起始地址高][离散量起始地址低][离散量数量高][离散量数量低][CRC低][CRC高] +*返回:[硬件地址][02][字节长度][离散量值][离散量值][离散量值][CRC低][CRC高] *******************************************************************************/ void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -97,15 +97,15 @@ void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t i,k,uCommIndexNum = 0,uByteCount,uDisVal,uErrorCode,uExit = 0; uint8_t upTxdbuf[100]; - wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡɢʼַ - wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡɢ + wDisStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取离散量起始地址 + wDisNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取离散量个数 if((wDisNum >= 0x0001) || (wDisNum <= MAX_DIS_NUM)) { if(((wDisStartAddr <= DIS_ADD_MAX)) && (wDisNum + wDisStartAddr <= DIS_ADD_MAX + 1))//(wDisStartAddr >= DIS_ADD_MIN) && { - uByteCount = (wDisNum + 7) / 8; //ֽڸ + uByteCount = (wDisNum + 7) / 8; //返回数据字节个数 upTxdbuf[uCommIndexNum ++] = 0x00; upTxdbuf[uCommIndexNum ++] = 0x01; @@ -162,12 +162,12 @@ void readdisinputstate_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - ReadHoldRegFUNC - :0x03,ȡּĴ - - ֵ -*:[Ӳַ][03][ʼַ][ʼַ][ܼĴ][ܼĴ][CRC][CRC] -*:[Ӳַ][03][ֽ][Ĵ0][Ĵ0][Ĵ1][Ĵ1][Ĵn][Ĵn][CRC][CRC] +函数名称 : ReadHoldRegFUNC +功 能 : 功能码:0x03,读取保持寄存器 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高] +*返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高] *******************************************************************************/ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -177,8 +177,8 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴʼַ - wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȡĴ + wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 + wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 if((wRegLen >= 0x01) && (wRegLen <= MAX_HOLD_REG_NUM)) { @@ -197,7 +197,7 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) for(i = 0; i < wRegLen; i++) { - //ȡ16λݲ + //获取16位数据并返回 wRegValue = GetHoldRegData(wRegStartAdd + i); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); @@ -223,12 +223,12 @@ void readholdreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - ReadInputRegFUNC - :0x04,ȡĴ - - ֵ -*:[Ӳַ][04][ʼַ][ʼַ][ܼĴ][ܼĴ][ CRC ][ CRC ] -*:[Ӳַ][04][ ֽ ][Ĵ0 ][ Ĵ0 ][ Ĵ1 ][ Ĵ1 ][ Ĵn ][ Ĵn ][ CRC ][ CRC ] +函数名称 : ReadInputRegFUNC +功 能 : 功能码:0x04,读取输入寄存器 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][04][起始地址高][起始地址低][总寄存器数高][总寄存器数低][ CRC低 ][ CRC高 ] +*返回:[硬件地址][04][ 字节数 ][寄存器0高 ][ 寄存器0低 ][ 寄存器1高 ][ 寄存器1低 ][ 寄存器n高 ][ 寄存器n低 ][ CRC低 ][ CRC高 ] *******************************************************************************/ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -238,8 +238,8 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴʼַ - wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȡĴ + wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器起始地址 + wRegLen = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取读取寄存器长度 if((wRegLen >= 0x01) && (wRegLen <= MAX_INPUT_REG_NUM)) { @@ -258,7 +258,7 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) for(i = 0; i < wRegLen; i++) { - //ȡ16λݲ + //获取16位数据并返回 wRegValue = GetInputRegData(wRegStartAdd + i); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue >> 8); upTxdbuf[uCommIndexNum ++] = (uint8_t)(wRegValue & 0xFF); @@ -284,12 +284,12 @@ void readinputreg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteSingleRegFUNC - :0x06 Ԥ(д)Ĵ - - ֵ -*:[Ӳַ][06][Ĵַ][Ĵַ][Ĵֵ][Ĵֵ][CRC][CRC] -*:[Ӳַ][06][Ĵַ][Ĵַ][Ĵֵ][Ĵֵ][CRC][CRC] +函数名称 : WriteSingleRegFUNC +功 能 : 功能码:0x06 预设(写)单寄存器 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] +*返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] *******************************************************************************/ void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -299,8 +299,8 @@ void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴַ - wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡ + wRegAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 + wRegValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取数据 if((wRegAddr <= HOLD_REG_ADD_MAX))//(wRegAddr >= HOLD_REG_ADD_MIN) && { @@ -331,10 +331,10 @@ void writesinglereg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteMultiRegFUNC - :0x10 дּĴ - - ֵ +函数名称 : WriteMultiRegFUNC +功 能 : 功能码:0x10 写多个保持寄存器 +参 数 : 无 +返 回 值 : 无 *******************************************************************************/ void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -344,9 +344,9 @@ void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) if(upRxdbuf == NULL) return; - wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡĴַ - wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡĴ - uByteNum = upRxdbuf[4]; //ȡֽ + wRegStartAdd = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取寄存器地址 + wRegNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取寄存器数量 + uByteNum = upRxdbuf[4]; //获取字节数 if((wRegNum >= 0x01) && (wRegNum <= MAX_HOLD_REG_NUM) && (uByteNum == wRegNum * 2)) { @@ -390,10 +390,10 @@ void writemultireg_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteSingleCoilFUNC - :0x05 дȦĴ - - ֵ +函数名称 : WriteSingleCoilFUNC +功 能 : 功能码:0x05 写单个线圈寄存器 +参 数 : 无 +返 回 值 : 无 *******************************************************************************/ void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -401,8 +401,8 @@ void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t uCommIndexNum = 0, uErrorCode; uint8_t upTxdbuf[100]; - wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡȦַ - wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȦ + wCoilAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 + wCoilValue = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈数据 if((wCoilValue == 0x0000) || (wCoilValue == 0xFF00)) { @@ -441,12 +441,12 @@ void writesinglecoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - WriteMultiCoilFUNC - :0x0F,дȦ - - ֵ -*:[Ӳַ][0F][ʼַ][ʼַ][Ȧ][Ȧ][ֽ][Ȧֵ][CRC][CRC] -*:[Ӳַ][0F][ʼַ][ʼַ][Ȧ][Ȧ][CRC][CRC] +函数名称 : WriteMultiCoilFUNC +功 能 : 功能码:0x0F,写多个线圈 +参 数 : 无 +返 回 值 : 无 +*发送:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][字节数][线圈值][CRC低][CRC高] +*返回:[硬件地址][0F][起始地址高][起始地址低][线圈数量高][线圈数量低][CRC低][CRC高] *******************************************************************************/ void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -454,9 +454,9 @@ void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) uint8_t i,k,uCommIndexNum = 0,uByteNum,uByteVal,uExit = 0,uErrorCode; uint8_t upTxdbuf[100]; - wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //ȡȦַ - wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //ȡȦ - uByteNum = upRxdbuf[4]; //ȡֽ + wCoilStartAddr = MAKEWORD(upRxdbuf[1], upRxdbuf[0]); //获取线圈地址 + wCoilNum = MAKEWORD(upRxdbuf[3], upRxdbuf[2]); //获取线圈个数 + uByteNum = upRxdbuf[4]; //获取字节数 if((wCoilNum >= 0x01) && (wCoilNum <= MAX_COIL_NUM) && (wCoilNum <= 8 * uByteNum)) { @@ -519,11 +519,11 @@ void writemulticoil_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) } /******************************************************************************* - : MODBUS_ERRFunction - : Ӧָ - : - ֵ: -쳣 = +0x80 +函数名称 : MODBUS_ERRFunction +功 能: 错误回应指令 +参 数: 无 +返 回 值: 无 +异常功能码 = 功能码+0x80 *******************************************************************************/ void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode) { @@ -546,10 +546,10 @@ void modbus_errfunction_tcp(uint8_t uCmdCode, uint8_t uErrorCode) } /******************************************************************************* - Modbus_Analysis - CRCУ - ptr--Уָ len--Уݳ - ֵ CRCУ룬˫ֽ +函数名称 : Modbus_Analysis +功 能 : CRC校验 +参 数 : ptr--校验数组指针 len--校验数据长度 +返 回 值 : CRC校验码,双字节 *******************************************************************************/ void modbus_analysis_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) { @@ -560,45 +560,45 @@ void modbus_analysis_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen) uSlaveAdd = upRxdbuf[6]; uCmdCode = upRxdbuf[7]; - // ӻַΪַǹ㲥֡ + // 从机地址为本机地址或者是广播帧 if((uSlaveAdd == LOCAL_ADDRESS) || (uSlaveAdd == BROADCAST_ADDRESS)) { switch(uCmdCode) { case ReadCoilState: - readcoilstate_tcp(upRxdbuf + 8, wRxdLen - 8); // Ȧ״̬ + readcoilstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读线圈状态 break; case ReadDisInputState: - readdisinputstate_tcp(upRxdbuf + 8, wRxdLen - 8); // ɢ״̬ + readdisinputstate_tcp(upRxdbuf + 8, wRxdLen - 8); // 读离散输入状态 break; case ReadHoldReg: - readholdreg_tcp(upRxdbuf + 8, wRxdLen - 8); // ȡּĴ + readholdreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取保持寄存器 break; case ReadInputReg: - readinputreg_tcp(upRxdbuf + 8, wRxdLen - 8); // ȡĴ + readinputreg_tcp(upRxdbuf + 8, wRxdLen - 8); // 读取输入寄存器 break; case WriteSingleReg: - writesinglereg_tcp(upRxdbuf + 8, wRxdLen - 8); // дĴ + writesinglereg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个寄存器 break; case WriteMultiCoil: - writemulticoil_tcp(upRxdbuf + 8, wRxdLen - 8); // дȦ + writemulticoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个线圈 break; case WriteMultiReg: - writemultireg_tcp(upRxdbuf + 8, wRxdLen - 8); // дĴ + writemultireg_tcp(upRxdbuf + 8, wRxdLen - 8); // 写多个寄存器 break; case WriteSingleCoil: - writesinglecoil_tcp(upRxdbuf + 8, wRxdLen - 8); // дȦ + writesinglecoil_tcp(upRxdbuf + 8, wRxdLen - 8); // 写单个线圈 break; default: - modbus_errfunction_tcp(upRxdbuf[7], 0x01); // 봦 + modbus_errfunction_tcp(upRxdbuf[7], 0x01); // 错误码处理 break; } } @@ -609,12 +609,12 @@ void modbus_process_tcp(void) uint8_t *pFrame; uint16_t wFrameLen = 0; - pFrame = MODBUS_TCP.recv.buf; // - wFrameLen = MODBUS_TCP.recv.size; // ݳ + pFrame = MODBUS_TCP.recv.buf; // 接收数据 + wFrameLen = MODBUS_TCP.recv.size; // 接收数据长度 - if(wFrameLen < 2) return; // ݳȲЧֵ + if(wFrameLen < 2) return; // 数据长度不是有效值 - modbus_analysis_tcp(pFrame, wFrameLen); // Э鴦 + modbus_analysis_tcp(pFrame, wFrameLen); // 协议处理 } diff --git a/users/Src/adcs.c b/users/Src/adcs.c index 9bc7ee7..b80d28f 100644 --- a/users/Src/adcs.c +++ b/users/Src/adcs.c @@ -1,9 +1,9 @@ #include "adcs.h" -uint32_t ADC_ConvertedValue = 0; //ADC +uint32_t ADC_ConvertedValue = 0; //ADC数据 -short Temp = 0; //¶ +short Temp = 0; //温度 void adcs_init(void) { @@ -20,10 +20,10 @@ void analog_gather(void) if(it_10ms_flag == 1) { it_10ms_flag = 0; - mf5803_loop(); //sensor_1 and sensor_2, ѹ - adcs_data(); //λز - ads1256_get_data(); //8·ģ - ads1220_get_data(); //1&2Դ + ز + mf5803_loop(); //sensor_1 and sensor_2, 气压检测 + adcs_data(); //定位器输出回采 + ads1256_get_data(); //8路模拟输入 + ads1220_get_data(); //比例阀1&2,自带反馈 + 输出回采 } if(it_100ms_flag == 1) diff --git a/users/Src/encoder.c b/users/Src/encoder.c index 6224051..1537009 100644 --- a/users/Src/encoder.c +++ b/users/Src/encoder.c @@ -1,7 +1,7 @@ #include "encoder.h" -//ز +//编码器相关参数 int last_encode_num = 0; int curr_encode_num = 0; uint32_t encode_num = 0; @@ -9,30 +9,30 @@ int cnt_update = 152; void encoder_init(void) { - HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //ʱ1ر - __HAL_TIM_SetCounter(&htim1, 0x9718); //ʼֵһǧ - HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //ʱ1 + HAL_TIM_Encoder_Stop(&htim1, TIM_CHANNEL_ALL); //定时器1编码器关闭 + __HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万 + HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //定时器1编码器启动 last_encode_num = 0; curr_encode_num = 0; encode_num = 0; cnt_update = 152; - CoilState[3] &= 0x7F; //ʼɺȦĴ0x28 + CoilState[3] &= 0x7F; //初始化完成后线圈寄存器0x28置零 } void encoder_run(void) { - // + //编码器 last_encode_num = curr_encode_num; curr_encode_num = __HAL_TIM_GET_COUNTER(&htim1); - if((curr_encode_num - last_encode_num) < -50000) //⣬o(65535)->o(0) + if((curr_encode_num - last_encode_num) < -50000) //向上溢出检测,o(65535)->o(0) cnt_update++; - else if((curr_encode_num - last_encode_num) > 50000) //, o(0)->o(65535) + else if((curr_encode_num - last_encode_num) > 50000) //向下溢出检测, o(0)->o(65535) cnt_update--; - encode_num = curr_encode_num + cnt_update * 0xFFFF; //ؼֵ - InputReg[20] = (encode_num >> 16) & 0xffff; //32λint ֳ uint16_t16λ - InputReg[21] = encode_num & 0xffff; //32λint ֳ uint16_t16λ + encode_num = curr_encode_num + cnt_update * 0xFFFF; //编码器,返回计数脉冲值 + InputReg[20] = (encode_num >> 16) & 0xffff; //32位int 拆分成两个 uint16_t,高16位 + InputReg[21] = encode_num & 0xffff; //32位int 拆分成两个 uint16_t,低16位 } diff --git a/users/Src/gpios.c b/users/Src/gpios.c index a6c6169..4afbdba 100644 --- a/users/Src/gpios.c +++ b/users/Src/gpios.c @@ -13,9 +13,9 @@ void led_ctrl() void digital_ctrl() { - led_ctrl();//ָʾ + led_ctrl();//指示灯 - //λDO + //八位DO输出控制 PE2_DO1((GPIO_PinState)((CoilState[0]>>0)&0x01)); PE3_DO2((GPIO_PinState)((CoilState[0]>>1)&0x01)); PE4_DO3((GPIO_PinState)((CoilState[0]>>2)&0x01)); @@ -28,7 +28,7 @@ void digital_ctrl() coil1 = coil2; coil2 = CoilState[2]; - //595ʱȷݻἶڶ595оƬ + //当有595级联的时候,先发的数据会级联到第二块595芯片中 if(coil1 != coil2) { hc595_write_data(CoilState[2]); @@ -46,7 +46,7 @@ void digital_ctrl() DisState[2] = DI_NAMUR1 + DI_NAMUR2 * 2; //encoder reset - if( ((CoilState[3]>>7)&0x01) == 1 ) //CoilState[3]D7λַ0x28 + if( ((CoilState[3]>>7)&0x01) == 1 ) //CoilState[3]的D7位,地址0x28 { encoder_init(); } diff --git a/users/Src/provalctrl.c b/users/Src/provalctrl.c index d490cca..12f5c20 100644 --- a/users/Src/provalctrl.c +++ b/users/Src/provalctrl.c @@ -150,7 +150,7 @@ void analog_ctrl(void) { it_50ms_flag_pv = 0; - atm_pressure = 1000; //大气绝压更新 + atm_pressure = 1012; //大气绝压更新 //比例阀1数据更新:当前气压、当前气压百分比、百分比偏差、当前输入电流(单片机->比例阀) pv_one.current_pressure = (InputReg[16] - atm_pressure)/(float)10; //Kpa,sensor1 A口绝压转表压 diff --git a/users/Src/timer.c b/users/Src/timer.c index 72277c3..1cf7bf5 100644 --- a/users/Src/timer.c +++ b/users/Src/timer.c @@ -72,7 +72,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) } uint8_t exit_check = 0; -void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //ⲿжϣӱZ { if(GPIO_Pin == GPIO_PIN_13) { diff --git a/users/Src/uarts.c b/users/Src/uarts.c index 436ee05..68e771e 100644 --- a/users/Src/uarts.c +++ b/users/Src/uarts.c @@ -3,8 +3,8 @@ #define UART6_RX_BUFFER_SIZE 256 uint8_t UART6_RxBuffer[UART6_RX_BUFFER_SIZE]; -UART_BUF uart1; //ڽṹʵ -uint8_t RxBuffer; //м +UART_BUF uart1; //串口结构体实体 +uint8_t RxBuffer; //接收数据中间变量 #pragma import(__use_no_semihosting_swi) #pragma import(__use_no_semihosting) @@ -19,7 +19,7 @@ struct __FILE { /* standard output using printf() for debugging, no file handling */ /* is required. */ }; -/* FILE is typedef d in stdio.h. */ +/* FILE is typedef’ d in stdio.h. */ FILE __stdout; int fputc(int ch, FILE *f)