добавлен модбас (не проверено)

This commit is contained in:
2025-08-04 16:58:37 +03:00
parent 9a0af3c360
commit 4df0d28751
61 changed files with 5592 additions and 1126 deletions

File diff suppressed because one or more lines are too long

View File

@@ -11,19 +11,24 @@ Mcu.IP0=NVIC
Mcu.IP1=RCC
Mcu.IP2=SYS
Mcu.IP3=TIM2
Mcu.IPNb=4
Mcu.IP4=TIM3
Mcu.IP5=USART1
Mcu.IPNb=6
Mcu.Name=STM32F103C(8-B)Tx
Mcu.Package=LQFP48
Mcu.Pin0=PC14-OSC32_IN
Mcu.Pin1=PC15-OSC32_OUT
Mcu.Pin10=VP_TIM2_VS_ClockSourceINT
Mcu.Pin11=VP_TIM3_VS_ClockSourceINT
Mcu.Pin2=PD0-OSC_IN
Mcu.Pin3=PD1-OSC_OUT
Mcu.Pin4=PB0
Mcu.Pin5=PA13
Mcu.Pin6=PA14
Mcu.Pin7=VP_SYS_VS_Systick
Mcu.Pin8=VP_TIM2_VS_ClockSourceINT
Mcu.PinsNb=9
Mcu.Pin5=PA9
Mcu.Pin6=PA10
Mcu.Pin7=PA13
Mcu.Pin8=PA14
Mcu.Pin9=VP_SYS_VS_Systick
Mcu.PinsNb=12
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F103C8Tx
@@ -40,10 +45,14 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PB0.Locked=true
PB0.Signal=GPIO_Output
PC14-OSC32_IN.Mode=LSE-External-Oscillator
@@ -107,8 +116,14 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.TimSysFreq_Value=72000000
RCC.USBFreq_Value=72000000
RCC.VCOOutput2Freq_Value=8000000
TIM3.IPParameters=Period
TIM3.Period=7200
USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM2_VS_ClockSourceINT.Mode=Internal
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
VP_TIM3_VS_ClockSourceINT.Mode=Internal
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
board=custom

View File

@@ -28,6 +28,7 @@ typedef struct
CAN_TxHeaderTypeDef header;
uint8_t data[8];
uint32_t bitrate_bps;
uint32_t period_ms;
CAN_ErrorFlags_t errors;
}CANEmu_HandleTypeDef;

View File

@@ -65,7 +65,7 @@
/*#define HAL_SPI_MODULE_ENABLED */
/*#define HAL_SRAM_MODULE_ENABLED */
#define HAL_TIM_MODULE_ENABLED
/*#define HAL_UART_MODULE_ENABLED */
#define HAL_UART_MODULE_ENABLED
/*#define HAL_USART_MODULE_ENABLED */
/*#define HAL_WWDG_MODULE_ENABLED */

View File

@@ -34,11 +34,14 @@ extern "C" {
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_TIM2_Init(void);
void MX_TIM3_Init(void);
/* USER CODE BEGIN Prototypes */

52
Core/Inc/usart.h Normal file
View File

@@ -0,0 +1,52 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file usart.h
* @brief This file contains all the function prototypes for
* the usart.c file
******************************************************************************
* @attention
*
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USART_H__
#define __USART_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern UART_HandleTypeDef huart1;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_USART1_UART_Init(void);
/* USER CODE BEGIN Prototypes */
/* USER CODE END Prototypes */
#ifdef __cplusplus
}
#endif
#endif /* __USART_H__ */

116
Core/Modbus/crc_algs.c Normal file
View File

@@ -0,0 +1,116 @@
#include "crc_algs.h"
uint32_t CRC_calc;
uint32_t CRC_ref;
//uint16_t CRC_calc;
//uint16_t CRC_ref;
// left this global for debug
uint8_t uchCRCHi = 0xFF;
uint8_t uchCRCLo = 0xFF;
unsigned uIndex;
uint32_t crc32(uint8_t *data, uint32_t data_size)
{
static const unsigned int crc32_table[] =
{
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};
unsigned int crc = 0xFFFFFFFF;
while (data_size--)
{
crc = (crc >> 8) ^ crc32_table[(crc ^ *data) & 255];
data++;
}
return crc^0xFFFFFFFF;
}
uint16_t crc16(uint8_t *data, uint32_t data_size)
{
/*Table of CRC values for high order byte*/
static unsigned char auchCRCHi[]=
{
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
};
/*Table of CRC values for low order byte*/
static char auchCRCLo[] =
{
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,
0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,
0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,
0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,
0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,
0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,
0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,
0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,
0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,
0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,
0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,
0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,
0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40,
};
uchCRCHi = 0xFF;
uchCRCLo = 0xFF;
/* CRC Generation Function */
while( data_size--) /* pass through message buffer */
{
uIndex = uchCRCHi ^ *data++; /* calculate the CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];
uchCRCLo = auchCRCLo[uIndex];
}
return uchCRCHi | uchCRCLo<<8;
}

9
Core/Modbus/crc_algs.h Normal file
View File

@@ -0,0 +1,9 @@
#include "modbus_config.h"
// extern here to use in bootloader.c
extern uint32_t CRC_calc;
extern uint32_t CRC_ref;
uint16_t crc16(uint8_t *data, uint32_t data_size);
uint32_t crc32(uint8_t *data, uint32_t data_size);

951
Core/Modbus/modbus.c Normal file
View File

@@ -0,0 +1,951 @@
/**
**************************************************************************
* @file modbus.c
* @brief Модуль для реализации MODBUS.
**************************************************************************
* @details Файл содержит реализацию функций работы с Modbus, включая:
* - доступ к coils и registers;
* - обработку команд протокола;
* - взаимодействие с RS (UART);
* - инициализацию.
*
* @section Функции и макросы
*
* ### Доступ к coils:
* - MB_Set_Coil_Local() — Установить coil по локальному адресу.
* - MB_Reset_Coil_Local() — Сбросить coil по локальному адресу.
* - MB_Toogle_Coil_Local() — Инвертировать coil по локальному адресу.
* - MB_Read_Coil_Local() — Прочитать coil по локальному адресу.
* - MB_Write_Coil_Global() — Установить/сбросить coil по глобальному адресу.
* - MB_Read_Coil_Global() — Прочитать coil по глобальному адресу.
*
* ### Обработка команд Modbus:
* - MB_DefineRegistersAddress() — Определить начальный адрес регистра.
* - MB_DefineCoilsAddress() — Определить начальный адрес coils.
* - MB_Check_Address_For_Arr() — Проверить, принадлежит ли адрес массиву.
* - Основные команды Modbus:
* - MB_Read_Coils()
* - MB_Read_Hold_Regs()
* - MB_Write_Single_Coil()
* - MB_Write_Miltuple_Coils()
* - MB_Write_Miltuple_Regs()
*
* ### Функции для работы с RS (UART):
* - RS_Parse_Message() / RS_Collect_Message() — Парсинг и сборка сообщения.
* - RS_Response() — Отправка ответа.
* - RS_Define_Size_of_RX_Message() — Определение размера принимаемого сообщения.
* - RS_Init() — Инициализация UART.
*
* ### Инициализация:
* - MODBUS_FirstInit() — Инициализация модуля Modbus.
*
* @section Структура данных Modbus
*
* #### Holding/Input Registers:
* - Регистры — 16-битные слова. Доступ к регистрам осуществляется через указатель.
* Таким образом, сами регистры могут представлять собой как массив так и структуру.
*
* #### Coils:
* - Coils — это биты, упакованные в 16-битные слова. Доступ к коилам осуществляется через указатель.
* Таким образом, сами коилы могут представлять собой как массив так и структуру.
*
* @section Инструкция по подключению
* Для корректной работы надо подключить обработчики RS_UART_Handler(), RS_TIM_Handler(),
* в соответствубщие низкоуровневые прерывания UART_IRQHandler, TIM_IRQHandler. После HAL'овского обработчика
*
* Также необходимо в modbus_config.h настроить дефайны для нужной работы UART
* После для запуска Modbus:
* @verbatim
//----------------Прием модбас----------------//
#include "rs_message.h"
MODBUS_FirstInit();
RS_Receive_IT(&hmodbus1, &MODBUS_MSG);
* @endverbatim
*
******************************************************************************/
#include "rs_message.h"
uint32_t dbg_temp, dbg_temp2, dbg_temp3; // for debug
/* MODBUS HANDLES */
extern UART_HandleTypeDef rs_huart;
extern TIM_HandleTypeDef rs_htim;
RS_HandleTypeDef hmodbus1;
/* DEFINE REGISTERS/COILS */
MB_DeviceIdentificationTypeDef MB_INFO;
MB_DataStructureTypeDef MB_DATA;
RS_MsgTypeDef MODBUS_MSG;
//-------------------------------------------------------------------
//-----------------------------FOR USER------------------------------
/**
* @brief First set up of MODBUS.
* @details Первый инит модбас. Заполняет структуры и инициализирует таймер и юарт для общения по модбас.
* @note This called from main
*/
void MODBUS_FirstInit(void)
{
MB_DevoceInentificationInit();
//-----------SETUP MODBUS-------------
// set up modbus: MB_RX_Size_NotConst and Timeout enable
hmodbus1.ID = MODBUS_DEVICE_ID;
hmodbus1.sRS_Timeout = MODBUS_TIMEOUT;
hmodbus1.sRS_Mode = SLAVE_ALWAYS_WAIT;
hmodbus1.sRS_RX_Size_Mode = RS_RX_Size_NotConst;
// INIT
hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &rs_huart, &rs_htim, 0);
RS_EnableReceive();
}
/**
* @brief Set or Reset Coil at its global address.
* @param Addr - адрес коила.
* @param WriteVal - Что записать в коил: 0 или 1.
* @return ExceptionCode - Код исключения если коила по адресу не существует, и NO_ERRORS если все ок.
*
* @details Позволяет обратиться к любому коилу по его глобальному адрессу.
Вне зависимости от того как коилы размещены в памяти.
*/
MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal)
{
//---------CHECK FOR ERRORS----------
MB_ExceptionTypeDef Exception = NO_ERRORS;
uint16_t *coils;
uint16_t start_shift = 0; // shift in coils register
//------------WRITE COIL-------------
Exception = MB_DefineCoilsAddress(&coils, Addr, 1, &start_shift, 1);
if(Exception == NO_ERRORS)
{
switch(WriteVal)
{
case SET_COIL:
*coils |= (1<<start_shift);
break;
case RESET_COIL:
*coils &= ~(1<<start_shift);
break;
case TOOGLE_COIL:
*coils ^= (1<<start_shift);
break;
}
}
return Exception;
}
/**
* @brief Read Coil at its global address.
* @param Addr - адрес коила.
* @param Exception - Указатель на переменную для кода исключения, в случа неудачи при чтении.
* @return uint16_t - Возвращает весь регистр с маской на запрошенном коиле.
*
* @details Позволяет обратиться к любому коилу по его глобальному адрессу.
Вне зависимости от того как коилы размещены в памяти.
*/
uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception)
{
//---------CHECK FOR ERRORS----------
MB_ExceptionTypeDef Exception_tmp;
if(Exception == NULL) // if exception is not given to func fill it
Exception = &Exception_tmp;
uint16_t *coils;
uint16_t start_shift = 0; // shift in coils register
//------------READ COIL--------------
*Exception = MB_DefineCoilsAddress(&coils, Addr, 1, &start_shift, 0);
if(*Exception == NO_ERRORS)
{
return ((*coils)&(1<<start_shift));
}
else
{
return 0;
}
}
//-------------------------------------------------------------------
//----------------FUNCTIONS FOR PROCESSING MESSAGE-------------------
/**
* @brief Check is address valid for certain array.
* @param Addr - начальный адресс.
* @param Qnt - количество запрашиваемых элементов.
* @param R_ARR_ADDR - начальный адресс массива R_ARR.
* @param R_ARR_NUMB - количество элементов в массиве R_ARR.
* @return ExceptionCode - ILLEGAL DATA ADRESS если адресс недействителен, и NO_ERRORS если все ок.
*
* @details Позволяет определить, принадлежит ли адресс Addr массиву R_ARR:
* Если адресс Addr находится в диапазоне адрессов массива R_ARR, то возвращаем NO_ERROR.
* Если адресс Addr находится за пределами адрессов массива R_ARR - ILLEGAL_DATA_ADDRESSю.
*/
MB_ExceptionTypeDef MB_Check_Address_For_Arr(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB)
{
// if address from this array
if(Addr >= R_ARR_ADDR)
{
// if quantity too big return error
if ((Addr - R_ARR_ADDR) + Qnt > R_ARR_NUMB)
{
return ILLEGAL_DATA_ADDRESS; // return exception code
}
// if all ok - return no errors
return NO_ERRORS;
}
// if address isnt from this array return error
else
return ILLEGAL_DATA_ADDRESS; // return exception code
}
/**
* @brief Define Address Origin for Input/Holding Registers
* @param pRegs - указатель на указатель регистров.
* @param Addr - адрес начального регистра.
* @param Qnt - количество запрашиваемых регистров.
* @param WriteFlag - флаг регистр нужны для чтения или записи.
* @return ExceptionCode - Код исключения если есть, и NO_ERRORS если нет.
*
* @details Определение адреса начального регистра.
* @note WriteFlag пока не используется.
*/
MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t RegisterType)
{
/* check quantity error */
if (Qnt > 125)
{
return ILLEGAL_DATA_VALUE; // return exception code
}
if(RegisterType == RegisterType_Holding)
{
// Default holding registers
if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_ADDR, R_HOLDING_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // указатель на выбранный по Addr регистр
}
// if address doesnt match any array - return illegal data address response
else
{
return ILLEGAL_DATA_ADDRESS;
}
}
else if(RegisterType == RegisterType_Input)
{
// Default input registers
if(MB_Check_Address_For_Arr(Addr, Qnt, R_INPUT_ADDR, R_INPUT_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // указатель на выбранный по Addr регистр
}
// if address doesnt match any array - return illegal data address response
else
{
return ILLEGAL_DATA_ADDRESS;
}
}
else
{
return ILLEGAL_FUNCTION;
}
// if found requeried array return no err
return NO_ERRORS; // return no errors
}
/**
* @brief Define Address Origin for coils
* @param pCoils - указатель на указатель коилов.
* @param Addr - адресс начального коила.
* @param Qnt - количество запрашиваемых коилов.
* @param start_shift - указатель на переменную содержащую сдвиг внутри регистра для начального коила.
* @param WriteFlag - флаг коилы нужны для чтения или записи.
* @return ExceptionCode - Код исключения если есть, и NO_ERRORS если нет.
*
* @details Определение адреса начального регистра запрашиваемых коилов.
* @note WriteFlag используется для определния регистров GPIO: ODR или IDR.
*/
MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag)
{
/* check quantity error */
if (Qnt > 2000)
{
return ILLEGAL_DATA_VALUE; // return exception code
}
// Default coils
if(MB_Check_Address_For_Arr(Addr, Qnt, C_CONTROL_ADDR, C_CONTROL_QNT) == NO_ERRORS)
{
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr); // указатель на выбранный по Addr массив коилов
}
// if address doesnt match any array - return illegal data address response
else
{
return ILLEGAL_DATA_ADDRESS;
}
*start_shift = Addr % 16; // set shift to requested coil
// if found requeried array return no err
return NO_ERRORS; // return no errors
}
/**
* @brief Proccess command Read Coils (01 - 0x01).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Read Coils.
*/
uint8_t MB_Read_Coils(RS_MsgTypeDef *modbus_msg)
{
//---------CHECK FOR ERRORS----------
uint16_t *coils;
uint16_t start_shift = 0; // shift in coils register
modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, modbus_msg->Qnt, &start_shift, 0);
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//-----------READING COIL------------
// setup output message data size
modbus_msg->ByteCnt = Divide_Up(modbus_msg->Qnt, 8);
// create mask for coils
uint16_t mask_for_coils = 0; // mask for coils that've been chosen
uint16_t setted_coils = 0; // value of setted coils
uint16_t temp_reg = 0; // temp register for saving coils that hasnt been chosen
uint16_t coil_cnt = 0; // counter for processed coils
// cycle until all registers with requered coils would be processed
int shift = start_shift; // set shift to first coil in first register
int ind = 0; // index for coils registers and data
for(; ind <= Divide_Up(start_shift + modbus_msg->Qnt, 16); ind++)
{
//----SET MASK FOR COILS REGISTER----
mask_for_coils = 0;
for(; shift < 0x10; shift++)
{
mask_for_coils |= 1<<(shift); // choose certain coil
if(++coil_cnt >= modbus_msg->Qnt)
break;
}
shift = 0; // set shift to zero for the next step
//-----------READ COILS--------------
modbus_msg->DATA[ind] = (*(coils+ind)&mask_for_coils) >> start_shift;
if(ind > 0)
modbus_msg->DATA[ind-1] |= ((*(coils+ind)&mask_for_coils) << 16) >> start_shift;
}
// т.к. DATA 16-битная, для 8-битной передачи, надо поменять местами верхний и нижний байты
for(; ind >= 0; --ind)
modbus_msg->DATA[ind] = ByteSwap16(modbus_msg->DATA[ind]);
return 1;
}
/**
* @brief Proccess command Read Holding Registers (03 - 0x03).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Read Holding Registers.
*/
uint8_t MB_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg)
{
//---------CHECK FOR ERRORS----------
// get origin address for data
uint16_t *pHoldRegs;
modbus_msg->Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, modbus_msg->Qnt, RegisterType_Holding); // определение адреса регистров
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//-----------READING REGS------------
// setup output message data size
modbus_msg->ByteCnt = modbus_msg->Qnt*2; // *2 because we transmit 8 bits, not 16 bits
// read data
int i;
for (i = 0; i<modbus_msg->Qnt; i++)
{
modbus_msg->DATA[i] = *(pHoldRegs++);
}
return 1;
}
/**
* @brief Proccess command Read Input Registers (04 - 0x04).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Read Input Registers.
*/
uint8_t MB_Read_Input_Regs(RS_MsgTypeDef *modbus_msg)
{
//---------CHECK FOR ERRORS----------
// get origin address for data
uint16_t *pInRegs;
modbus_msg->Except_Code = MB_DefineRegistersAddress(&pInRegs, modbus_msg->Addr, modbus_msg->Qnt, RegisterType_Input); // определение адреса регистров
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//-----------READING REGS------------
// setup output message data size
modbus_msg->ByteCnt = modbus_msg->Qnt*2; // *2 because we transmit 8 bits, not 16 bits
// read data
int i;
for (i = 0; i<modbus_msg->Qnt; i++)
{
if(*((int16_t *)pInRegs) > 0)
modbus_msg->DATA[i] = (*pInRegs++);
else
modbus_msg->DATA[i] = (*pInRegs++);
}
return 1;
}
/**
* @brief Proccess command Write Single Coils (05 - 0x05).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Write Single Coils.
*/
uint8_t MB_Write_Single_Coil(RS_MsgTypeDef *modbus_msg)
{
//---------CHECK FOR ERRORS----------
if ((modbus_msg->Qnt != 0x0000) && (modbus_msg->Qnt != 0xFF00))
{
modbus_msg->Except_Code = ILLEGAL_DATA_VALUE;
return 0;
}
// define position of coil
uint16_t *coils;
uint16_t start_shift = 0; // shift in coils register
modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, 0, &start_shift, 1);
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//----------WRITTING COIL------------
if(modbus_msg->Qnt == 0xFF00)
*(coils) |= 1<<start_shift; // write flags corresponding to received data
else
*(coils) &= ~(1<<start_shift); // write flags corresponding to received data
return 1;
}
/**
* @brief Proccess command Write Single Register (06 - 0x06).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Write Single Register.
*/
uint8_t MB_Write_Single_Reg(RS_MsgTypeDef *modbus_msg)
{
// get origin address for data
uint16_t *pHoldRegs;
modbus_msg->Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, 1, RegisterType_Holding); // определение адреса регистров
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//-----------WRITTING REG------------
*(pHoldRegs) = modbus_msg->Qnt;
return 1;
}
/**
* @brief Proccess command Write Multiple Coils (15 - 0x0F).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Write Multiple Coils.
*/
uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg)
{
//---------CHECK FOR ERRORS----------
if (modbus_msg->ByteCnt != Divide_Up(modbus_msg->Qnt, 8))
{ // if quantity too large OR if quantity and bytes count arent match
modbus_msg->Except_Code = ILLEGAL_DATA_VALUE;
return 0;
}
// define position of coil
uint16_t *coils; // pointer to coils
uint16_t start_shift = 0; // shift in coils register
modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, modbus_msg->Qnt, &start_shift, 1);
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//----------WRITTING COILS-----------
// create mask for coils
uint16_t mask_for_coils = 0; // mask for coils that've been chosen
uint32_t setted_coils = 0; // value of setted coils
uint16_t temp_reg = 0; // temp register for saving coils that hasnt been chosen
uint16_t coil_cnt = 0; // counter for processed coils
// cycle until all registers with requered coils would be processed
int shift = start_shift; // set shift to first coil in first register
for(int ind = 0; ind <= Divide_Up(start_shift + modbus_msg->Qnt, 16); ind++)
{
//----SET MASK FOR COILS REGISTER----
mask_for_coils = 0;
for(; shift < 0x10; shift++)
{
mask_for_coils |= 1<<(shift); // choose certain coil
if(++coil_cnt >= modbus_msg->Qnt)
break;
}
shift = 0; // set shift to zero for the next step
//-----------WRITE COILS-------------
// get current coils
temp_reg = *(coils+ind);
// set coils
setted_coils = ByteSwap16(modbus_msg->DATA[ind]) << start_shift;
if(ind > 0)
{
setted_coils |= ((ByteSwap16(modbus_msg->DATA[ind-1]) << start_shift) >> 16);
}
// write coils
*(coils+ind) = setted_coils & mask_for_coils;
// restore untouched coils
*(coils+ind) |= temp_reg&(~mask_for_coils);
if(coil_cnt >= modbus_msg->Qnt) // if all coils written - break cycle
break; // *kind of unnecessary
}
return 1;
}
/**
* @brief Proccess command Write Multiple Registers (16 - 0x10).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Write Multiple Registers.
*/
uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg)
{
//---------CHECK FOR ERRORS----------
if (modbus_msg->Qnt*2 != modbus_msg->ByteCnt)
{ // if quantity and bytes count arent match
modbus_msg->Except_Code = 3;
return 0;
}
// get origin address for data
uint16_t *pHoldRegs;
modbus_msg->Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, modbus_msg->Qnt, RegisterType_Holding); // определение адреса регистров
if(modbus_msg->Except_Code != NO_ERRORS)
return 0;
//-----------WRITTING REGS-----------
for (int i = 0; i<modbus_msg->Qnt; i++)
{
*(pHoldRegs++) = modbus_msg->DATA[i];
}
return 1;
}
void MB_WriteObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj)
{
mbdata[(*ind)++] = obj->length;
for (int i = 0; i < obj->length; i++)
{
mbdata[(*ind)++] = obj->name[i];
}
}
/**
* @brief Proccess command Read Device Identification (43/14 - 0x2B/0E).
* @param modbus_msg - указатель на структуру собщения modbus.
* @return fMessageHandled - статус о результате обработки комманды.
* @details Обработка команды Write Single Register.
*/
uint8_t MB_Read_Device_Identification(RS_MsgTypeDef *modbus_msg)
{
char *mbdata = (char *)modbus_msg->DATA;
unsigned ind = 0;
switch(modbus_msg->DevId.ReadDevId)
{
case MB_BASIC_IDENTIFICATION:
mbdata[ind++] = 0x00;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.VendorName);
mbdata[ind++] = 0x01;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ProductCode);
mbdata[ind++] = 0x02;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.Revision);
modbus_msg->DevId.NumbOfObj = 3;
break;
case MB_REGULAR_IDENTIFICATION:
mbdata[ind++] = 0x03;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.VendorUrl);
mbdata[ind++] = 0x04;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ProductName);
mbdata[ind++] = 0x05;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ModelName);
mbdata[ind++] = 0x06;
MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.UserApplicationName);
modbus_msg->DevId.NumbOfObj = 4;
break;
default:
return 0;
}
modbus_msg->ByteCnt = ind;
return 1;
}
/**
* @brief Respond accord to received message.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @return RS_RES - статус о результате ответа на комманду.
* @details Обработка принятой комманды и ответ на неё.
*/
RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
{
RS_StatusTypeDef MB_RES = 0;
hmodbus->f.MessageHandled = 0;
hmodbus->f.EchoResponse = 0;
RS_Reset_TX_Flags(hmodbus); // reset flag for correct transmit
if(modbus_msg->Func_Code < ERR_VALUES_START)// if no errors after parsing
{
switch (modbus_msg->Func_Code)
{
// Read Coils
case MB_R_COILS:
hmodbus->f.MessageHandled = MB_Read_Coils(hmodbus->pMessagePtr);
break;
// Read Hodling Registers
case MB_R_HOLD_REGS:
hmodbus->f.MessageHandled = MB_Read_Hold_Regs(hmodbus->pMessagePtr);
break;
case MB_R_IN_REGS:
hmodbus->f.MessageHandled = MB_Read_Input_Regs(hmodbus->pMessagePtr);
break;
// Write Single Coils
case MB_W_COIL:
hmodbus->f.MessageHandled = MB_Write_Single_Coil(hmodbus->pMessagePtr);
if(hmodbus->f.MessageHandled)
{
hmodbus->f.EchoResponse = 1;
hmodbus->RS_Message_Size -= 2; // echo response if write ok (minus 2 cause of two CRC bytes)
}
break;
case MB_W_HOLD_REG:
hmodbus->f.MessageHandled = MB_Write_Single_Reg(hmodbus->pMessagePtr);
if(hmodbus->f.MessageHandled)
{
hmodbus->f.EchoResponse = 1;
hmodbus->RS_Message_Size -= 2; // echo response if write ok (minus 2 cause of two CRC bytes)
}
break;
// Write Multiple Coils
case MB_W_COILS:
hmodbus->f.MessageHandled = MB_Write_Miltuple_Coils(hmodbus->pMessagePtr);
if(hmodbus->f.MessageHandled)
{
hmodbus->f.EchoResponse = 1;
hmodbus->RS_Message_Size = 6; // echo response if write ok (withous data bytes)
}
break;
// Write Multiple Registers
case MB_W_HOLD_REGS:
hmodbus->f.MessageHandled = MB_Write_Miltuple_Regs(hmodbus->pMessagePtr);
if(hmodbus->f.MessageHandled)
{
hmodbus->f.EchoResponse = 1;
hmodbus->RS_Message_Size = 6; // echo response if write ok (withous data bytes)
}
break;
case MB_R_DEVICE_INFO:
hmodbus->f.MessageHandled = MB_Read_Device_Identification(hmodbus->pMessagePtr);
break;
/* unknown func code */
default: modbus_msg->Except_Code = 0x01; /* set exception code: illegal function */
}
if(hmodbus->f.MessageHandled == 0)
{
modbus_msg->Func_Code += ERR_VALUES_START;
}
else
{
}
}
// if we need response - check that transmit isnt busy
if( RS_Is_TX_Busy(hmodbus) )
RS_Abort(hmodbus, ABORT_TX); // if tx busy - set it free
// Transmit right there, or sets (fDeferredResponse) to transmit response in main code
MB_RES = RS_Handle_Transmit_Start(hmodbus, modbus_msg);
hmodbus->RS_STATUS = MB_RES;
return MB_RES;
}
/**
* @brief Collect message in buffer to transmit it.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @param msg_uart_buff - указатель на буффер UART.
* @return RS_RES - статус о результате заполнения буфера.
* @details Заполнение буффера UART из структуры сообщения.
*/
RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff)
{
int ind = 0; // ind for modbus-uart buffer
if(hmodbus->f.EchoResponse && hmodbus->f.MessageHandled) // if echo response need
ind = hmodbus->RS_Message_Size;
else
{
//------INFO ABOUT DATA/MESSAGE------
//-----------[first bytes]-----------
// set ID of message/user
modbus_uart_buff[ind++] = modbus_msg->MbAddr;
// set dat or err response
modbus_uart_buff[ind++] = modbus_msg->Func_Code;
if (modbus_msg->Func_Code < ERR_VALUES_START) // if no error occur
{
// fill modbus header
if(modbus_msg->Func_Code == MB_R_DEVICE_INFO) // devide identification header
{
modbus_uart_buff[ind++] = modbus_msg->DevId.MEI_Type;
modbus_uart_buff[ind++] = modbus_msg->DevId.ReadDevId;
modbus_uart_buff[ind++] = modbus_msg->DevId.Conformity;
modbus_uart_buff[ind++] = modbus_msg->DevId.MoreFollows;
modbus_uart_buff[ind++] = modbus_msg->DevId.NextObjId;
modbus_uart_buff[ind++] = modbus_msg->DevId.NumbOfObj;
if (modbus_msg->ByteCnt > DATA_SIZE*2) // if ByteCnt less than DATA_SIZE
{
return RS_COLLECT_MSG_ERR;
}
//---------------DATA----------------
//-----------[data bytes]------------
uint8_t *tmp_data_addr = (uint8_t *)modbus_msg->DATA;
for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data
{ // set data
modbus_uart_buff[ind++] = *tmp_data_addr;
tmp_data_addr++;
}
}
else // modbus data header
{
// set size of received data
if (modbus_msg->ByteCnt <= DATA_SIZE*2) // if ByteCnt less than DATA_SIZE
modbus_uart_buff[ind++] = modbus_msg->ByteCnt;
else // otherwise return data_size err
{
return RS_COLLECT_MSG_ERR;
}
//---------------DATA----------------
//-----------[data bytes]------------
uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA;
for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data
{ // set data
if (i%2 == 0) // HI byte
modbus_uart_buff[ind++] = (*tmp_data_addr)>>8;
else // LO byte
{
modbus_uart_buff[ind++] = *tmp_data_addr;
tmp_data_addr++;
}
}
}
}
else // if some error occur
{ // send expection code
modbus_uart_buff[ind++] = modbus_msg->Except_Code;
}
}
//---------------CRC----------------
//---------[last 16 bytes]----------
// calc crc of received data
uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind);
// write crc to message structure and modbus-uart buffer
modbus_msg->MB_CRC = CRC_VALUE;
modbus_uart_buff[ind++] = CRC_VALUE;
modbus_uart_buff[ind++] = CRC_VALUE >> 8;
hmodbus->RS_Message_Size = ind;
return RS_OK; // returns ok
}
/**
* @brief Parse message from buffer to process it.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @param msg_uart_buff - указатель на буффер UART.
* @return RS_RES - статус о результате заполнения структуры.
* @details Заполнение структуры сообщения из буффера UART.
*/
RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff)
{
uint32_t check_empty_buff;
int ind = 0; // ind for modbus-uart buffer
//-----INFO ABOUT DATA/MESSAGE-------
//-----------[first bits]------------
// get ID of message/user
modbus_msg->MbAddr = modbus_uart_buff[ind++];
if(modbus_msg->MbAddr != hmodbus->ID)
return RS_SKIP;
// get func code
modbus_msg->Func_Code = modbus_uart_buff[ind++];
if(modbus_msg->Func_Code == MB_R_DEVICE_INFO) // if it device identification request
{
modbus_msg->DevId.MEI_Type = modbus_uart_buff[ind++];
modbus_msg->DevId.ReadDevId = modbus_uart_buff[ind++];
modbus_msg->DevId.NextObjId = modbus_uart_buff[ind++];
modbus_msg->ByteCnt = 0;
}
else // if its classic modbus request
{
// get address from CMD
modbus_msg->Addr = modbus_uart_buff[ind++] << 8;
modbus_msg->Addr |= modbus_uart_buff[ind++];
// get address from CMD
modbus_msg->Qnt = modbus_uart_buff[ind++] << 8;
modbus_msg->Qnt |= modbus_uart_buff[ind++];
}
if(hmodbus->f.RX_Half == 0) // if all message received
{
//---------------DATA----------------
// (optional)
if (modbus_msg->ByteCnt != 0)
{
ind++; // increment ind for data_size byte
//check that data size is correct
if (modbus_msg->ByteCnt > DATA_SIZE*2)
{
modbus_msg->Func_Code += ERR_VALUES_START;
return RS_PARSE_MSG_ERR;
}
uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA;
for(int i = 0; i < modbus_msg->ByteCnt; i++) // /2 because we transmit 8 bits, not 16 bits
{ // set data
if (i%2 == 0)
*tmp_data_addr = ((uint16_t)modbus_uart_buff[ind++] << 8);
else
{
*tmp_data_addr |= modbus_uart_buff[ind++];
tmp_data_addr++;
}
}
}
//---------------CRC----------------
//----------[last 16 bits]----------
// calc crc of received data
uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind);
// get crc of received data
modbus_msg->MB_CRC = modbus_uart_buff[ind++];
modbus_msg->MB_CRC |= modbus_uart_buff[ind++] << 8;
// compare crc
if (modbus_msg->MB_CRC != CRC_VALUE)
{
modbus_msg->Func_Code += ERR_VALUES_START;
}
// hmodbus->MB_RESPONSE = MB_CRC_ERR; // set func code - error about wrong crc
// check is buffer empty
check_empty_buff = 0;
for(int i=0; i<ind;i++)
check_empty_buff += modbus_uart_buff[i];
// if(check_empty_buff == 0)
// hmodbus->MB_RESPONSE = MB_EMPTY_MSG; //
}
return RS_OK;
}
/**
* @brief Define size of RX Message that need to be received.
* @param hRS - указатель на хендлер RS.
* @param rx_data_size - указатель на переменную для записи кол-ва байт для принятия.
* @return RS_RES - статус о корректности рассчета кол-ва байт для принятия.
* @details Определение сколько байтов надо принять по протоколу.
*/
RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_t *rx_data_size)
{
RS_StatusTypeDef MB_RES = 0;
MB_RES = RS_Parse_Message(hmodbus, hmodbus->pMessagePtr, hmodbus->pBufferPtr);
if(MB_RES == RS_SKIP) // if message not for us
return MB_RES; // return
if ((hmodbus->pMessagePtr->Func_Code & ~ERR_VALUES_START) < 0x0F)
{
hmodbus->pMessagePtr->ByteCnt = 0;
*rx_data_size = 1;
}
else
{
hmodbus->pMessagePtr->ByteCnt = hmodbus->pBufferPtr[RX_FIRST_PART_SIZE-1]; // get numb of data in command
// +1 because that defines is size, not ind.
*rx_data_size = hmodbus->pMessagePtr->ByteCnt + 2;
}
if(hmodbus->pMessagePtr->Func_Code == MB_R_DEVICE_INFO)
{
*rx_data_size = 0;
}
hmodbus->RS_Message_Size = RX_FIRST_PART_SIZE + *rx_data_size; // size of whole message
return RS_OK;
}
//-----------------------------FOR USER------------------------------
//-------------------------------------------------------------------
void MB_DevoceInentificationInit(void)
{
MB_INFO.VendorName.name = MODBUS_VENDOR_NAME;
MB_INFO.ProductCode.name = MODBUS_PRODUCT_CODE;
MB_INFO.Revision.name = MODBUS_REVISION;
MB_INFO.VendorUrl.name = MODBUS_VENDOR_URL;
MB_INFO.ProductName.name = MODBUS_PRODUCT_NAME;
MB_INFO.ModelName.name = MODBUS_MODEL_NAME;
MB_INFO.UserApplicationName.name = MODBUS_USER_APPLICATION_NAME;
MB_INFO.VendorName.length = sizeof(MODBUS_VENDOR_NAME);
MB_INFO.ProductCode.length = sizeof(MODBUS_PRODUCT_CODE);
MB_INFO.Revision.length = sizeof(MODBUS_REVISION);
MB_INFO.VendorUrl.length = sizeof(MODBUS_VENDOR_URL);
MB_INFO.ProductName.length = sizeof(MODBUS_PRODUCT_NAME);
MB_INFO.ModelName.length = sizeof(MODBUS_MODEL_NAME);
MB_INFO.UserApplicationName.length = sizeof(MODBUS_USER_APPLICATION_NAME);
}

372
Core/Modbus/modbus.h Normal file
View File

@@ -0,0 +1,372 @@
/**
**************************************************************************
* @file modbus.h
* @brief Заголовочный файл модуля MODBUS.
* @details Данный файл необходимо подключить в rs_message.h. После подключать
* rs_message.h к основному проекту.
*
* @defgroup MODBUS
* @brief Modbus stuff
*
*************************************************************************/
#ifndef __MODBUS_H_
#define __MODBUS_H_
#include "modbus_config.h"
#include "modbus_data.h"
//#include "settings.h" // for modbus settings
/**
* @addtogroup MODBUS_SETTINGS
* @ingroup MODBUS
* @brief Some defines for modbus
@{
*/
/////////////////////////////////////////////////////////////////////
//////////////////////////---SETTINGS---/////////////////////////////
// USER SETTINGS FOR MODBUS IN interface_config.h
//////////////////////////---SETTINGS---/////////////////////////////
/////////////////////////////////////////////////////////////////////
/////////////////////---USER MESSAGE DEFINES---//////////////////////
//-------------DEFINES FOR STRUCTURE----------------
/* defines for structure of modbus message */
#define MbAddr_SIZE 1 ///< size of (MbAddr)
#define Func_Code_SIZE 1 ///< size of (Func_Code)
#define Addr_SIZE 2 ///< size of (Addr)
#define Qnt_SIZE 2 ///< size of (Qnt)
#define ByteCnt_SIZE 1 ///< size of (ByteCnt)
#define DATA_SIZE 125 ///< maximum number of data: DWORD (NOT MESSAGE SIZE)
#define CRC_SIZE 2 ///< size of (MB_CRC) in bytes
/** @brief Size of whole message */
#define INFO_SIZE_MAX (MbAddr_SIZE+Func_Code_SIZE+Addr_SIZE+Qnt_SIZE+ByteCnt_SIZE)
/** @brief Size of first part of message that will be received
first receive info part of message, than defines size of rest message*/
#define RX_FIRST_PART_SIZE INFO_SIZE_MAX
/** @brief Size of buffer: max size of whole message */
#define MSG_SIZE_MAX (INFO_SIZE_MAX + DATA_SIZE*2 + CRC_SIZE) // max possible size of message
/** @brief Structure for modbus exception codes */
typedef enum //MB_ExceptionTypeDef
{
// reading
NO_ERRORS = 0x00, ///< no errors
ILLEGAL_FUNCTION = 0x01, ///< Принятый код функции не может быть обработан
ILLEGAL_DATA_ADDRESS = 0x02, ///< Адрес данных, указанный в запросе, недоступен
ILLEGAL_DATA_VALUE = 0x03, ///< Значение, содержащееся в поле данных запроса, является недопустимой величиной
SLAVE_DEVICE_FAILURE = 0x04, ///< Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие
// ACKNOWLEDGE = 0x05, ///< idk
// SLAVE_DEVICE_BUSY = 0x06, ///< idk
// MEMORY_PARITY_ERROR = 0x08, ///< idk
}MB_ExceptionTypeDef;
#define ERR_VALUES_START 0x80U ///< from this value starts error func codes
/** @brief Structure for modbus func codes */
typedef enum //MB_FunctonTypeDef
{
/* COMMANDS */
// reading
MB_R_COILS = 0x01, ///< Чтение битовых ячеек
MB_R_DISC_IN = 0x02, ///< Чтение дискретных входов
#ifndef MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
MB_R_HOLD_REGS = 0x03, ///< Чтение входных регистров
MB_R_IN_REGS = 0x04, ///< Чтение регистров хранения
#else
MB_R_HOLD_REGS = 0x04, ///< Чтение входных регистров
MB_R_IN_REGS = 0x03, ///< Чтение регистров хранения
#endif
// writting
MB_W_COIL = 0x05, ///< Запись битовой ячейки
MB_W_HOLD_REG = 0x06, ///< Запись одиночного регистра
MB_W_COILS = 0x0F, ///< Запись нескольких битовых ячеек
MB_W_HOLD_REGS = 0x10, ///< Запись нескольких регистров
MB_R_DEVICE_INFO = 0x2B, ///< Чтения информации об устройстве
/* ERRORS */
// error reading
MB_ERR_R_COILS = MB_R_COILS + ERR_VALUES_START, ///< Ошибка чтения битовых ячеек
MB_ERR_R_DISC_IN = MB_R_DISC_IN + ERR_VALUES_START, ///< Ошибка чтения дискретных входов
MB_ERR_R_IN_REGS = MB_R_IN_REGS + ERR_VALUES_START, ///< Ошибка чтения регистров хранения
MB_ERR_R_HOLD_REGS = MB_R_HOLD_REGS + ERR_VALUES_START, ///< Ошибка чтения входных регистров
// error writting
MB_ERR_W_COIL = MB_W_COIL + ERR_VALUES_START, ///< Ошибка записи битовой ячейки
MB_ERR_W_HOLD_REG = MB_W_HOLD_REG + ERR_VALUES_START, ///< Ошибка записи одиночного регистра
MB_ERR_W_COILS = MB_W_COILS + ERR_VALUES_START, ///< Ошибка записи нескольких битовых ячеек
MB_ERR_W_HOLD_REGS = MB_W_HOLD_REGS + ERR_VALUES_START, ///< Ошибка записи нескольких регистров
}MB_FunctonTypeDef;
/** @brief Structure for MEI func codes */
typedef enum //MB_FunctonTypeDef
{
MEI_DEVICE_IDENTIFICATION = 0x0E,
}MB_MEITypeDef;
/** @brief Structure for MEI func codes */
typedef enum //MB_FunctonTypeDef
{
MB_BASIC_IDENTIFICATION = 0x01,
MB_REGULAR_IDENTIFICATION = 0x02,
/* ERRORS */
MB_ERR_BASIC_IDENTIFICATION = MB_BASIC_IDENTIFICATION + ERR_VALUES_START,
MB_ERR_REGULAR_IDENTIFICATION = MB_REGULAR_IDENTIFICATION + ERR_VALUES_START,
}MB_ConformityTypeDef;
/** @brief Structure for decive identification message type */
typedef struct
{
MB_MEITypeDef MEI_Type; ///< MEI Type assigned number for Device Identification Interface
MB_ConformityTypeDef ReadDevId;
MB_ConformityTypeDef Conformity;
uint8_t MoreFollows; ///< in this library always a zero
uint8_t NextObjId;
uint8_t NumbOfObj;
}MB_DevIdMsgTypeDef;
/** @brief Structure for modbus messsage */
typedef struct // RS_MsgTypeDef
{
uint8_t MbAddr; ///< Modbus Slave Address
MB_FunctonTypeDef Func_Code; ///< Modbus Function Code
MB_DevIdMsgTypeDef DevId; ///< Read Device Identification Header struct
uint16_t Addr; ///< Modbus Address of data
uint16_t Qnt; ///< Quantity of modbus data
uint8_t ByteCnt; ///< Quantity of bytes of data in message to transmit/receive
uint16_t DATA[DATA_SIZE]; ///< Modbus Data
MB_ExceptionTypeDef Except_Code; ///< Exception Code for the command
uint16_t MB_CRC; ///< Modbus CRC
}RS_MsgTypeDef;
//--------------------------------------------------
extern RS_MsgTypeDef MODBUS_MSG;
/////////////////////---MODBUS USER SETTINGS---//////////////////////
/** MODBUS_SETTINGS
* @}
*/
/////////////////////////////////////////////////////////////////////
////////////////////---MODBUS MESSAGE DEFINES---/////////////////////
/**
* @addtogroup MODBUS_MESSAGE_DEFINES
* @ingroup MODBUS
* @brief Some defines for modbus
@{
*/
/** @brief Structure for coils operation */
typedef enum
{
SET_COIL,
RESET_COIL,
TOOGLE_COIL,
}MB_CoilsOpTypeDef;
//--------------------------------------------------
/**
* @brief Macros to set pointer to 16-bit array
* @param _arr_ - массив регистров (16-бит).
*/
#define MB_Set_Arr16_Ptr(_arr_) ((uint16_t*)(&(_arr_)))
/**
* @brief Macros to set pointer to register
* @param _parr_ - массив регистров.
* @param _addr_ - Номер регистра (его индекс) от начала массива _arr_.
*/
#define MB_Set_Register_Ptr(_parr_, _addr_) ((uint16_t *)(_parr_)+(_addr_))
/**
* @brief Macros to set pointer to a certain register that contains certain coil
* @param _parr_ - массив коилов.
* @param _coil_ - Номер коила от начала массива _arr_.
* @note Используется вместе с @ref MB_Set_Coil_Mask
@verbatim Пояснение выражений
(_coil_/16) - get index (address shift) of register that contain certain coil
Visual explanation: 30th coil in coils registers array
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxCx
|register[0]----| |register[1]----|
|skip this------| |get this-------|
|shift to 14 bit|
@endverbatim
*/
#define MB_Set_Coil_Reg_Ptr(_parr_, _coil_) ((uint16_t *)(_parr_)+((_coil_)/16))
/**
* @brief Macros to set mask to a certain bit in coils register
* @param _coil_ - Номер коила от начала массива _arr_.
* @note Используется вместе с @ref MB_Set_Coil_Reg_Ptr
@verbatim Пояснение выражений
(16*(_coil_/16) - how many coils we need to skip. e.g. (16*30/16) - skip 16 coils from first register
_coil_-(16*(_coil_/16)) - shift to certain coil in certain register
e.g. Coil(30) gets in register[1] (30/16 = 1) coil №14 (30 - (16*30/16) = 30 - 16 = 14)
Visual explanation: 30th coil in coils registers array
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxCx
|register[0]----| |register[1]----|
|skip this------| |get this-------|
|shift to 14 bit|
@endverbatim
*/
#define MB_Set_Coil_Mask(_coil_) (1 << ( _coil_ - (16*((_coil_)/16)) ))
/**
* @brief Read Coil at its local address.
* @param _parr_ - массив коилов.
* @param _coil_ - Номер коила от начала массива _arr_.
* @return uint16_t - Возвращает запрошенный коил на 0м бите.
*
* @details Позволяет обратиться к коилу по адресу относительно _arr_.
*/
#define MB_Read_Coil_Local(_parr_, _coil_) (( *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) & MB_Set_Coil_Mask(_coil_) ) >> (_coil_))
/**
* @brief Set Coil at its local address.
* @param _parr_ - указатель на массив коилов.
* @param _coil_ - Номер коила от начала массива _arr_.
*
* @details Позволяет обратиться к коилу по адресу относительно _arr_.
*/
#define MB_Set_Coil_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) |= MB_Set_Coil_Mask(_coil_)
/**
* @brief Reset Coil at its local address.
* @param _parr_ - указатель на массив коилов.
* @param _coil_ - Номер коила от начала массива _arr_.
*
* @details Позволяет обратиться к коилу по адресу относительно _arr_.
*/
#define MB_Reset_Coil_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) &= ~(MB_Set_Coil_Mask(_coil_))
/**
* @brief Set Coil at its local address.
* @param _parr_ - указатель на массив коилов.
* @param _coil_ - Номер коила от начала массива _arr_.
*
* @details Позволяет обратиться к коилу по адресу относительно _arr_.
*/
#define MB_Toogle_Coil_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) ^= MB_Set_Coil_Mask(_coil_)
//--------------------------------------------------
//------------------OTHER DEFINES-------------------
#define RegisterType_Holding 0
#define RegisterType_Input 1
#define RegisterType_Discrete 2
// create hadnles and settings for uart, tim, rs with _modbus_ name
//--------------------------------------------------
#ifndef Divide_Up
/**
* @brief Calc dividing including remainder
* @param _val_ - делимое.
* @param _div_ - делитель.
* @details Если результат деления без остатка: он возвращается как есть
Если с остатком - округляется вверх
*/
//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */
#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */
#endif
#ifndef ByteSwap16
/**
* @brief Swap between Little Endian and Big Endian
* @param v - Переменная для свапа.
* @return v (new) - Свапнутая переменная.
* @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.
*/
#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8)))
#endif
/** GENERAL_MODBUS_STUFF
* @}
*/
////////////////////---MODBUS MESSAGE DEFINES---/////////////////////
/////////////////////////////////////////////////////////////////////
/////////////////////////---FUNCTIONS---/////////////////////////////
/**
* @addtogroup MODBUS_FUNCTIONS
* @ingroup MODBUS
* @brief Function for controling modbus communication
*/
//----------------FUNCTIONS FOR USER----------------
/**
* @addtogroup MODBUS_DATA_ACCESS_FUNCTIONS
* @ingroup MODBUS_FUNCTIONS
* @brief Function for user use
@{
*/
/* First set up of MODBUS */
void MODBUS_FirstInit(void);
/* Set or Reset Coil at its global address */
MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal);
/* Read Coil at its global address */
uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception);
/** MODBUS_DATA_ACCESS_FUNCTIONS
* @}
*/
//---------PROCESS MODBUS COMMAND FUNCTIONS---------
/**
* @addtogroup MODBUS_CMD_PROCESS_FUNCTIONS
* @ingroup MODBUS_FUNCTIONS
* @brief Function process commands
@{
*/
/* Check is address valid for certain array */
MB_ExceptionTypeDef MB_Check_Address_For_Arr(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB);
/* Define Address Origin for Input/Holding Registers */
MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t RegisterType);
/* Define Address Origin for coils */
MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag);
/* Proccess command Read Coils (01 - 0x01) */
uint8_t MB_Read_Coils(RS_MsgTypeDef *modbus_msg);
/* Proccess command Read Holding Registers (03 - 0x03) */
uint8_t MB_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg);
/* Proccess command Read Input Registers (04 - 0x04) */
uint8_t MB_Read_Input_Regs(RS_MsgTypeDef *modbus_msg);
/* Proccess command Write Single Coils (05 - 0x05) */
uint8_t MB_Write_Single_Coil(RS_MsgTypeDef *modbus_msg);
/* Proccess command Write Multiple Coils (15 - 0x0F) */
uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg);
/* Proccess command Write Multiple Register (16 - 0x10) */
uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg);
/** MODBUS_DATA_ACCESS_FUNCTIONS
* @}
*/
/////////////////////////---FUNCTIONS---/////////////////////////////
/////////////////////////////////////////////////////////////////////
/////////////////////////---CALC DEFINES---//////////////////////////
// TRACES DEFINES
#ifndef Trace_MB_UART_Enter
#define Trace_MB_UART_Enter()
#endif //Trace_MB_UART_Enter
#ifndef Trace_MB_UART_Exit
#define Trace_MB_UART_Exit()
#endif //Trace_MB_UART_Exit
#ifndef Trace_MB_TIM_Enter
#define Trace_MB_TIM_Enter()
#endif //Trace_MB_TIM_Enter
#ifndef Trace_MB_TIM_Exit
#define Trace_MB_TIM_Exit()
#endif //Trace_MB_TIM_Exit
#endif //__MODBUS_H_

View File

@@ -0,0 +1,44 @@
/**
**************************************************************************
* @file interface_config.h
* @brief Конфигурация для модбаса
*************************************************************************/
#ifndef _MODBUS_CONFIG_H_
#define _MODBUS_CONFIG_H_
#include "stm32f1xx_hal.h"
// MODBUS PARAMS
#define MODBUS_DEVICE_ID 1 ///< девайс текущего устройства
#define MODBUS_TIMEOUT 1000*10 ///< максимальнйы тайтаут MB в тиках таймера
// STRING OBJECTS MODBUS
#define MODBUS_VENDOR_NAME "NIO-12"
#define MODBUS_PRODUCT_CODE ""
#define MODBUS_REVISION "Ver. 1.0"
#define MODBUS_VENDOR_URL ""
#define MODBUS_PRODUCT_NAME ""
#define MODBUS_MODEL_NAME "STM32F103"
#define MODBUS_USER_APPLICATION_NAME ""
// PERIPH FUNCTIONS AND HANDLERS
#define RS_UART_Init MX_USART1_UART_Init //инициализация uart
#define RS_UART_DeInit HAL_UART_MspDeInit //деинициализация uart
#define RS_TIM_Init MX_TIM3_Init //инициализация таймера
#define RS_TIM_DeInit HAL_TIM_Base_MspDeInit//деинициализация таймера
#define rs_huart huart1 //используемый uart
#define rs_htim htim3 //используемый таймера
/**
* @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей)
* @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS
* Поэтому чтобы считывать Input Regs - надо поменять их местами.
*/
//#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
/////////////////////////////////////////////////////////////////////
/////////////////////////---CALC DEFINES---//////////////////////////
#endif //_MODBUS_CONFIG_H_

192
Core/Modbus/modbus_data.h Normal file
View File

@@ -0,0 +1,192 @@
/**
**************************************************************************
* @file modbus_data.h
* @brief Заголовочный файл с описанием даты MODBUS.
* @details Данный файл необходимо подключается в rs_message.h. После rs_message.h
* подключается к основному проекту.
*
* @defgroup MODBUS_DATA
* @ingroup MODBUS
* @brief Modbus data description
*
*************************************************************************/
#ifndef _MODBUS_DATA_H_
#define _MODBUS_DATA_H_
#include "stdint.h"
//--------------DEFINES FOR REGISTERS---------------
// DEFINES FOR ARRAYS
/**
* @addtogroup MODBUS_DATA_RERISTERS_DEFINES
* @ingroup MODBUS_DATA
* @brief Defines for registers
Структура дефайна адресов
@verbatim
Для массивов регистров:
R_<NAME_ARRAY>_ADDR - модбас адресс первого регистра в массиве
R_<NAME_ARRAY>_QNT - количество регистров в массиве
При добавлении новых массивов регистров, необходимо их добавить в функцию MB_DefineRegistersAddress
if(MB_Check_Address_For_Arr(Addr, Qnt, R_<NEW_ARRAY>_ADDR, R_<NEW_ARRAY>_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&<NEW_ARRAY>, Addr); // начало регистров хранения/входных
}
@endverbatim
* @{
*/
/**
* @brief Регистры хранения
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t RESERVED;
}MB_DataInRegsTypeDef;
/**
* @brief Входные регистры
*/
typedef struct //MB_DataInRegsTypeDef
{ // Адрес:
uint16_t CAN_BITRATE_KBPS; // 0
uint16_t CAN_PERIOD; // 1
uint16_t CAN_ID_HI; // 2
uint16_t CAN_ID_LO; // 3
uint16_t CAN_DLC; // 4
uint16_t reserved[12]; // ...
uint16_t CAN_DATA_0; // 16
uint16_t CAN_DATA_1; // 17
uint16_t CAN_DATA_2; // 18
uint16_t CAN_DATA_3; // 19
uint16_t CAN_DATA_4; // 20
uint16_t CAN_DATA_5; // 21
uint16_t CAN_DATA_6; // 22
uint16_t CAN_DATA_7; // 23
}MB_DataHoldRegsTypeDef;
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_INPUT_ADDR 0
#define R_INPUT_QNT 1
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_HOLDING_ADDR 0
#define R_HOLDING_QNT 23
/** MODBUS_DATA_RERISTERS_DEFINES
* @}
*/
//----------------DEFINES FOR COILS-----------------
/**
* @addtogroup MODBUS_DATA_COILS_DEFINES
* @ingroup MODBUS_DATA
* @brief Defines for coils
@verbatim
Структура дефайна
Для массивов коилов:
C_<NAME_ARRAY>_ADDR - модбас адресс первого коила в массиве
C_<NAME_ARRAY>_QNT - количество коилов в массиве (минимум 16)
При добавлении новых массивов коилов, необходимо их добавить в функцию MB_DefineCoilsAddress
if(MB_Check_Address_For_Arr(Addr, Qnt, C_<NEW_ARRAY>_ADDR, C_<NEW_ARRAY>_QNT) == NO_ERRORS)
{
*pCoils = MB_Set_Coil_Reg_Ptr(&<NEW_ARRAY>, Addr);
}
@endverbatim
* @{
*/
/**
* @brief Коилы
* @details Желательно с помощью reserved делать стркутуру кратной 16-битам
*/
typedef struct //MB_DataCoilsTypeDef
{ // Адрес:
unsigned START_POLLING:1; // 0
unsigned START_SINGLE_FRAME:1; // 1
unsigned HEADER_IDE:1; // 2
unsigned HEADER_RTR:1; // 3
unsigned reserved:13; // ...
unsigned FLIP_SRS:1; // 16
unsigned FLIP_IDE:1; // 17
unsigned FLIP_RTR:1; // 18
unsigned FLIP_R1:1; // 19
unsigned FLIP_R0:1; // 20
unsigned FLIP_MSGID_BIT:1; // 21
unsigned FLIP_DATA_BIT:1; // 22
unsigned FLIP_CRC_BIT:1; // 23
unsigned DISABLE_STUFF_BITS:1; // 24
}MB_DataCoilsTypeDef;
// DEFINES FOR COIL ARRAYS
#define C_CONTROL_ADDR 0
#define C_CONTROL_QNT 24
/** MODBUS_DATA_COILS_DEFINES
* @}
*/
//-----------MODBUS DEVICE DATA SETTING-------------
// MODBUS DATA STRUCTTURE
/**
* @brief Структура со всеми регистрами и коилами модбас
* @ingroup MODBUS_DATA
*/
typedef struct // tester modbus data
{
MB_DataInRegsTypeDef InRegs; ///< Modbus input registers @ref MB_DataInRegsTypeDef
MB_DataCoilsTypeDef Coils; ///< Modbus coils @ref MB_DataCoilsTypeDef
MB_DataHoldRegsTypeDef HoldRegs; ///< Modbus holding registers @ref MB_DataHoldRegsTypeDef
}MB_DataStructureTypeDef;
extern MB_DataStructureTypeDef MB_DATA;
/**
* @brief Структура для объекта Modbus
* @ingroup MODBUS_DATA
*/
typedef struct
{
unsigned length;
char *name;
}MB_DeviceObjectTypeDef;
/**
* @brief Структура для объектов Modbus
* @ingroup MODBUS_DATA
*/
typedef struct
{
MB_DeviceObjectTypeDef VendorName;
MB_DeviceObjectTypeDef ProductCode;
MB_DeviceObjectTypeDef Revision;
MB_DeviceObjectTypeDef VendorUrl;
MB_DeviceObjectTypeDef ProductName;
MB_DeviceObjectTypeDef ModelName;
MB_DeviceObjectTypeDef UserApplicationName;
}MB_DeviceIdentificationTypeDef;
void MB_DevoceInentificationInit(void);
#endif //_MODBUS_DATA_H_
/////////////////////////////////////////////////////////////
///////////////////////TEMP/OUTDATE/OTHER////////////////////

550
Core/Modbus/rs_message.c Normal file
View File

@@ -0,0 +1,550 @@
/**
**************************************************************************
* @file rs_message.c
* @brief Модуль для реализации протоколов по RS/UART.
**************************************************************************\
* @details
* Данный модуль реализует основные функции для приема и передачи сообщений
* по протоколу RS через UART в режиме прерываний. Реализована обработка
* приема и передачи данных, управление состояниями RS, а также функции для
* инициализации и управления периферией.
*
* Реализованы следующие функции:
* - RS_Receive_IT() — запуск приема данных в прерывании по UART.
* - RS_Transmit_IT() — запуск передачи данных в прерывании по UART.
* - RS_Init() — инициализация структуры RS и привязка периферии.
* - RS_ReInit_UART() — переинициализация UART и перезапуск приема данных.
* - RS_Abort() — остановка работы RS/UART с очисткой флагов и структур.
* - RS_Handle_Receive_Start() — обработка старта приема данных по RS.
*
* В модуле также определен буфер RS_Buffer[] для хранения принимаемых/передаваемых данных.
*
* @note
* Для корректной работы модуля предполагается использование соответствующих
* обработчиков прерываний UART и таймера (RS_UART_Handler(), RS_TIM_Handler()),
* которые надо вызывать с обработчиках используемой периферии
@verbatim
//-------------------Функции-------------------//
Functions: users
- RS_Parse_Message/RS_Collect_Message Заполнение структуры сообщения и буфера
- RS_Response Ответ на сообщение
- RS_Define_Size_of_RX_Message Определение размера принимаемых данных
Functions: general
- RS_Receive_IT Ожидание комманды и ответ на неё
- RS_Transmit_IT Отправление комманды и ожидание ответа
- RS_Init Инициализация переферии и структуры для RS
- RS_ReInit_UART Реинициализация UART для RS
- RS_Abort Отмена приема/передачи по ЮАРТ
- RS_Init Инициализация периферии и modbus handler
Functions: callback/handler
- RS_Handle_Receive_Start Функция для запуска приема или остановки RS
- RS_Handle_Transmit_Start Функция для запуска передачи или остановки RS
- RS_UART_RxCpltCallback Коллбек при окончании приема или передачи
RS_UART_TxCpltCallback
- RS_UART_Handler Обработчик прерывания для UART
- RS_TIM_Handler Обработчик прерывания для TIM
@endverbatim
*************************************************************************/
#include "rs_message.h"
uint8_t RS_Buffer[MSG_SIZE_MAX]; // uart buffer
extern void RS_UART_Init(void);
extern void RS_UART_DeInit(UART_HandleTypeDef *huart);
extern void RS_TIM_Init(void);
extern void RS_TIM_DeInit(TIM_HandleTypeDef *htim);
//-------------------------------------------------------------------
//-------------------------GENERAL FUNCTIONS-------------------------
/**
* @brief Start receive IT.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @return RS_RES - статус о состоянии RS после инициализации приема.
*/
RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
{
RS_StatusTypeDef RS_RES = 0;
HAL_StatusTypeDef uart_res = 0;
//-------------CHECK RS LINE----------------
// check that receive isnt busy
if( RS_Is_RX_Busy(hRS) ) // if tx busy - return busy status
return RS_BUSY;
//-----------INITIALIZE RECEIVE-------------
// if all OK: start receiving
RS_EnableReceive();
RS_Set_Busy(hRS); // set RS busy
RS_Set_RX_Flags(hRS); // initialize flags for receive
hRS->pMessagePtr = RS_msg; // set pointer to message structire for filling it from UARTHandler fucntions
// start receiving
uart_res = HAL_UART_Receive_IT(hRS->huart, hRS->pBufferPtr, RX_FIRST_PART_SIZE); // receive until ByteCnt+1 byte,
// then in Callback restart receive for rest bytes
// if receive isnt started - abort RS
if(uart_res != HAL_OK)
{
RS_RES = RS_Abort(hRS, ABORT_RS);
printf_rs_err("\n%d: Error RS: Failed to start RS receiving...", uwTick);
}
else
{
RS_RES = RS_OK;
printf_rs("\n%d: RS: Start Receiving...", uwTick);
}
hRS->RS_STATUS = RS_RES;
return RS_RES; // returns result of receive init
}
/**
* @brief Start transmit IT.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @return RS_RES - статус о состоянии RS после инициализации передачи.
*/
RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
{
RS_StatusTypeDef RS_RES = 0;
HAL_StatusTypeDef uart_res = 0;
//-------------CHECK RS LINE----------------
// check that transmit isnt busy
if( RS_Is_TX_Busy(hRS) ) // if tx busy - return busy status
return RS_BUSY;
// check receive line
//------------COLLECT MESSAGE---------------
RS_RES = RS_Collect_Message(hRS, RS_msg, hRS->pBufferPtr);
if (RS_RES != RS_OK) // if message isnt collect - stop RS and return error in RS_RES
{// need collect message status, so doesnt write abort to RS_RES
RS_Abort(hRS, ABORT_RS);
RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); // restart receive
}
else // if collect successful
{
//----------INITIALIZE TRANSMIT-------------
RS_EnableTransmit();
// for(int i = 0; i < hRS->sRS_Timeout; i++);
RS_Set_Busy(hRS); // set RS busy
RS_Set_TX_Flags(hRS); // initialize flags for transmit IT
hRS->pMessagePtr = RS_msg; // set pointer for filling given structure from UARTHandler fucntion
// if all OK: start transmitting
uart_res = HAL_UART_Transmit_IT(hRS->huart, hRS->pBufferPtr, hRS->RS_Message_Size);
// if transmit isnt started - abort RS
if(uart_res != HAL_OK)
{
RS_RES = RS_Abort(hRS, ABORT_RS);
printf_rs_err("\n%d: Error RS: Failed to start RS transmitting...", uwTick);
}
else
{
RS_RES = RS_OK;
printf_rs("\n%d: RS: Start Transmitting...", uwTick);
}
}
hRS->RS_STATUS = RS_RES;
return RS_RES; // returns result of transmit init
}
/**
* @brief Initialize UART and handle RS stucture.
* @param hRS - указатель на хендлер RS.
* @param suart - указатель на структуру с настройками UART.
* @param stim - указатель на структуру с настройками таймера.
* @param pRS_BufferPtr - указатель на буффер для приема-передачи по UART. Если он NULL, то поставиться библиотечный буфер.
* @return RS_RES - статус о состоянии RS после инициализации.
* @note Инициализация перефирии и структуры для приема-передачи по RS.
*/
RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr)
{
// check that hRS is defined
if (hRS == NULL)
return RS_ERR;
// check that huart is defined
if (huart == NULL)
return RS_ERR;
// init uart
// RS_UART_Init();
hRS->huart = huart;
// RS_TIM_Init();
hRS->htim = htim;
if (hRS->sRS_RX_Size_Mode == NULL)
return RS_ERR;
// check that buffer is defined
if (hRS->pBufferPtr == NULL)
{
hRS->pBufferPtr = RS_Buffer; // if no - set default
}
else
hRS->pBufferPtr = pRS_BufferPtr; // if yes - set by user
return RS_OK;
}
/**
* @brief ReInitialize UART and RS receive.
* @param hRS - указатель на хендлер RS.
* @param suart - указатель на структуру с настройками UART.
* @return RS_RES - статус о состоянии RS после инициализации.
* @note Реинициализация UART и приема по RS.
*/
HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart)
{
HAL_StatusTypeDef RS_RES;
hRS->f.ReInit_UART = 0;
// // check is settings are valid
// if(Check_UART_Init_Struct(suart) != HAL_OK)
// return HAL_ERROR;
RS_Abort(hRS, ABORT_RS);
RS_UART_DeInit(huart);
RS_UART_Init();
RS_Receive_IT(hRS, hRS->pMessagePtr);
return RS_RES;
}
/**
* @brief Abort RS/UART.
* @param hRS - указатель на хендлер RS.
* @param AbortMode - выбор, что надо отменить.
- ABORT_TX: Отмена передачи по ЮАРТ, с очищением флагов TX,
- ABORT_RX: Отмена приема по ЮАРТ, с очищением флагов RX,
- ABORT_RX_TX: Отмена приема и передачи по ЮАРТ,
- ABORT_RS: Отмена приема-передачи RS, с очищением всей структуры.
* @return RS_RES - статус о состоянии RS после аборта.
* @note Отмена работы UART в целом или отмена приема/передачи RS.
Также очищается хендл hRS.
*/
RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode)
{
HAL_StatusTypeDef uart_res = 0;
hRS->htim->Instance->CNT = 0;
__HAL_TIM_CLEAR_IT(hRS->htim, TIM_IT_UPDATE);
if(hRS->sRS_Timeout) // if timeout setted
HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout
if((AbortMode&ABORT_RS) == 0x00)
{
if((AbortMode&ABORT_RX) == ABORT_RX)
{
uart_res = HAL_UART_AbortReceive(hRS->huart); // abort receive
RS_Reset_RX_Flags(hRS);
}
if((AbortMode&ABORT_TX) == ABORT_TX)
{
uart_res = HAL_UART_AbortTransmit(hRS->huart); // abort transmit
RS_Reset_TX_Flags(hRS);
}
}
else
{
uart_res = HAL_UART_Abort(hRS->huart);
RS_Clear_All(hRS);
}
hRS->RS_STATUS = RS_ABORTED;
return RS_ABORTED;
}
//-------------------------GENERAL FUNCTIONS-------------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
/**
* @brief Handle for starting receive.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @return RS_RES - статус о состоянии RS после инициализации приема или окончания общения.
* @note Определяет начинать прием команды/ответа или нет.
*/
RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
{
RS_StatusTypeDef RS_RES = 0;
switch(hRS->sRS_Mode)
{
case SLAVE_ALWAYS_WAIT: // in slave mode with permanent waiting
RS_RES = RS_Receive_IT(hRS, RS_msg); break; // start receiving again
case SLAVE_TIMEOUT_WAIT: // in slave mode with timeout waiting (start receiving cmd by request)
RS_Set_Free(hRS); RS_RES = RS_OK; break; // end RS communication (set RS unbusy)
}
if(RS_RES != RS_OK)
{
}
return RS_RES;
}
/**
* @brief Handle for starting transmit.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @return RS_RES - статус о состоянии RS после инициализации передачи.
* @note Определяет отвечать ли на команду или нет.
*/
RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
{
RS_StatusTypeDef RS_RES = 0;
switch(hRS->sRS_Mode)
{
case SLAVE_ALWAYS_WAIT: // in slave mode always response
case SLAVE_TIMEOUT_WAIT: // transmit response
RS_RES = RS_Transmit_IT(hRS, RS_msg); break;
}
if(RS_RES != RS_OK)
{
}
return RS_RES;
}
/**
* @brief UART RX Callback: define behaviour after receiving parts of message.
* @param hRS - указатель на хендлер RS.
* @return RS_RES - статус о состоянии RS после обработки приема.
* @note Контролирует прием сообщения: определяет размер принимаемой посылки и обрабатывает его.
*/
RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS)
{
RS_StatusTypeDef RS_RES = 0;
HAL_StatusTypeDef uart_res = 0;
// if we had received bytes before ByteCnt
if((hRS->sRS_RX_Size_Mode == RS_RX_Size_NotConst) && (hRS->f.RX_Half == 0)) // if data size isnt constant and its first half, and
{ // First receive part of message, then define size of rest of message, and start receive it
hRS->f.RX_Half = 1;
//---------------FIND DATA SIZE-----------------
uint32_t NuRS_of_Rest_Bytes = 0xFFFF;
RS_RES = RS_Define_Size_of_RX_Message(hRS, &NuRS_of_Rest_Bytes);
// if we need to skip this message - restart receive
if(RS_RES == RS_SKIP || NuRS_of_Rest_Bytes == 0xFFFF)
{
RS_Abort(hRS, ABORT_RX);
RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
return RS_RES;
}
// if there is no bytes to receive
if(NuRS_of_Rest_Bytes == 0)
{
hRS->f.RX_Half = 0;
//---------PROCESS DATA & ENDING RECEIVING--------
RS_Set_RX_End(hRS);
if(hRS->sRS_Timeout) // if timeout setted
HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout
// parse received data
RS_RES = RS_Parse_Message(hRS, hRS->pMessagePtr, hRS->pBufferPtr); // parse message
// RESPONSE
RS_RES = RS_Response(hRS, hRS->pMessagePtr);
return RS_RES;
}
//-------------START UART RECEIVE---------------
uart_res = HAL_UART_Receive_IT(hRS->huart, (hRS->pBufferPtr + RX_FIRST_PART_SIZE), NuRS_of_Rest_Bytes);
if(uart_res != HAL_OK)
{// need uart status, so doesnt write abort to RS_RES
RS_RES = RS_Abort(hRS, ABORT_RS);
}
else
RS_RES = RS_OK;
}
else // if we had received whole message
{
hRS->f.RX_Half = 0;
//---------PROCESS DATA & ENDING RECEIVING--------
RS_Set_RX_End(hRS);
if(hRS->sRS_Timeout) // if timeout setted
HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout
// parse received data
RS_RES = RS_Parse_Message(hRS, hRS->pMessagePtr, hRS->pBufferPtr); // parse message
// RESPONSE
RS_RES = RS_Response(hRS, hRS->pMessagePtr);
}
return RS_RES;
}
/**
* @brief UART TX Callback: define behaviour after transmiting message.
* @param hRS - указатель на хендлер RS.
* @return RS_RES - статус о состоянии RS после обработки приема.
* @note Определяет поведение RS после передачи сообщения.
*/
RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS)
{
RS_StatusTypeDef RS_RES = RS_OK;
HAL_StatusTypeDef uart_res = 0;
//--------------ENDING TRANSMITTING-------------
RS_Set_TX_End(hRS);
RS_EnableReceive();
// for(int i = 0; i < hRS->sRS_Timeout; i++);
//-----------START RECEIVING or END RS----------
RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
return RS_RES;
}
/**
* @brief Handler for UART.
* @param hRS - указатель на хендлер RS.
* @note Обрабатывает ошибки если есть и вызывает RS Коллбеки.
* Добавить вызов этой функции в UARTx_IRQHandler() после HAL_UART_IRQHandler().
*/
void RS_UART_Handler(RS_HandleTypeDef *hRS)
{
//-------------CALL RS CALLBACKS------------
/* IF NO ERROR OCCURS */
if(hRS->huart->ErrorCode == 0)
{
hRS->htim->Instance->CNT = 0; // reset cnt;
/* Start timeout */
if(hRS->sRS_Timeout) // if timeout setted
if((hRS->huart->RxXferCount+1 == hRS->huart->RxXferSize) && RS_Is_RX_Busy(hRS)) // if first byte is received and receive is active
{
hRS->htim->Instance->ARR = hRS->sRS_Timeout; // reset cnt;
HAL_TIM_Base_Start_IT(hRS->htim);
RS_Set_RX_Active_Flags(hRS);
}
/* RX Callback */
if (( hRS->huart->RxXferCount == 0U) && RS_Is_RX_Busy(hRS) && // if all bytes are received and receive is active
hRS->huart->RxState != HAL_UART_STATE_BUSY_RX) // also check that receive "REALLY" isnt busy
RS_UART_RxCpltCallback(hRS);
/* TX Callback */
if (( hRS->huart->TxXferCount == 0U) && RS_Is_TX_Busy(hRS) && // if all bytes are transmited and transmit is active
hRS->huart->gState != HAL_UART_STATE_BUSY_TX) // also check that receive "REALLY" isnt busy
RS_UART_TxCpltCallback(hRS);
}
//----------------ERRORS HANDLER----------------
else
{
/* de-init uart transfer */
RS_Abort(hRS, ABORT_RS);
RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
// later, maybe, will be added specific handlers for err
}
}
/**
* @brief Handler for TIM.
* @param hRS - указатель на хендлер RS.
* @note Попадание сюда = таймаут и перезапуск RS приема
* Добавить вызов этой функции в TIMx_IRQHandler() после HAL_TIM_IRQHandler().
*/
void RS_TIM_Handler(RS_HandleTypeDef *hRS)
{
HAL_TIM_Base_Stop_IT(hRS->htim);
RS_Abort(hRS, ABORT_RS);
RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
}
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE---------------
/**
* @brief Respond accord to received message.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @return RS_RES - статус о результате ответа на комманду.
* @note Обработка принятой комманды и ответ на неё.
*/
__weak RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg)
{
/* Redefine function for user purposes */
return RS_ERR;
}
/**
* @brief Collect message in buffer to transmit it.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @param msg_uart_buff - указатель на буффер UART.
* @return RS_RES - статус о результате заполнения буфера.
* @note Заполнение буффера UART из структуры сообщения.
*/
__weak RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)
{
/* Redefine function for user purposes */
return RS_ERR;
}
/**
* @brief Parse message from buffer to process it.
* @param hRS - указатель на хендлер RS.
* @param RS_msg - указатель на структуру сообщения.
* @param msg_uart_buff - указатель на буффер UART.
* @return RS_RES - статус о результате заполнения структуры.
* @note Заполнение структуры сообщения из буффера UART.
*/
__weak RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff)
{
/* Redefine function for user purposes */
return RS_ERR;
}
/**
* @brief Define size of RX Message that need to be received.
* @param hRS - указатель на хендлер RS.
* @param rx_data_size - указатель на переменную для записи кол-ва байт для принятия.
* @return RS_RES - статус о корректности рассчета кол-ва байт для принятия.
* @note Определение сколько байтов надо принять по протоколу.
*/
__weak RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hRS, uint32_t *rx_data_size)
{
/* Redefine function for user purposes */
return RS_ERR;
}
//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE---------------
//-------------------------------------------------------------------

257
Core/Modbus/rs_message.h Normal file
View File

@@ -0,0 +1,257 @@
/**
**************************************************************************
* @file rs_message.h
* @brief Заголовочный файл для модуля реализации протоколов по RS/UART.
**************************************************************************
* @defgroup RS_TOOLS
* @brief Всякое для работы по UART/RS
**************************************************************************
@details
**************************************************************************
Для настройки RS/UART под нужный протокол, необходимо:
- Определить структуру сообщения RS_MsgTypeDef и
дефайны RX_FIRST_PART_SIZE и MSG_SIZE_MAX.
- Подключить этот файл в раздел rs_message.h.
- Определить функции для обработки сообщения: RS_Parse_Message(),
RS_Collect_Message(), RS_Response(), RS_Define_Size_of_RX_Message()
- Добавить UART/TIM Handler в Хендлер используемых UART/TIM.
Так же данный модуль использует счетчики
**************************************************************************
@verbatim
Визуальное описание. Форматирование сохраняется как в коде.
@endverbatim
*************************************************************************/
#ifndef __RS_LIB_H_
#define __RS_LIB_H_
#include "modbus.h"
#include "crc_algs.h"
/////////////////////////////////////////////////////////////////////
////////////////////////////---DEFINES---////////////////////////////
/* Check that all defines required by RS are defined */
#ifndef MSG_SIZE_MAX
#error Define MSG_SIZE_MAX (Maximum size of message). This is necessary to create buffer for UART.
#endif
#ifndef RX_FIRST_PART_SIZE
#error Define RX_FIRST_PART_SIZE (Size of first part of message). This is necessary to receive the first part of the message, from which determine the size of the remaining part of the message.
#endif
/* Clear message-uart buffer */
#define RS_Clear_Buff(_buff_) for(int i=0; i<MSG_SIZE_MAX;i++) _buff_[i] = NULL
/* Set/Reset flags */
#define RS_Set_Free(_hRS_) _hRS_->f.RS_Busy = 0
#define RS_Set_Busy(_hRS_) _hRS_->f.RS_Busy = 1
#define RS_Set_RX_Flags(_hRS_) _hRS_->f.RX_Busy = 1; _hRS_->f.RX_Done = 0; _hRS_->f.RX_Half = 0
#define RS_Set_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 1
#define RS_Set_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 1; _hRS_->f.TX_Done = 0
#define RS_Reset_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 0
#define RS_Reset_RX_Flags(_hRS_) RS_Reset_RX_Active_Flags(_hRS_); _hRS_->f.RX_Busy = 0; _hRS_->f.RX_Done = 0; _hRS_->f.RX_Half = 0
#define RS_Reset_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 0; _hRS_->f.TX_Done = 0
#define RS_Set_RX_End_Flag(_hRS_) _hRS_->f.RX_Done = 1;
#define RS_Set_TX_End_Flag(_hRS_) _hRS_->f.TX_Done = 1
#define RS_Set_RX_End(_hRS_) RS_Reset_RX_Flags(_hRS_); RS_Set_RX_End_Flag(_hRS_)
#define RS_Set_TX_End(_hRS_) RS_Reset_TX_Flags(_hRS_); RS_Set_TX_End_Flag(_hRS_)
/* Clear all RS stuff */
#define RS_Clear_All(_hRS_) RS_Clear_Buff(_hRS_->pBufferPtr); RS_Reset_RX_Flags(_hRS_); RS_Reset_TX_Flags(_hRS_);
//#define MB_Is_RX_Busy(_hRS_) ((_hRS_->huart->gState&HAL_USART_STATE_BUSY_RX) == HAL_USART_STATE_BUSY_RX)
//#define MB_Is_TX_Busy(_hRS_) ((_hRS_->huart->gState&HAL_USART_STATE_BUSY_RX) == HAL_USART_STATE_BUSY_TX)
#define RS_Is_RX_Busy(_hRS_) (_hRS_->f.RX_Busy == 1)
#define RS_Is_TX_Busy(_hRS_) (_hRS_->f.TX_Busy == 1)
#ifndef RS_EnableReceive
#define RS_EnableReceive()
#endif
#ifndef RS_EnableTransmit
#define RS_EnableTransmit()
#endif
////////////////////////////---DEFINES---////////////////////////////
/////////////////////////////////////////////////////////////////////
///////////////////////---STRUCTURES & ENUMS---//////////////////////
//------------------ENUMERATIONS--------------------
/** @brief Enums for respond CMD about RS status */
typedef enum // RS_StatusTypeDef
{
/* IN-CODE STATUS (start from 0x01, and goes up)*/
/*0x01*/ RS_OK = 0x01,
/*0x02*/ RS_ERR,
/*0x03*/ RS_ABORTED,
/*0x04*/ RS_BUSY,
/*0x05*/ RS_SKIP,
/*0x06*/ RS_COLLECT_MSG_ERR,
/*0x07*/ RS_PARSE_MSG_ERR,
// reserved values
// /*0x00*/ RS_UNKNOWN_ERR = 0x00, ///< reserved for case, if no one error founded (nothing changed response from zero)
}RS_StatusTypeDef;
/** @brief Enums for RS Modes */
typedef enum // RS_ModeTypeDef
{
SLAVE_ALWAYS_WAIT = 0x01, ///< Slave mode with infinity waiting
SLAVE_TIMEOUT_WAIT = 0x02, ///< Slave mode with waiting with timeout
// MASTER = 0x03, ///< Master mode
}RS_ModeTypeDef;
/** @brief Enums for RS UART Modes */
typedef enum // RS_ITModeTypeDef
{
BLCK_MODE = 0x00, ///< Blocking mode
IT_MODE = 0x01, ///< Interrupt mode
}RS_ITModeTypeDef;
/** @brief Enums for Abort modes */
typedef enum // RS_AbortTypeDef
{
ABORT_TX = 0x01, ///< Abort transmit
ABORT_RX = 0x02, ///< Abort receive
ABORT_RX_TX = 0x03, ///< Abort receive and transmit
ABORT_RS = 0x04, ///< Abort uart and reset RS structure
}RS_AbortTypeDef;
/** @brief Enums for RX Size modes */
typedef enum // RS_RXSizeTypeDef
{
RS_RX_Size_Const = 0x01, ///< size of receiving message is constant
RS_RX_Size_NotConst = 0x02, ///< size of receiving message isnt constant
}RS_RXSizeTypeDef;
//-----------STRUCTURE FOR HANDLE RS------------
/** @brief Struct for flags RS */
typedef struct
{
unsigned RX_Half:1; ///< flag: 0 - receiving msg before ByteCnt, 0 - receiving msg after ByteCnt
unsigned RS_Busy:1; ///< flag: 1 - RS is busy, 0 - RS isnt busy
unsigned RX_Ongoing:1; ///< flag: 1 - receiving data right now, 0 - waiting for receiving data
unsigned RX_Busy:1; ///< flag: 1 - receiving is active, 0 - receiving isnt active
unsigned TX_Busy:1; ///< flag: 1 - transmiting is active, 0 - transmiting isnt active
unsigned RX_Done:1; ///< flag: 1 - receiving is done, 0 - receiving isnt done
unsigned TX_Done:1; ///< flag: 1 - transmiting is done, 0 - transmiting isnt done
// setted by user
unsigned MessageHandled:1; ///< flag: 1 - RS command is handled, 0 - RS command isnt handled yet
unsigned EchoResponse:1; ///< flag: 1 - response with received msg, 0 - response with own msg
unsigned DeferredResponse:1; ///< flag: 1 - response not in interrupt, 0 - response in interrupt
unsigned ReInit_UART:1; ///< flag: 1 - need to reinitialize uart, 0 - nothing
}RS_FlagsTypeDef;
/**
* @brief Handle for RS communication.
* @note Prefixes: h - handle, s - settings, f - flag
*/
typedef struct // RS_HandleTypeDef
{
/* MESSAGE */
uint8_t ID; ///< ID of RS "channel"
RS_MsgTypeDef *pMessagePtr; ///< pointer to message struct
uint8_t *pBufferPtr; ///< pointer to message buffer
uint32_t RS_Message_Size; ///< size of whole message, not only data
/* HANDLERS and SETTINGS */
UART_HandleTypeDef *huart; ///< handler for used uart
TIM_HandleTypeDef *htim; ///< handler for used tim
RS_ModeTypeDef sRS_Mode; ///< setting: slave or master @ref RS_ModeTypeDef
RS_ITModeTypeDef sRS_IT_Mode; ///< setting: 1 - IT mode, 0 - Blocking mode
uint16_t sRS_Timeout; ///< setting: timeout in ms
RS_RXSizeTypeDef sRS_RX_Size_Mode; ///< setting: 1 - not const, 0 - const
/* FLAGS */
RS_FlagsTypeDef f; ///< These flags for controling receive/transmit
/* RS STATUS */
RS_StatusTypeDef RS_STATUS; ///< RS status
}RS_HandleTypeDef;
extern RS_HandleTypeDef hmodbus1;
///////////////////////---STRUCTURES & ENUMS---//////////////////////
/////////////////////////////////////////////////////////////////////
///////////////////////////---FUNCTIONS---///////////////////////////
//----------------FUNCTIONS FOR PROCESSING MESSAGE-------------------
/*--------------------Defined by users purposes--------------------*/
/* Respond accord to received message */
RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
/* Collect message in buffer to transmit it */
RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff);
/* Parse message from buffer to process it */
RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff);
/* Define size of RX Message that need to be received */
RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hRS, uint32_t *rx_data_size);
//-------------------------GENERAL FUNCTIONS-------------------------
/*-----------------Should be called from main code-----------------*/
/* Start receive IT */
RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
/* Start transmit IT */
RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
/* Initialize UART and handle RS stucture */
RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr);
/* ReInitialize UART and RS receive */
HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_HandleTypeDef *suart);
/* Abort RS/UART */
RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode);
//-------------------------GENERAL FUNCTIONS-------------------------
//-------------------------------------------------------------------
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
/* Handle for starting receive */
RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
/* Handle for starting transmit */
RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg);
/* UART RX Callback: define behaviour after receiving parts of message */
RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS);
/* UART TX Callback: define behaviour after transmiting message */
RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS);
/* Handler for UART */
void RS_UART_Handler(RS_HandleTypeDef *hRS);
/* Handler for TIM */
void RS_TIM_Handler(RS_HandleTypeDef *hRS);
//--------------------CALLBACK/HANDLER FUNCTIONS---------------------
///////////////////////////---FUNCTIONS---///////////////////////////
#ifndef printf_rs_err
#define printf_rs_err(...)
#endif
#ifndef printf_rs
#define printf_rs(...)
#endif
#endif // __RS_LIB_H_

View File

@@ -19,11 +19,13 @@
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "canEmu.h"
#include "rs_message.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -56,6 +58,7 @@ void SystemClock_Config(void);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
CANEmu_HandleTypeDef hcanemu;
int flag_manual = 0;
/* USER CODE END 0 */
/**
@@ -88,16 +91,50 @@ int main(void)
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
CANEmu_Init(&hcanemu, 125000);
hcanemu.header.StdId = 0x123;
MODBUS_FirstInit();
RS_Receive_IT(&hmodbus1, &MODBUS_MSG);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(100);
if(flag_manual == 0)
{
// can message
hcanemu.header.IDE = MB_DATA.Coils.HEADER_IDE;
hcanemu.header.RTR = MB_DATA.Coils.HEADER_RTR;
hcanemu.bitrate_bps = (uint32_t)MB_DATA.HoldRegs.CAN_BITRATE_KBPS*1000;
hcanemu.header.ExtId = ((uint32_t)MB_DATA.HoldRegs.CAN_ID_HI << 16) || MB_DATA.HoldRegs.CAN_ID_LO;
hcanemu.header.StdId = hcanemu.header.ExtId;
hcanemu.header.DLC = (uint8_t)MB_DATA.HoldRegs.CAN_DLC & 0xF;
hcanemu.data[0] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_0;
hcanemu.data[1] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_1;
hcanemu.data[2] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_2;
hcanemu.data[3] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_3;
hcanemu.data[4] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_4;
hcanemu.data[5] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_5;
hcanemu.data[6] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_6;
hcanemu.data[7] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_7;
// errors
hcanemu.errors.FF_SRS = MB_DATA.Coils.FLIP_SRS;
hcanemu.errors.FF_IDE = MB_DATA.Coils.FLIP_IDE;
hcanemu.errors.FF_RTR = MB_DATA.Coils.FLIP_RTR;
hcanemu.errors.FF_R1 = MB_DATA.Coils.FLIP_R1;
hcanemu.errors.FF_R0 = MB_DATA.Coils.FLIP_R0;
hcanemu.errors.MSGID = MB_DATA.Coils.FLIP_MSGID_BIT;
hcanemu.errors.DATA = MB_DATA.Coils.FLIP_DATA_BIT;
hcanemu.errors.CRC_ERR = MB_DATA.Coils.FLIP_CRC_BIT;
hcanemu.errors.STUFF_BITS = MB_DATA.Coils.DISABLE_STUFF_BITS;
}
HAL_Delay(hcanemu.period_ms);
CANEmu_SendFrame(&hcanemu);
/* USER CODE END WHILE */

View File

@@ -25,6 +25,7 @@
/* USER CODE END 0 */
TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim3;
/* TIM2 init function */
void MX_TIM2_Init(void)
@@ -65,6 +66,46 @@ void MX_TIM2_Init(void)
/* USER CODE END TIM2_Init 2 */
}
/* TIM3 init function */
void MX_TIM3_Init(void)
{
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM3_Init 1 */
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 7200;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
@@ -81,6 +122,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM2_MspInit 1 */
}
else if(tim_baseHandle->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspInit 0 */
/* USER CODE END TIM3_MspInit 0 */
/* TIM3 clock enable */
__HAL_RCC_TIM3_CLK_ENABLE();
/* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
@@ -97,6 +149,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM2_MspDeInit 1 */
}
else if(tim_baseHandle->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspDeInit 0 */
/* USER CODE END TIM3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM3_CLK_DISABLE();
/* USER CODE BEGIN TIM3_MspDeInit 1 */
/* USER CODE END TIM3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */

117
Core/Src/usart.c Normal file
View File

@@ -0,0 +1,117 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file usart.c
* @brief This file provides code for the configuration
* of the USART instances.
******************************************************************************
* @attention
*
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "usart.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
UART_HandleTypeDef huart1;
/* USART1 init function */
void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */
}
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 */
/* USER CODE END USART1_MspInit 0 */
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 */
/* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
/* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

File diff suppressed because one or more lines are too long

View File

@@ -148,39 +148,22 @@
<Name>-U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>183</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134225938</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\Core\CANEmu\canform.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CANEmu\../Core/CANEmu/canform.c\183</Expression>
</Bp>
</Breakpoint>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>hcanemu</ItemText>
<ItemText>hcanemu,0x0A</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>can_bits</ItemText>
<ItemText>MB_DATA,0x0A</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>raw_len,0x0A</ItemText>
<ItemText>flag_manual</ItemText>
</Ww>
</WatchWindow1>
<Tracepoint>
@@ -237,7 +220,7 @@
<Group>
<GroupName>Application/MDK-ARM</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@@ -257,7 +240,7 @@
<Group>
<GroupName>Application/User/Core</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@@ -304,6 +287,18 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/usart.c</PathWithFileName>
<FilenameWithoutPath>usart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/stm32f1xx_it.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_it.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@@ -311,7 +306,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -331,7 +326,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>7</FileNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -343,7 +338,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>8</FileNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -355,7 +350,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -367,7 +362,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -379,7 +374,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -391,7 +386,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -403,7 +398,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -415,7 +410,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -427,7 +422,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -439,7 +434,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -451,7 +446,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -463,7 +458,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -475,7 +470,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -485,6 +480,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@@ -495,7 +502,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -515,7 +522,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -527,7 +534,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>24</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -539,7 +546,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -551,7 +558,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>26</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -563,6 +570,110 @@
</File>
</Group>
<Group>
<GroupName>Modbus</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\crc_algs.c</PathWithFileName>
<FilenameWithoutPath>crc_algs.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\crc_algs.h</PathWithFileName>
<FilenameWithoutPath>crc_algs.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\modbus.c</PathWithFileName>
<FilenameWithoutPath>modbus.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>30</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\modbus.h</PathWithFileName>
<FilenameWithoutPath>modbus.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\modbus_config.h</PathWithFileName>
<FilenameWithoutPath>modbus_config.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\modbus_data.h</PathWithFileName>
<FilenameWithoutPath>modbus_data.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\rs_message.c</PathWithFileName>
<FilenameWithoutPath>rs_message.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>34</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Modbus\rs_message.h</PathWithFileName>
<FilenameWithoutPath>rs_message.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>

View File

@@ -19,7 +19,7 @@
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F1xx_DFP.2.4.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll></FlashDriverDll>
@@ -341,7 +341,7 @@
<MiscControls></MiscControls>
<Define>USE_HAL_DRIVER,STM32F103xB</Define>
<Undefine></Undefine>
<IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\Core\CANEmu</IncludePath>
<IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../Core/CANEmu;..\Core\Modbus</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -410,6 +410,62 @@
<FileType>1</FileType>
<FilePath>../Core/Src/tim.c</FilePath>
</File>
<File>
<FileName>usart.c</FileName>
<FileType>1</FileType>
<FilePath>../Core/Src/usart.c</FilePath>
<FileOption>
<CommonProperty>
<UseCPPCompiler>2</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>2</AlwaysBuild>
<GenerateAssemblyFile>2</GenerateAssemblyFile>
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
<Cads>
<interw>2</interw>
<Optim>0</Optim>
<oTime>2</oTime>
<SplitLS>2</SplitLS>
<OneElfS>2</OneElfS>
<Strict>2</Strict>
<EnumInt>2</EnumInt>
<PlainCh>2</PlainCh>
<Ropi>2</Ropi>
<Rwpi>2</Rwpi>
<wLevel>0</wLevel>
<uThumb>2</uThumb>
<uSurpInc>2</uSurpInc>
<uC99>2</uC99>
<uGnu>2</uGnu>
<useXO>2</useXO>
<v6Lang>0</v6Lang>
<v6LangP>0</v6LangP>
<vShortEn>2</vShortEn>
<vShortWch>2</vShortWch>
<v6Lto>2</v6Lto>
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
</FileArmAds>
</FileOption>
</File>
<File>
<FileName>stm32f1xx_it.c</FileName>
<FileType>1</FileType>
@@ -490,6 +546,62 @@
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_uart.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</FilePath>
<FileOption>
<CommonProperty>
<UseCPPCompiler>2</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>2</AlwaysBuild>
<GenerateAssemblyFile>2</GenerateAssemblyFile>
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
<Cads>
<interw>2</interw>
<Optim>0</Optim>
<oTime>2</oTime>
<SplitLS>2</SplitLS>
<OneElfS>2</OneElfS>
<Strict>2</Strict>
<EnumInt>2</EnumInt>
<PlainCh>2</PlainCh>
<Ropi>2</Ropi>
<Rwpi>2</Rwpi>
<wLevel>0</wLevel>
<uThumb>2</uThumb>
<uSurpInc>2</uSurpInc>
<uC99>2</uC99>
<uGnu>2</uGnu>
<useXO>2</useXO>
<v6Lang>0</v6Lang>
<v6LangP>0</v6LangP>
<vShortEn>2</vShortEn>
<vShortWch>2</vShortWch>
<v6Lto>2</v6Lto>
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
</FileArmAds>
</FileOption>
</File>
</Files>
</Group>
<Group>
@@ -527,6 +639,51 @@
</File>
</Files>
</Group>
<Group>
<GroupName>Modbus</GroupName>
<Files>
<File>
<FileName>crc_algs.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\Modbus\crc_algs.c</FilePath>
</File>
<File>
<FileName>crc_algs.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\Modbus\crc_algs.h</FilePath>
</File>
<File>
<FileName>modbus.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\Modbus\modbus.c</FilePath>
</File>
<File>
<FileName>modbus.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\Modbus\modbus.h</FilePath>
</File>
<File>
<FileName>modbus_config.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\Modbus\modbus_config.h</FilePath>
</File>
<File>
<FileName>modbus_data.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\Modbus\modbus_data.h</FilePath>
</File>
<File>
<FileName>rs_message.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\Modbus\rs_message.c</FilePath>
</File>
<File>
<FileName>rs_message.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\Modbus\rs_message.h</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>

Binary file not shown.

View File

@@ -27,9 +27,12 @@ Project File Date: 08/04/2025
<h2>Output:</h2>
*** Using Compiler 'V6.19', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'CANEmu'
compiling canform.c...
compiling canEmu.c...
compiling main.c...
compiling modbus.c...
compiling rs_message.c...
linking...
Program Size: Code=8230 RO-data=302 RW-data=12 ZI-data=2284
Program Size: Code=11542 RO-data=338 RW-data=12 ZI-data=3116
FromELF: creating hex file...
"CANEmu\CANEmu.axf" - 0 Error(s), 0 Warning(s).

View File

@@ -1,8 +1,8 @@
:020000040800F2
:10000000F808002089010008AD1600086D150008E9
:10001000A916000891020008391A00080000000023
:100020000000000000000000000000005D17000854
:100030008D030008000000001D170008B517000818
:10000000380C002089010008651E0008CD1B00087F
:10001000611E0008910200088D2500080000000004
:100020000000000000000000000000009121000816
:100030008D03000800000000D51E0008E92100081B
:10004000A3010008A3010008A3010008A301000800
:10005000A3010008A3010008A3010008A3010008F0
:10006000A3010008A3010008A3010008A3010008E0
@@ -17,17 +17,17 @@
:1000F00000F03AF80AA090E8000C82448344AAF188
:100100000107DA4501D100F02FF8AFF2090EBAE885
:100110000F0013F0010F18BFFB1A43F0010318473B
:100120001420000034200000103A24BF78C878C1A1
:10012000282D0000482D0000103A24BF78C878C15F
:10013000FAD8520724BF30C830C144BF04680C60ED
:10014000704700000023002400250026103A28BF35
:1001500078C1FBD8520728BF30C148BF0B60704739
:100160001FB51FBD10B510BD00F058F81146FFF7C0
:10017000F7FF01F083FF00F076F803B4FFF7F2FF1A
:10017000F7FF02F02DFD00F076F803B4FFF7F2FF71
:1001800003BC00F07DF8000009488047094800479B
:10019000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737
:1001A000FEE7FEE704480549054A064B7047000094
:1001B00029180008ED000008F8020020F8080020C7
:1001C000F8040020F80400204FF0000200B51346A8
:1001B0005D220008ED00000838060020380C002001
:1001C00038080020380800204FF0000200B5134620
:1001D00094469646203922BFA0E80C50A0E80C5067
:1001E000B1F12001BFF4F7AF090728BFA0E80C5018
:1001F00048BF0CC05DF804EB890028BF40F8042B11
@@ -44,495 +44,704 @@
:1002A0004FF08041086840F00100086040F61041BE
:1002B000C4F201010120086002B0704780B584B02B
:1002C00003900398006A08B9FFE75DE0039800F126
:1002D0001801828CADF80820029A01F0E5FC039821
:1002D0001801028DADF80820029A02F08FFA0398F7
:1002E000016A4AF20020C0F24A4000EB5100B0FB24
:1002F000F1F040F27001C2F2000108602420C4F263
:1003000000000068ADF80600BDF80600ADF8040076
:1003100000200090FFE7009840F27411C2F2000143
:100320000968884229D2FFE7009940F27400C2F2BE
:1003100000200090FFE7009840F2F831C2F200019F
:100320000968884229D2FFE7009940F2F720C2F21B
:100330000000405C38B1FFE740F61041C4F2010113
:100340000120086006E040F61441C4F201010120DA
:100350000860FFE740F27000C2F200000168BDF8DB
:1003600004000844ADF80400BDF8040001F0ACFE40
:1003600004000844ADF80400BDF8040002F024FDC8
:10037000FFE7009801300090CDE740F61041C4F24D
:10038000010101200860FFE704B080BD7047000054
:1003900081B0EFF3108072B60090FFE7FEE7000037
:1003A00080B584B0039000F0C5F9029003980190E5
:1003B0000198013048B1FFE740F20400C2F20000AA
:1003C0000178019808440190FFE7FFE700F0B2F9D7
:1003D0000299401A0199884201D2FFE7F6E704B07A
:1003E00080BD000090B00F900E9100200D900990FC
:1003F000FFE70E9800680D99C840002800F07F8143
:10040000FFE70D99012088400C900E9800680C9928
:1004100008400B900B980C99884240F06C81FFE7E4
:100420000E9840680590002851D0FFE705980128F4
:100430003AD0FFE7059802283FD0FFE70598032848
:100440005FD0FFE70598112832D0FFE70598122802
:1004500038D0FFE705980021C1F21101884236D05B
:10046000FFE705980021C1F2120188422FD0FFE773
:1004700005980021C1F22101884228D0FFE70598A4
:100480000021C1F22201884221D0FFE70598002116
:10049000C1F2310188421AD0FFE705980021C1F26C
:1004A0003201884213D02FE00E98C06809902CE0EA
:1004B0000E98C0680430099027E00E98C068083094
:1004C000099022E00E98C0680C3009901DE00E984B
:1004D000806818B9FFE70420099011E00E98806841
:1004E000012806D1FFE7082009900C980F990861B0
:1004F00005E0082009900C980F994861FFE7FFE795
:1005000003E00020099000E0FFE70B98FF2803D8E4
:10051000FFE70F98049003E00F9804300490FFE782
:10052000049808900B98FF2804D8FFE70D988000E6
:10053000039006E00D996FF01F0000EB810003901F
:10054000FFE70398079008980068079A0F219140E9
:100550008843099991400843089908600E98C0792A
:10056000C006002840F1C680FFE7FFE741F218000F
:10057000C4F20200016841F001010160006800F06E
:10058000010006900698FFE70D9820F0030008216F
:10059000C4F2010140580A900D9800F00300810058
:1005A0000F2000FA01F10A9888430A900F9840F64C
:1005B0000001C4F20101884203D1FFE7002002904C
:1005C00026E00F9840F60041C4F20101884203D1B1
:1005D000FFE70120019018E00F9841F20001C4F2FA
:1005E0000101884203D1FFE7022000900AE00F9941
:1005F00041F20042C4F201020420914208BF0320EC
:100600000090FFE700980190FFE701980290FFE754
:1006100002980D9901F00301890000FA01F10A988E
:1006200008430A900A980D9921F003010822C4F2A8
:10063000010288500E988079C006002809D5FFE78E
:100640000B9A40F20841C4F20101086810430860A7
:1006500008E00B9A40F20841C4F201010868904397
:100660000860FFE70E9880798006002809D5FFE72B
:100670000B9A40F20C41C4F2010108681043086073
:1006800008E00B9A40F20C41C4F201010868904363
:100690000860FFE70E9880798007002809D5FFE7FA
:1006A0000B9A40F20441C4F201010868104308604B
:1006B00008E00B9A40F20441C4F20101086890433B
:1006C0000860FFE70E988079C00748B1FFE70B9AF2
:1006D00040F20041C4F2010108681043086008E0DC
:1006E0000B9A40F20041C4F201010868904308608F
:1006F000FFE7FFE7FFE70D9801300D9079E610B0B6
:100700007047000082B00190ADF802108DF8012012
:100710009DF8010028B1FFE7BDF8020001990861CA
:1007200005E0BDF80200000401990861FFE702B08E
:100730007047000040F2F020C2F2000000687047ED
:1007400040F20400C2F20000027840F2F021C2F24E
:1007500000010868104408607047000080B542F24C
:100760000001C4F20201086840F010000860032094
:1007700000F08CF80F2000F005F800F03BF80020A6
:1007800080BD000080B582B0009040F20000C2F24F
:100790000000006840F20401C2F200010A784FF440
:1007A0007A71B1FBF2F1B0FBF1F000F03FFD20B146
:1007B000FFE701208DF8070018E000980F280DD8FA
:1007C000FFE700994FF0FF30002200F045F8009855
:1007D00040F20801C2F20001086003E001208DF838
:1007E000070003E000208DF80700FFE79DF80700F1
:1007F00002B080BD83B0FFE741F21800C4F20200EE
:10080000016841F001010160006800F00100029000
:100810000298FFE7FFE741F21C00C4F20200016802
:1008200041F080510160006800F080500190019813
:10083000FFE7FFE70421C4F2010108680090009877
:1008400020F0E0600090009840F000700090009868
:100850000860FFE703B0704780B586B08DF81700D9
:10086000049103920020029001F0E8F802909DF9B3
:100870001700019002980499039A00F019FF0146AD
:10088000019801F0E3F806B080BD000080B582B0A9
:100890000190019801F0FCF802B080BD80B584B0F1
:1008A00002900191029820B9FFE701208DF80F0016
:1008B0001BE1019842F20001C4F20201096801F053
:1008C0000701884216D9FFE742F20000C4F2020095
:1008D000016821F00701019A11430160006800F0EE
:1008E00007000199884204D0FFE701208DF80F002E
:1008F000FBE0FFE702980078800700282AD5FFE791
:10090000029800784007002809D5FFE741F204016A
:10091000C4F20201086840F4E0600860FFE7029852
:1009200000780007002809D5FFE741F20401C4F26E
:100930000201086840F460500860FFE741F20401DA
:10094000C4F20201086820F0F000029A9268104395
:100950000860FFE702980078C007002860D0FFE732
:100960000298406801280ED1FFE741F20000C4F26E
:10097000020000688003002804D4FFE701208DF8FE
:100980000F00B2E021E00298406802280ED1FFE794
:1009900041F20000C4F2020000688001002804D483
:1009A000FFE701208DF80F009FE00DE041F200000D
:1009B000C4F2020000688007002804D4FFE7012089
:1009C0008DF80F0091E0FFE7FFE741F20401C4F268
:1009D0000201086820F00300029A52681043086080
:1009E000FFF7A8FE0090FFE741F20400C4F2020006
:1009F000006800F00C0002994968B0EB810F0ED03E
:100A0000FFE7FFF797FE0099401A41F289318842CB
:100A100004D3FFE703208DF80F0066E0E4E7FFE76B
:100A2000019842F20001C4F20201096801F00701D5
:100A3000884216D2FFE742F20000C4F202000168C9
:100A400021F00701019A11430160006800F00700DE
:100A50000199884204D0FFE701208DF80F0044E09F
:100A6000FFE702980078400700280CD5FFE741F225
:100A70000401C4F20201086820F4E060029AD2681E
:100A800010430860FFE702980078000700280DD5A2
:100A9000FFE741F20401C4F20201086820F460504B
:100AA000029A126940EAC2000860FFE700F022F8EB
:100AB00041F20401C4F202010968C9B20A0942F212
:100AC0001211C0F60001895CC84040F20001C2F278
:100AD0000001086040F20800C2F200000068FFF761
:100AE00051FE00208DF80F00FFE79DF80F0004B0C5
:100AF00080BD000086B00020059004900390029015
:100B0000019041F20400C4F20200006805900598CB
:100B100000F00C000146009100283FD0FFE700984C
:100B2000042804D0FFE70098082806D037E041F2F7
:100B30000020C0F27A00019037E00598C0F38341AD
:100B400042F22210C0F60000405C02909DF81600B0
:100B5000C007C0B1FFE741F20400C4F20200006820
:100B6000C0F3404142F23210C0F60000405C0490F5
:100B7000029841F20021C0F27A0148430499B0FB87
:100B8000F1F0039007E0029840F60011C0F23D0139
:100B900048430390FFE70398019006E0FFE741F226
:100BA0000020C0F27A000190FFE7019806B070477C
:100BB00080B586B00490049820B9FFE701208DF835
:100BC00017002EE304980078C007002800F0AE80DC
:100BD000FFE741F20400C4F20200006800F00C00DC
:100BE000042813D0FFE741F20400C4F202000068B9
:100BF00000F00C0008281BD1FFE741F20400C4F20A
:100C000002000068C003002812D5FFE741F200008F
:100C1000C4F2020000688003002808D5FFE70498AA
:100C2000406820B9FFE701208DF81700F9E27CE069
:100C3000FFE704984068B0F5803F09D1FFE741F233
:100C40000001C4F20201086840F48030086032E01C
:100C50000498406868B9FFE741F20001C4F202015C
:100C6000086820F480300860086820F4802008605C
:100C700020E004984068B0F5A02F0DD1FFE741F2C5
:100C80000001C4F20201086840F48020086008688E
:100C900040F4803008600CE041F20001C4F202012F
:100CA000086820F480300860086820F4802008601C
:100CB000FFE7FFE7FFE7FFE704984068D0B1FFE7F1
:100CC000FFF738FD0390FFE741F20000C4F2020095
:100CD0000068800300280CD4FFE7FFF72BFD039981
:100CE000401A652804D3FFE703208DF8170098E227
:100CF000EAE719E0FFF71EFD0390FFE741F200006D
:100D0000C4F202000068800300280CD5FFE7FFF75B
:100D100011FD0399401A652804D3FFE703208DF8DD
:100D200017007EE2EAE7FFE7FFE7FFE704980078B5
:100D30008007002840F18D80FFE741F20400C4F2F3
:100D40000200006810F00C0F13D0FFE741F204001E
:100D5000C4F20200006800F00C00082829D1FFE767
:100D600041F20400C4F202000068C003002820D44D
:100D7000FFE741F20000C4F202000068800700288B
:100D800009D5FFE704980069012804D0FFE7012096
:100D90008DF8170045E241F20001C4F20201086833
:100DA00020F0F800049A526940EAC2000860FFE7A8
:100DB0004EE00498006958B3FFE70021C4F24221D5
:100DC00001200860FFF7B6FC0390FFE741F2000046
:100DD000C4F202000068800700280CD4FFE7FFF788
:100DE000A9FC0399401A032804D3FFE703208DF8D8
:100DF000170016E2EAE741F20001C4F202010868B6
:100E000020F0F800049A526940EAC20008601EE02F
:100E10000021C4F2422100200860FFF78BFC039000
:100E2000FFE741F20000C4F20200006880070028DA
:100E30000CD5FFE7FFF77EFC0399401A032804D383
:100E4000FFE703208DF81700EBE1EAE7FFE7FFE794
:100E5000FFE7049800780007002848D5FFE70498CA
:100E6000806918B3FFE740F28041C4F242210120BB
:100E70000860FFF75FFC0390FFE741F22400C4F233
:100E800002000068800700280CD4FFE7FFF752FC3F
:100E90000399401A032804D3FFE703208DF81700B5
:100EA000BFE1EAE7012000F03BFC1FE040F2804197
:100EB000C4F2422100200860FFF73CFC0390FFE7EA
:100EC00041F22400C4F202000068800700280CD51B
:100ED000FFE7FFF72FFC0399401A032804D3FFE72D
:100EE00003208DF817009CE1EAE7FFE7FFE704988D
:100EF00000784007002840F1D880FFE700208DF8F7
:100F0000070041F21C00C4F202000068C000002883
:100F100013D4FFE7FFE741F21C00C4F202000168AE
:100F200041F080510160006800F08050009000980E
:100F3000FFE701208DF80700FFE747F20000C4F249
:100F400000000068C005002822D4FFE747F2000136
:100F5000C4F20001086840F480700860FFF7EAFB03
:100F60000390FFE747F20000C4F200000068C005EC
:100F700000280CD4FFE7FFF7DDFB0399401A652832
:100F800004D3FFE703208DF817004AE1EAE7FFE703
:100F9000FFE70498C068012809D1FFE741F220016A
:100FA000C4F20201086840F00100086031E00498D2
:100FB000C06868B9FFE741F22001C4F20201086885
:100FC00020F001000860086820F0040008601FE0BD
:100FD0000498C06805280DD1FFE741F22001C4F252
:100FE0000201086840F004000860086840F0010051
:100FF00008600CE041F22001C4F20201086820F010
:1010000001000860086820F004000860FFE7FFE7BF
:10101000FFE7FFE70498C068E0B1FFE7FFF78AFB4E
:101020000390FFE741F22000C4F20200006880074D
:1010300000280ED4FFE7FFF77DFB0399401A41F229
:101040008931884204D3FFE703208DF81700E8E0D8
:10105000E8E71BE0FFF76EFB0390FFE741F220009B
:10106000C4F202000068800700280ED5FFE7FFF7F2
:1010700061FB0399401A41F28931884204D3FFE7AA
:1010800003208DF81700CCE0E8E7FFE79DF80700A4
:10109000012809D1FFE741F21C01C4F202010868EE
:1010A00020F080500860FFE7FFE70498C06900283F
:1010B00000F0B380FFE741F20400C4F202000068D0
:1010C00000F00C00082800F08280FFE70498C06957
:1010D00002285CD1FFE76021C4F2422100200860B1
:1010E000FFF728FB0390FFE741F20000C4F2020083
:1010F0000068800100280CD5FFE7FFF71BFB039970
:10110000401A032804D3FFE703208DF8170088E076
:10111000EAE70498006AB0F5803F0CD1FFE741F29E
:101120000401C4F20201086820F40030049A9268B5
:1011300010430860FFE741F20401C4F202010868AD
:1011400020F47410049B1A6A5B6A1A431043086007
:101150006021C4F2422101200860FFF7EBFA0390FE
:10116000FFE741F20000C4F202000068800100289D
:101170000CD4FFE7FFF7DEFA0399401A032804D3E3
:10118000FFE703208DF817004BE0EAE71EE060213F
:10119000C4F2422100200860FFF7CCFA0390FFE779
:1011A00041F20000C4F202000068800100280CD562
:1011B000FFE7FFF7BFFA0399401A032804D3FFE7BC
:1011C00003208DF817002CE0EAE7FFE724E00498FD
:1011D000C069012804D1FFE701208DF8170020E045
:1011E00041F20400C4F2020000680290029800F488
:1011F00080300499096A884208D1FFE7029800F418
:1012000070100499496A884204D0FFE701208DF8E4
:10121000170006E0FFE7FFE7FFE700208DF8170063
:10122000FFE79DF8170006B080BD000080B582B0D2
:101230000190019800F094FA02B080BD85B003904F
:101240000291FFE7039890F83C00012804D1FFE7E2
:1012500002208DF813005BE00399012081F83C0027
:10126000FFE7FFE70399022081F83D00039800683B
:10127000406801900398006880680090019820F011
:10128000700001900298016801980843019001984C
:101290000399096848600398006842F60041C4F267
:1012A0000101884218D0FFE703980068B0F1804F31
:1012B00012D0FFE70398006840F20041C4F2000139
:1012C000884209D0FFE70398006840F60001C4F2A5
:1012D000000188420ED1FFE7009820F080000090C6
:1012E00002984168009808430090009803990968A3
:1012F0008860FFE70399012081F83D00FFE703992B
:10130000002081F83C00FFE700208DF81300FFE784
:101310009DF8130005B0704780B582B0009000982A
:1013200020B9FFE701208DF807003FE0009890F812
:101330003D0040B9FFE70099002081F83C0000988B
:1013400000F038F8FFE70099022081F83D0000998D
:1013500051F8040B00F06AFA0099012081F8460068
:10136000FFE70099012081F83E00009981F83F00D5
:10137000009981F84000009981F84100FFE7FFE7FC
:101380000099012081F84200009981F843000099FA
:1013900081F84400009981F84500FFE70099012099
:1013A00081F83D0000208DF80700FFE79DF8070059
:1013B00002B080BD82B0019001980068B0F1804F0A
:1013C00010D1FFE7FFE741F21C00C4F20200016800
:1013D00041F001010160006800F0010000900098F8
:1013E000FFE7FFE702B0704780B586B00490039135
:1013F00000208DF80B00FFE7049890F83C000128CE
:1014000004D1FFE702208DF81700ABE0049901201A
:1014100081F83C00FFE7FFE70499022081F83D00D6
:101420000498006880680190019820F0770001908E
:10143000019820F47F400190019804990968886020
:10144000039800680090002872D0FFE700981028E9
:101450006ED0FFE7009820286AD0FFE70098302878
:1014600066D0FFE70098402855D0FFE70098502845
:1014700037D0FFE70098602840D0FFE70098702839
:101480000BD0FFE70098B0F5805F05D0FFE700982C
:10149000B0F5005F16D052E055E004980068039B59
:1014A0005A689968DB6800F045FA0498006880681B
:1014B0000190019840F07700019001980499096823
:1014C000886040E004980068039B5A689968DB686C
:1014D00000F030FA04980168886840F48040886021
:1014E00031E004980068039A5168D26800F052FA1B
:1014F00004980068502100F037FA24E0049800684E
:10150000039A5168D26800F06DFA0498006860216F
:1015100000F02AFA17E004980068039A5168D2682C
:1015200000F038FA04980068402100F01DFA0AE043
:10153000049800680399096800F016FA03E0012096
:101540008DF80B00FFE70499012081F83D00FFE7CB
:101550000499002081F83C00FFE79DF80B008DF80E
:101560001700FFE79DF8170006B080BDFFE7FEE714
:1015700080B58CB000200B900A9009900890FFE78E
:1015800041F21800C4F20200016841F0100101604C
:10159000006800F0100007900798FFE7FFE741F2AE
:1015A0001800C4F20200016841F0200101600068E7
:1015B00000F0200006900698FFE7FFE741F21800D0
:1015C000C4F20200016841F008010160006800F007
:1015D000080005900598FFE7FFE741F21800C4F204
:1015E0000200016841F004010160006800F004009D
:1015F00004900498FFE740F60040C4F20100039015
:101600000121019100220292FFF77CF8019A0299D0
:101610000398089209920A9102210B9108A9FEF7FA
:10162000E1FE0CB080BD000080B588B000210191C2
:1016300007910691059104910391029140F2A41043
:10164000C2F200004FF080420260416081604FF6BC
:10165000FF72C26001618161FFF75EFE18B1FFE7B2
:10166000FEF796FEFFE74FF48050049040F2A4107E
:10167000C2F2000004A9FFF7B7FE18B1FFE7FEF7BA
:1016800087FEFFE700200290039040F2A410C2F210
:10169000000002A9FFF7D2FD18B1FFE7FEF778FEC0
:1016A000FFE708B080BD0000FFE7FEE7FFE7FEE7C9
:1016B00088B0079006910592079800F00700049003
:1016C0000498C0F10700052803D3FFE70420019028
:1016D00004E00498C0F107000190FFE7019803902F
:1016E00004980430062803D8FFE70020009003E0A8
:1016F000049803380090FFE7009802900698039939
:10170000012202FA01F101390840029B9840059933
:101710009A40013A1140084308B0704770470000F2
:1017200082B00190019840F20001C2F20001096804
:10173000C90844F6D352C1F26202A1FB0221890911
:1017400048430090FFE700BFFFE70098411E00916B
:101750000028F8D1FFE702B0704700007047000092
:1017600080B582B0009000980138B0F1807F03D33B
:10177000FFE70120019019E0009801384EF21401B2
:10178000CEF2000108604FF0FF300F2100F05EF94B
:101790004EF21801CEF20001002008604EF2100255
:1017A000CEF20002072111600190FFE7019802B01C
:1017B00080BD000080B5FEF7C3FF80BD80B590B04E
:1017C00006A800902821FEF7FFFC0098002305934F
:1017D0000493039302930193012206924FF4803104
:1017E000079108930A9202220D920E914FF4E01194
:1017F0000F91FFF7DDF918B1FFE7FEF7C9FDFFE72D
:101800000F20019002210291002003904FF480628A
:101810000492059001A8FFF741F818B1FFE7FEF721
:10182000B7FDFFE710B080BD7047000083B00290A5
:101830000191029800680090029842F60041C4F2BB
:101840000101884215D0FFE70298B0F1804F10D017
:10185000FFE7029840F20041C4F20001884208D03C
:10186000FFE7029840F60001C4F2000188420AD165
:10187000FFE7009820F07000009001984168009800
:1018800008430090FFE7029842F60041C4F20101CC
:10189000884215D0FFE70298B0F1804F10D0FFE7E3
:1018A000029840F20041C4F20001884208D0FFE7EC
:1018B000029840F60001C4F2000188420AD1FFE715
:1018C000009820F4407000900198C1680098084387
:1018D0000090FFE7009820F08000019949690843D3
:1018E0000090009802990860019880680299C86287
:1018F0000198006802998862029842F60041C4F299
:101900000101884205D1FFE7019800690299086347
:10191000FFE702990120486102980069C00730B1D1
:10192000FFE70299086920F001000861FFE703B0B2
:101930007047000085B004900391029201930498CF
:1019400080680090009820F47F40009003980299EE
:10195000019A41EA0221014300980843009000984F
:101960000499886005B0704783B002900191029895
:1019700080680090009820F0700000900198009915
:10198000084340F00700009000980299886003B077
:101990007047000085B00490039102920498006A99
:1019A00000900499086A20F0010008620498806998
:1019B0000190019820F0F00001900299019840EA0E
:1019C00001100190009820F00A00009003990098FF
:1019D000084300900198049988610098049908626E
:1019E00005B0704785B00490039102920498006A94
:1019F00000900499086A20F0100008620498806939
:101A00000190019820F4704001900299019840EAF9
:101A100001300190009820F0A000009003990098F8
:101A200040EA011000900198049988610098049997
:101A3000086205B070470000FFE7FEE74EF60C5065
:101A4000CEF200000068C0F30220704782B08DF82B
:101A5000070000919DF9070000280AD4FFE70098CD
:101A600000019DF907104EF20042CEF200028854A8
:101A70000BE0009800019DF8071001F00F014EF6F1
:101A80001452CEF200028854FFE702B07047000003
:101A900083B00290029800F0070000904EF60C51BF
:101AA000CEF200010868019001984FF6FF02104045
:101AB00001900198009A40EA02200022C0F2FA52F6
:101AC000104301900198086003B0704783B0029002
:101AD00001918DF8032001980068FF280CD8FFE7DA
:101AE0009DF803000299DDF804C0DCF80020531CC7
:101AF000CCF800308854FFE703B0704780B586B05B
:101B00000590049103928DF80B309DF80B0001387D
:101B10000190FFE7019800280ED4FFE7059804998B
:101B2000039A019BDA4002F00102FFF7CFFFFFE7C3
:101B3000019801380190EDE706B080BD80B588B00E
:101B400084460A98CDF81CC00691059204938DF83E
:101B50000F00049900200860079800788DF80E00A7
:101B6000012000908DF80D00059804999DF80E2035
:101B7000FFF7ACFF00980290FFE7029806998842B1
:101B80003CD2FFE707980299405C8DF80700059862
:101B900004999DF80720FFF799FF9DF807009DF82D
:101BA0000E1088421DD1FFE79DF80D0001308DF821
:101BB0000D009DF80D00052812D1FFE79DF80F00DC
:101BC00050B9FFE7059804999DF80720B2FA82F210
:101BD0005209FFF77BFFFFE700208DF80D00FFE7BC
:101BE00007E001208DF80D009DF807008DF80E002C
:101BF000FFE7FFE7029801300290BEE708B080BD22
:101C000085B0049003910020ADF80A000190FFE731
:101C10000198039988422AD2FFE704980199405C11
:101C20008DF80300BDF80A00C0F380308DF8020083
:101C3000BDF80A004000ADF80A009DF803009DF8C9
:101C40000210484008D0FFE7BDF80A0044F299515D
:101C50004840ADF80A00FFE7BDF80A006FF3DF3037
:101C6000ADF80A00FFE7019801300190D0E7BDF818
:101C70000A0005B07047000081B00090009840F263
:101C8000EC21C2F20001096888420BD2FFE7009AFA
:101C900040F2EC11C2F20001885CB0FA80F0400919
:101CA0008854FFE701B0704780B5A6B02492BDF814
:101CB0009020ADF894202390229140F2EC21C2F2C2
:101CC00000010F9100220A6040F27810C2F2000079
:101CD000027040F2EC10C2F20000FFF7F7FE0F981E
:101CE0000068219023988068002858D1FFE7239846
:101CF00002686FF3DF2240F2EC10C2F200000C9099
:101D000040F2EC21C2F200010E910B23FFF7F6FE28
:101D10000C980E990A680B3A2092239A127BFFF7CF
:101D2000D5FE0C980E990A68013A1F9200220D9276
:101D3000FFF7CCFE0C980D9A0E990B68013B1E9391
:101D4000FFF7C4FE0E98006801381D909DF89400BE
:101D50008008C00720B1FFE71F98FFF78DFFFFE75E
:101D60009DF894004008C00720B1FFE71E98FFF7D8
:101D700083FFFFE79DF894000009C00720B1FFE74B
:101D80001D98FFF779FFFFE79DF894004009C00711
:101D900020B1FFE72098FFF76FFFFFE78AE0239865
:101DA000406820F060401C901C98C0F38A4240F2CA
:101DB000EC10C2F20000099040F2EC21C2F20001E6
:101DC0000B910B23FFF79AFE09980B990A680B3ABF
:101DD0001B9201220892FFF779FE089A09980B9945
:101DE0000B68013B1A93FFF771FE09980B990A687B
:101DF000013A19921C9A6FF39F421223FFF77EFE5D
:101E000009980B990A68123A1892239A127BFFF7E5
:101E10005DFE09980B990A68013A179200220A920E
:101E2000FFF754FE09980A9A0B990B68013B169329
:101E3000FFF74CFE0B980068013815909DF8940050
:101E4000C00720B1FFE71A98FFF716FFFFE79DF8DC
:101E500094004008C00720B1FFE71998FFF70CFF76
:101E6000FFE79DF894008008C00720B1FFE71798AE
:101E7000FFF702FFFFE79DF89400C008C00720B1FC
:101E8000FFE71698FFF7F8FEFFE79DF894000009BA
:101E9000C00720B1FFE71598FFF7EEFEFFE79DF8BA
:101EA00094004009C00720B1FFE71B98FFF7E4FE4C
:101EB000FFE7FFE72398006900F00F0240F2EC1003
:101EC000C2F2000040F2EC21C2F200010423FFF74D
:101ED00015FE2398C068002867D1FFE723980069A2
:101EE00000F00F008DF8530000208DF85200FFE73E
:101EF0009DF852109DF8532000209142079008DA77
:101F0000FFE79DF8521000200829B8BF0120079074
:101F1000FFE70798C007002846D0FFE740F2EC2013
:101F2000C2F200000068139022989DF85210405CA5
:101F30008DF84B002398007D012812D1FFE79DF812
:101F4000520006280DDBFFE740F2EC10C2F2000061
:101F500040F2EC21C2F2000100220823FFF7CEFD7F
:101F60000DE09DF84B2040F2EC10C2F2000040F270
:101F7000EC21C2F200010823FFF7C0FDFFE79DF846
:101F800094008009C00740B1FFE79DF8520020B9D6
:101F9000FFE71398FFF770FEFFE7FFE79DF8520099
:101FA00001308DF85200A3E7FFE740F2EC20C2F2C7
:101FB00000000590016840F2EC10C2F200000690AB
:101FC000FFF71EFE059902460698ADF848200A68FC
:101FD0001192BDF848200F23FFF790FD9DF8941053
:101FE0000020B0EBD11F04D0FFE71198FFF744FEAB
:101FF000FFE740F2EC10C2F20000029040F2EC2148
:10200000C2F20001039101220492FFF75FFD0298E2
:10201000039909689DF8952002F001026B461A6049
:1020200040F27402C2F2000240F27413C2F20003E2
:10203000FFF784FD02980399049AFFF747FD029881
:102040000399049AFFF742FD00201090FFE71098D3
:10205000062810DCFFE740F2EC10C2F2000040F26C
:10206000EC21C2F200010122FFF730FDFFE71098DA
:1020700001301090EBE726B080BD000080B582B043
:1020800000200190FEF76AFBFFF798FBFFF770FA5C
:10209000FFF7CAFA40F27C10C2F2000000904EF640
:1020A0004801C0F20101FEF7F5F8009940F2231053
:1020B0000860FFE76420FEF773F940F27C10C2F27B
:1020C0000000FEF7FBF8F5E783B0ADF80A0044F234
:1020D0004020C0F20F00019000200090FFE7242074
:1020E000C4F200000068BDF80A10401A00B2B0F156
:1020F000FF3F0CDCFFE700980130009044F24121E3
:10210000C0F20F01884201D3FFE700E0E7E703B028
:1021100070470000000000000000010203040607F1
:10212000080902030405060708090A0B0C0D0E0F27
:1021300010100102582100080000002010000000CB
:10214000280100086821000810000020E8080000AD
:10215000440100080000000000127A0001000000A5
:08216000100000000000000067
:1003A00083B0019000208DF80300019890F821009F
:1003B00002280DD0FFE7019904208863FFE7019927
:1003C000002081F82000FFE701208DF80B0021E0DC
:1003D00001980168086820F00E0008600198016823
:1003E000086820F0010008600198C16B026C0120D0
:1003F00090404860FFE70199012081F82100FFE764
:100400000199002081F82000FFE79DF803008DF896
:100410000B00FFE79DF80B0003B0704781B0009020
:100420000098806B01B0704780B584B0039000F0F5
:10043000C5F90290039801900198013048B1FFE797
:1004400040F20400C2F200000178019808440190D3
:10045000FFE7FFE700F0B2F90299401A01998842DC
:1004600001D2FFE7F6E704B080BD000090B00F9026
:100470000E9100200D900990FFE70E9800680D99ED
:10048000C840002800F07F81FFE70D9901208840D7
:100490000C900E9800680C9908400B900B980C99E2
:1004A000884240F06C81FFE70E9840680590002874
:1004B00051D0FFE7059801283AD0FFE705980228B8
:1004C0003FD0FFE7059803285FD0FFE70598112884
:1004D00032D0FFE70598122838D0FFE705980021B1
:1004E000C1F21101884236D0FFE705980021C1F220
:1004F000120188422FD0FFE705980021C1F22101A7
:10050000884228D0FFE705980021C1F222018842E5
:1005100021D0FFE705980021C1F2310188421AD0AD
:10052000FFE705980021C1F23201884213D02FE085
:100530000E98C06809902CE00E98C06804300990AD
:1005400027E00E98C0680830099022E00E98C06835
:100550000C3009901DE00E98806818B9FFE7042060
:10056000099011E00E988068012806D1FFE7082065
:1005700009900C980F99086105E0082009900C98E3
:100580000F994861FFE7FFE703E00020099000E0D2
:10059000FFE70B98FF2803D8FFE70F98049003E0CC
:1005A0000F9804300490FFE7049808900B98FF28F8
:1005B00004D8FFE70D988000039006E00D996FF0D6
:1005C0001F0000EB81000390FFE703980790089855
:1005D0000068079A0F219140884309999140084388
:1005E000089908600E98C079C006002840F1C680BE
:1005F000FFE7FFE741F21800C4F20200016841F092
:1006000001010160006800F0010006900698FFE714
:100610000D9820F003000821C4F2010140580A900F
:100620000D9800F0030081000F2000FA01F10A98F4
:1006300088430A900F9840F60001C4F201018842F5
:1006400003D1FFE70020029026E00F9840F600411A
:10065000C4F20101884203D1FFE70120019018E0B4
:100660000F9841F20001C4F20101884203D1FFE773
:10067000022000900AE00F9941F20042C4F2010208
:100680000420914208BF03200090FFE700980190EA
:10069000FFE701980290FFE702980D9901F003012E
:1006A000890000FA01F10A9808430A900A980D9906
:1006B00021F003010822C4F2010288500E988079CB
:1006C000C006002809D5FFE70B9A40F20841C4F2A2
:1006D000010108681043086008E00B9A40F20841E5
:1006E000C4F20101086890430860FFE70E98807922
:1006F0008006002809D5FFE70B9A40F20C41C4F2AE
:10070000010108681043086008E00B9A40F20C41B0
:10071000C4F20101086890430860FFE70E988079F1
:100720008007002809D5FFE70B9A40F20441C4F284
:10073000010108681043086008E00B9A40F2044188
:10074000C4F20101086890430860FFE70E988079C1
:10075000C00748B1FFE70B9A40F20041C4F2010123
:1007600008681043086008E00B9A40F20041C4F2A8
:100770000101086890430860FFE7FFE7FFE70D9875
:1007800001300D9079E610B07047000082B0019002
:10079000ADF802108DF801209DF8010028B1FFE7A7
:1007A000BDF802000199086105E0BDF802000004EF
:1007B00001990861FFE702B07047000040F2346021
:1007C000C2F200000068704740F20400C2F200006C
:1007D000027840F23461C2F20001086810440860F7
:1007E0007047000080B542F20001C4F202010868BF
:1007F00040F010000860032000F08CF80F2000F09B
:1008000005F800F03BF8002080BD000080B582B004
:10081000009040F20000C2F20000006840F20401C3
:10082000C2F200010A784FF47A71B1FBF2F1B0FB29
:10083000F1F000F069FD20B1FFE701208DF807001D
:1008400018E000980F280DD8FFE700994FF0FF300F
:10085000002200F045F8009840F20801C2F20001C1
:10086000086003E001208DF8070003E000208DF808
:100870000700FFE79DF8070002B080BD83B0FFE7E7
:1008800041F21800C4F20200016841F00101016068
:10089000006800F0010002900298FFE7FFE741F2D4
:1008A0001C00C4F20200016841F080510160006840
:1008B00000F0805001900198FFE7FFE70421C4F2A7
:1008C000010108680090009820F0E0600090009816
:1008D00040F00070009000980860FFE703B0704798
:1008E00080B586B08DF81700049103920020029025
:1008F00001F04EFE02909DF91700019002980499B4
:10090000039A01F0B1FA0146019801F049FE06B0E0
:1009100080BD000080B582B00190019801F062FEB8
:1009200002B080BD80B584B002900191029820B9D8
:10093000FFE701208DF80F001BE1019842F2000152
:10094000C4F20201096801F00701884216D9FFE7E5
:1009500042F20000C4F20200016821F00701019A8E
:1009600011430160006800F007000199884204D03B
:10097000FFE701208DF80F00FBE0FFE70298007809
:10098000800700282AD5FFE7029800784007002852
:1009900009D5FFE741F20401C4F20201086840F4FE
:1009A000E0600860FFE7029800780007002809D59A
:1009B000FFE741F20401C4F20201086840F460500C
:1009C0000860FFE741F20401C4F20201086820F068
:1009D000F000029A926810430860FFE702980078DE
:1009E000C007002860D0FFE70298406801280ED1B8
:1009F000FFE741F20000C4F2020000688003002813
:100A000004D4FFE701208DF80F00B2E021E0029846
:100A1000406802280ED1FFE741F20000C4F2020054
:100A200000688001002804D4FFE701208DF80F0042
:100A30009FE00DE041F20000C4F202000068800770
:100A4000002804D4FFE701208DF80F0091E0FFE7B4
:100A5000FFE741F20401C4F20201086820F003003C
:100A6000029A526810430860FFF7A8FE0090FFE763
:100A700041F20400C4F20200006800F00C00029988
:100A80004968B0EB810F0ED0FFE7FFF797FE0099A2
:100A9000401A41F28931884204D3FFE703208DF8E0
:100AA0000F0066E0E4E7FFE7019842F20001C4F2BC
:100AB0000201096801F00701884216D2FFE742F2FD
:100AC0000000C4F20200016821F00701019A1143FD
:100AD0000160006800F007000199884204D0FFE738
:100AE00001208DF80F0044E0FFE7029800784007EE
:100AF00000280CD5FFE741F20401C4F202010868A6
:100B000020F4E060029AD26810430860FFE7029880
:100B10000078000700280DD5FFE741F20401C4F278
:100B20000201086820F46050029A126940EAC2008B
:100B30000860FFE700F04CF841F20401C4F2020142
:100B40000968C9B20A0942F60261C0F60001895C6F
:100B5000C84040F20001C2F20001086040F2080003
:100B6000C2F200000068FFF751FE00208DF80F0070
:100B7000FFE79DF80F0004B080BD000040F20000C8
:100B8000C2F200000068704780B5FFF7F7FF41F23E
:100B90000401C4F202010968C1F3022242F61261A3
:100BA000C0F60001895CC84080BD000080B5FFF739
:100BB000E5FF41F20401C4F202010968C1F3C22257
:100BC00042F61261C0F60001895CC84080BD000099
:100BD00086B000200590049003900290019041F2AD
:100BE0000400C4F2020000680590059800F00C00B3
:100BF0000146009100283FD0FFE70098042804D068
:100C0000FFE70098082806D037E041F20020C0F244
:100C10007A00019037E00598C0F3834142F61A60EC
:100C2000C0F60000405C02909DF81600C007C0B1FD
:100C3000FFE741F20400C4F202000068C0F3404143
:100C400042F62A60C0F60000405C0490029841F22F
:100C50000021C0F27A0148430499B0FBF1F00390FF
:100C600007E0029840F60011C0F23D0148430390AE
:100C7000FFE70398019006E0FFE741F20020C0F291
:100C80007A000190FFE7019806B0704780B586B002
:100C90000490049820B9FFE701208DF817002EE397
:100CA00004980078C007002800F0AE80FFE741F20A
:100CB0000400C4F20200006800F00C00042813D005
:100CC000FFE741F20400C4F20200006800F00C00EB
:100CD00008281BD1FFE741F20400C4F202000068BB
:100CE000C003002812D5FFE741F20000C4F2020061
:100CF00000688003002808D5FFE70498406820B901
:100D0000FFE701208DF81700F9E27CE0FFE7049887
:100D10004068B0F5803F09D1FFE741F20001C4F21D
:100D20000201086840F48030086032E004984068AE
:100D300068B9FFE741F20001C4F20201086820F43B
:100D400080300860086820F48020086020E0049863
:100D50004068B0F5A02F0DD1FFE741F20001C4F2C9
:100D60000201086840F480200860086840F4803080
:100D700008600CE041F20001C4F20201086820F4AE
:100D800080300860086820F480200860FFE7FFE7F3
:100D9000FFE7FFE704984068D0B1FFE7FFF70EFDDB
:100DA0000390FFE741F20000C4F2020000688003F4
:100DB00000280CD4FFE7FFF701FD0399401A6528CE
:100DC00004D3FFE703208DF8170098E2EAE719E063
:100DD000FFF7F4FC0390FFE741F20000C4F20200C9
:100DE0000068800300280CD5FFE7FFF7E7FC0399B4
:100DF000401A652804D3FFE703208DF817007EE230
:100E0000EAE7FFE7FFE7FFE704980078800700289C
:100E100040F18D80FFE741F20400C4F20200006857
:100E200010F00C0F13D0FFE741F20400C4F20200EF
:100E3000006800F00C00082829D1FFE741F2040007
:100E4000C4F202000068C003002820D4FFE741F28A
:100E50000000C4F2020000688007002809D5FFE7FF
:100E600004980069012804D0FFE701208DF81700DD
:100E700045E241F20001C4F20201086820F0F800E6
:100E8000049A526940EAC2000860FFE74EE0049805
:100E9000006958B3FFE70021C4F242210120086035
:100EA000FFF78CFC0390FFE741F20000C4F2020060
:100EB0000068800700280CD4FFE7FFF77FFC039948
:100EC000401A032804D3FFE703208DF8170016E229
:100ED000EAE741F20001C4F20201086820F0F800DC
:100EE000049A526940EAC20008601EE00021C4F280
:100EF000422100200860FFF761FC0390FFE741F208
:100F00000000C4F202000068800700280CD5FFE74B
:100F1000FFF754FC0399401A032804D3FFE703208A
:100F20008DF81700EBE1EAE7FFE7FFE7FFE704983A
:100F300000780007002848D5FFE70498806918B3B7
:100F4000FFE740F28041C4F2422101200860FFF730
:100F500035FC0390FFE741F22400C4F20200006870
:100F6000800700280CD4FFE7FFF728FC0399401AFC
:100F7000032804D3FFE703208DF81700BFE1EAE759
:100F8000012000F0A9FF1FE040F28041C4F242219D
:100F900000200860FFF712FC0390FFE741F22400F5
:100FA000C4F202000068800700280CD5FFE7FFF7B5
:100FB00005FC0399401A032804D3FFE703208DF8AA
:100FC00017009CE1EAE7FFE7FFE704980078400795
:100FD000002840F1D880FFE700208DF8070041F29B
:100FE0001C00C4F202000068C000002813D4FFE710
:100FF000FFE741F21C00C4F20200016841F0805199
:101000000160006800F0805000900098FFE7012028
:101010008DF80700FFE747F20000C4F20000006807
:10102000C005002822D4FFE747F20001C4F2000106
:10103000086840F480700860FFF7C0FB0390FFE78A
:1010400047F20000C4F200000068C00500280CD47C
:10105000FFE7FFF7B3FB0399401A652804D3FFE7C6
:1010600003208DF817004AE1EAE7FFE7FFE704985D
:10107000C068012809D1FFE741F22001C4F2020152
:10108000086840F00100086031E00498C06868B961
:10109000FFE741F22001C4F20201086820F00100DC
:1010A0000860086820F0040008601FE00498C06829
:1010B00005280DD1FFE741F22001C4F202010868C2
:1010C00040F004000860086840F0010008600CE08F
:1010D00041F22001C4F20201086820F0010008601A
:1010E000086820F004000860FFE7FFE7FFE7FFE77C
:1010F0000498C068E0B1FFE7FFF760FB0390FFE7EB
:1011000041F22000C4F202000068800700280ED4DB
:10111000FFE7FFF753FB0399401A41F289318842F8
:1011200004D3FFE703208DF81700E8E0E8E71BE0B1
:10113000FFF744FB0390FFE741F22000C4F20200F6
:101140000068800700280ED5FFE7FFF737FB0399FB
:10115000401A41F28931884204D3FFE703208DF819
:101160001700CCE0E8E7FFE79DF80700012809D168
:10117000FFE741F21C01C4F20201086820F0805030
:101180000860FFE7FFE70498C069002800F0B3801B
:10119000FFE741F20400C4F20200006800F00C0016
:1011A000082800F08280FFE70498C06902285CD11B
:1011B000FFE76021C4F2422100200860FFF7FEFA39
:1011C0000390FFE741F20000C4F2020000688001D2
:1011D00000280CD5FFE7FFF7F1FA0399401A03281E
:1011E00004D3FFE703208DF8170088E0EAE70498AE
:1011F000006AB0F5803F0CD1FFE741F20401C4F270
:101200000201086820F40030049A926810430860D4
:10121000FFE741F20401C4F20201086820F47410EF
:10122000049B1A6A5B6A1A43104308606021C4F287
:10123000422101200860FFF7C1FA0390FFE741F265
:101240000000C4F202000068800100280CD4FFE70F
:10125000FFF7B4FA0399401A032804D3FFE70320E9
:101260008DF817004BE0EAE71EE06021C4F242214E
:1012700000200860FFF7A2FA0390FFE741F20000A8
:10128000C4F202000068800100280CD5FFE7FFF7D8
:1012900095FA0399401A032804D3FFE703208DF839
:1012A00017002CE0EAE7FFE724E00498C069012872
:1012B00004D1FFE701208DF8170020E041F204007F
:1012C000C4F2020000680290029800F48030049991
:1012D000096A884208D1FFE7029800F47010049967
:1012E000496A884204D0FFE701208DF8170006E024
:1012F000FFE7FFE7FFE700208DF81700FFE79DF805
:10130000170006B080BD000080B582B00190019842
:1013100000F040FF02B080BD85B003900291FFE76E
:10132000039890F83C00012804D1FFE702208DF8D3
:1013300013005BE00399012081F83C00FFE7FFE721
:101340000399022081F83D000398006840680190ED
:101350000398006880680090019820F07000019068
:10136000029801680198084301900198039909685F
:1013700048600398006842F60041C4F201018842C7
:1013800018D0FFE703980068B0F1804F12D0FFE754
:101390000398006840F20041C4F20001884209D07D
:1013A000FFE70398006840F60001C4F2000188429C
:1013B0000ED1FFE7009820F080000090029841686D
:1013C0000098084300900098039909688860FFE737
:1013D0000399012081F83D00FFE70399002081F87F
:1013E0003C00FFE700208DF81300FFE79DF8130095
:1013F00005B0704780B582B00090009820B9FFE733
:1014000001208DF807003FE0009890F83D0040B9BA
:10141000FFE70099002081F83C00009800F038F8C0
:10142000FFE70099022081F83D00009951F8040B74
:1014300000F016FF0099012081F84600FFE70099AF
:10144000012081F83E00009981F83F00009981F861
:101450004000009981F84100FFE7FFE70099012073
:1014600081F84200009981F84300009981F8440016
:10147000009981F84500FFE70099012081F83D00BF
:1014800000208DF80700FFE79DF8070002B080BD3F
:1014900083B0029002980068B0F1804F10D1FFE74E
:1014A000FFE741F21C00C4F20200016841F00101B3
:1014B0000160006800F0010001900198FFE719E069
:1014C0000298006840F20041C4F20001884210D145
:1014D000FFE7FFE741F21C00C4F20200016841F09F
:1014E00002010160006800F0020000900098FFE730
:1014F000FFE7FFE703B0704781B0009000980168F4
:10150000C86820F00100C860FFE700980068006A22
:1015100041F21111084210D1FFE700980068006AFB
:1015200040F24441084207D1FFE70098016808688B
:1015300020F001000860FFE7FFE7FFE700990120C6
:1015400081F83D00002001B07047000080B586B0F2
:101550000490039100208DF80B00FFE7049890F8A9
:101560003C00012804D1FFE702208DF81700ABE012
:101570000499012081F83C00FFE7FFE7049902206D
:1015800081F83D000498006880680190019820F07F
:1015900077000190019820F47F4001900198049910
:1015A00009688860039800680090002872D0FFE7FF
:1015B000009810286ED0FFE7009820286AD0FFE737
:1015C0000098302866D0FFE70098402855D0FFE704
:1015D0000098502837D0FFE70098602840D0FFE7F8
:1015E000009870280BD0FFE70098B0F5805F05D019
:1015F000FFE70098B0F5005F16D052E055E0049880
:101600000068039B5A689968DB6800F0ADFE049897
:10161000006880680190019840F07700019001987F
:1016200004990968886040E004980068039B5A6840
:101630009968DB6800F098FE04980168886840F4B7
:101640008040886031E004980068039A5168D2684D
:1016500000F0BAFE04980068502100F09FFE24E0DC
:1016600004980068039A5168D26800F0D5FE049887
:101670000068602100F092FE17E004980068039A69
:101680005168D26800F0A0FE04980068402100F084
:1016900085FE0AE0049800680399096800F07EFE60
:1016A00003E001208DF80B00FFE70499012081F889
:1016B0003D00FFE70499002081F83C00FFE79DF81A
:1016C0000B008DF81700FFE79DF8170006B080BDEE
:1016D00080B588B00690FFE7FFE70698006850E8FD
:1016E000030F20F4F0700590FFE705990698026853
:1016F00042E803100028F0D1FFE7FFE7FFE7FFE72C
:101700000698006850E8050F20F001000490FFE7FC
:1017100004990698026842E805100028F0D1FFE716
:10172000FFE70698006B012814D1FFE7FFE7FFE70A
:101730000698006850E8030F20F010000390FFE7C0
:1017400003990698026842E803100028F0D1FFE7E9
:10175000FFE7FFE70698006840690006002832D5D9
:10176000FFE7FFE7FFE70698006850E8050F20F065
:1017700080000290FFE702990698026842E805108F
:101780000028F0D1FFE7FFE70698806BD0B1FFE7B4
:101790000698816B002048630698806BFEF700FE78
:1017A00078B1FFE70698806BFEF738FE202807D156
:1017B000FFE706991020486403208DF81F004EE0D3
:1017C000FFE7FFE7FFE7069800684069400600284A
:1017D00032D5FFE7FFE7FFE70698006850E8050FFE
:1017E00020F040000190FFE701990698026842E866
:1017F00005100028F0D1FFE7FFE70698C06BD0B1D5
:10180000FFE70698C16B002048630698C06BFEF79F
:10181000C7FD78B1FFE70698C06BFEF7FFFD2028F3
:1018200007D1FFE706991020486403208DF81F00B8
:1018300015E0FFE7FFE7FFE706990020C884069957
:10184000C88506994864069A202182F84210069AB3
:1018500082F84110069908638DF81F00FFE79DF894
:101860001F0008B080BD000080B586B00490FFE77F
:10187000FFE70498006850E8030F20F4907003908D
:10188000FFE703990498026842E803100028F0D1AA
:10189000FFE7FFE7FFE7FFE70498006850E8050F60
:1018A00020F001000290FFE702990498026842E8E4
:1018B00005100028F0D1FFE7FFE70498006B01282E
:1018C00014D1FFE7FFE7FFE70498006850E8030F33
:1018D00020F010000190FFE701990498026842E8A7
:1018E00003100028F0D1FFE7FFE7FFE70498006846
:1018F00040694006002832D5FFE7FFE7FFE704987C
:10190000006850E8050F20F040000090FFE70099C4
:101910000498026842E805100028F0D1FFE7FFE7CD
:101920000498C06BD0B1FFE70498C16B00204863F6
:101930000498C06BFEF734FD78B1FFE70498C06BE4
:10194000FEF76CFD202807D1FFE7049910204864BA
:1019500003208DF817000EE0FFE7FFE7FFE704998B
:101960000020C885049A202182F842100499086357
:101970008DF81700FFE79DF8170006B080BD000046
:1019800080B584B00290FFE7FFE70298006850E856
:10199000030F20F0C0000190FFE701990298026850
:1019A00042E803100028F0D1FFE7FFE70298006843
:1019B00040690006002832D5FFE7FFE7FFE70298FD
:1019C000006850E8050F20F080000090FFE70099C4
:1019D0000298026842E805100028F0D1FFE7FFE70F
:1019E0000298806BD0B1FFE70298816B00204863BA
:1019F0000298806BFEF7D4FC78B1FFE70298806B09
:101A0000FEF70CFD202807D1FFE70299102048645B
:101A100003208DF80F000CE0FFE7FFE7FFE70299D6
:101A20000020C884029A202182F841108DF80F000E
:101A3000FFE79DF80F0004B080BD000080B582B0C4
:101A40000090009820B9FFE701208DF8070040E0E2
:101A50000098806908B1FFE700E0FFE7009890F880
:101A6000410040B9FFE70099002081F8400000984C
:101A700000F034F8FFE70099242081F84100009835
:101A80000168C86820F40050C860009800F0EEFCBF
:101A900000980168086920F4904008610098016886
:101AA000486920F02A00486100980168C86840F43D
:101AB0000050C860009900204864009A202182F8F4
:101AC0004110009A82F84210009948638DF807008F
:101AD000FFE79DF8070002B080BD000080B58AB026
:101AE00009900020089007900690059009980068DA
:101AF00043F60001C4F20101884239D1FFE7FFE754
:101B000041F21800C4F20200016841F48041016012
:101B1000006800F4804004900498FFE7FFE741F27A
:101B20001800C4F20200016841F00401016000687D
:101B300000F0040003900398FFE74FF40070059055
:101B4000022006900320089040F60000C4F2010035
:101B5000019005A90291FEF789FC019802994FF4C2
:101B600080620592002206920792FEF77FFCFFE753
:101B70000AB080BD80B584B002900191ADF802201A
:101B8000029890F84200202817D1FFE7019820B171
:101B9000FFE7BDF8020020B9FFE701208DF80F0034
:101BA0000FE002990020086302980199BDF8022015
:101BB00000F0BAFC8DF80F0003E002208DF80F0052
:101BC000FFE79DF80F0004B080BD0000FFE7FEE7CF
:101BD00040F2B001C2F2000142F63560C0F60000EA
:101BE000486042F64560C0F60000C86042F62C62CC
:101BF000C0F600024A61C861486242F63C62C0F623
:101C00000002CA6248630720086001208860092238
:101C10000A61886108620A228A62086370470000CC
:101C200080B582B0FFF7D4FF40F23040C2F200002E
:101C300001900121017042F210724283017602216B
:101C4000017740F2E841C2F2000140F2A042C2F244
:101C50000002002300F00CFA019981F8240002B080
:101C600080BD000080B58CB000200B900A900990D8
:101C70000890FFE741F21800C4F20200016841F049
:101C800010010160006800F0100007900798FFE75E
:101C9000FFE741F21800C4F20200016841F02001A0
:101CA0000160006800F0200006900698FFE7FFE75B
:101CB00041F21800C4F20200016841F0080101601D
:101CC000006800F0080005900598FFE7FFE741F283
:101CD0001800C4F20200016841F0040101600068CC
:101CE00000F0040004900498FFE740F60040C4F2BE
:101CF000010003900121019100220292FEF746FDAE
:101D0000019A02990398089209920A9102210B9173
:101D100008A9FEF7ABFB0CB080BD000080B588B011
:101D2000002101910791069105910491039102917F
:101D300040F25840C2F200004FF080420260416021
:101D400081604FF6FF72C26001618161FFF752FB53
:101D500018B1FFE7FEF71CFBFFE74FF4805004903B
:101D600040F25840C2F2000004A9FFF7EFFB18B19F
:101D7000FFE7FEF70DFBFFE700200290039040F223
:101D80005840C2F2000002A9FFF7C6FA18B1FFE7F7
:101D9000FEF7FEFAFFE708B080BD000080B588B00E
:101DA00000210191079106910591049103910291FF
:101DB00040F2A040C2F2000040F20042C4F2000231
:101DC0000260416081604FF4E152C2600161816153
:101DD000FFF710FB18B1FFE7FEF7DAFAFFE74FF461
:101DE0008050049040F2A040C2F2000004A9FFF726
:101DF000ADFB18B1FFE7FEF7CBFAFFE7002002903A
:101E0000039040F2A040C2F2000002A9FFF784FA5A
:101E100018B1FFE7FEF7BCFAFFE708B080BD00008D
:101E200080B582B040F2E840C2F20000019043F673
:101E30000001C4F2010101604FF4E1314160002171
:101E40008160C16001610C2242618161C161FFF763
:101E5000F5FD18B1FFE7FEF79BFAFFE702B080BD82
:101E6000FFE7FEE7FFE7FEE788B0079006910592DF
:101E7000079800F0070004900498C0F107000528B7
:101E800003D3FFE70420019004E00498C0F10700A9
:101E90000190FFE70198039004980430062803D8C6
:101EA000FFE70020009003E0049803380090FFE76C
:101EB0000098029006980399012202FA01F1013973
:101EC0000840029B984005999A40013A1140084306
:101ED00008B070477047000082B00190019840F24E
:101EE0000001C2F200010968C90844F6D352C1F2E8
:101EF0006202A1FB0221890948430090FFE700BF6D
:101F0000FFE70098411E00910028F8D1FFE702B0DA
:101F10007047000080B584B003908DF80B1000204E
:101F20008DF80A0003994969096848620398406975
:101F300001686FF0010008610398408B28B1FFE74A
:101F400003984069FFF7D8FAFFE79DF80B004007B8
:101F5000002844D4FFE79DF80B008007002823D514
:101F6000FFE703980069FFF77FFC8DF80A000399EB
:101F700091F8200000F0FB0081F82000039991F80F
:101F8000200000F0F70081F82000039991F820006C
:101F900000F0DF0081F82000039991F8200000F0A4
:101FA000FE0081F82000FFE79DF80B00C007A8B1F4
:101FB000FFE703980069FFF7E3FC8DF80A00039937
:101FC00091F8200000F0EF0081F82000039991F8CB
:101FD000200000F0BF0081F82000FFE742E00398F6
:101FE0000069FFF775FB8DF80A0000200190FFE7FC
:101FF0000198B0F5817F0ADCFFE703988168019AB8
:1020000000208854FFE7019801300190F0E7039920
:1020100091F8200000F0FB0081F82000039991F86E
:10202000200000F0F70081F82000039991F82000CB
:1020300000F0DF0081F82000039991F8200000F003
:10204000FE0081F82000039991F8200000F0EF00D5
:1020500081F82000039991F8200000F0BF0081F87A
:102060002000FFE70399032081F8240004B080BD1D
:1020700085B00390029101920093039820B9FFE785
:1020800002208DF8130027E0029820B9FFE7022014
:102090008DF8130020E002980399086101980399D4
:1020A00048610398007F20B9FFE702208DF81300F4
:1020B00012E00398806838B9FFE7039940F2F41002
:1020C000C2F20000886003E0009803998860FFE78F
:1020D00001208DF81300FFE79DF8130005B070474D
:1020E00080B584B00290019100208DF803008DF836
:1020F0000200029890F82000C008C00720B1FFE756
:1021000004208DF80F003FE0029991F8200040F084
:10211000020081F82000029991F8200040F00800A8
:1021200081F82000029991F8200000F0DF0081F88A
:102130002000029991F8200000F0FE0081F82000B4
:102140000198029948600298816800690722FFF7A8
:1021500011FD8DF802009DF8020038B1FFE70298EA
:102160000421FFF7D7FE8DF8030003E001208DF86E
:102170000300FFE79DF80300029981F824009DF811
:1021800003008DF80F00FFE79DF80F0004B080BD3D
:102190007047000080B582B0009000980138B0F11F
:1021A000807F03D3FFE70120019019E000980138F8
:1021B0004EF21401CEF2000108604FF0FF300F2103
:1021C00000F0EEF94EF21801CEF200010020086096
:1021D0004EF21002CEF20002072111600190FFE7DB
:1021E000019802B080BD000080B5FEF7EDFA80BD19
:1021F00080B590B006A800902821FDF7E5FF009873
:102200000023059304930393029301930122069202
:102210004FF48031079108930A9202220D920E9199
:102220004FF4E0110F91FEF731FD18B1FFE7FEF713
:10223000AFF8FFE70F2001900221029100200390E8
:102240004FF480620492059001A8FEF76BFB18B171
:10225000FFE7FEF79DF8FFE710B080BD7047000074
:1022600083B002900191029800680090029842F6B3
:102270000041C4F20101884215D0FFE70298B0F195
:10228000804F10D0FFE7029840F20041C4F20001F5
:10229000884208D0FFE7029840F60001C4F200012E
:1022A00088420AD1FFE7009820F070000090019862
:1022B0004168009808430090FFE7029842F6004109
:1022C000C4F20101884215D0FFE70298B0F1804FB7
:1022D00010D0FFE7029840F20041C4F200018842AA
:1022E00008D0FFE7029840F60001C4F200018842DE
:1022F0000AD1FFE7009820F4407000900198C1686F
:10230000009808430090FFE7009820F080000199B2
:102310004969084300900098029908600198806814
:102320000299C8620198006802998862029842F690
:102330000041C4F20101884205D1FFE7019800691C
:1023400002990863FFE70299012048610298006939
:10235000C00730B1FFE70299086920F00100086169
:10236000FFE703B07047000085B00490039102922C
:102370000193049880680090009820F47F400090BA
:1023800003980299019A41EA022101430098084307
:10239000009000980499886005B0704783B002905F
:1023A0000191029880680090009820F070000090E1
:1023B00001980099084340F00700009000980299A6
:1023C000886003B07047000085B0049003910292CA
:1023D0000498006A00900499086A20F001000862DD
:1023E000049880690190019820F0F0000190029912
:1023F000019840EA01100190009820F00A00009036
:102400000399009808430090019804998861009806
:102410000499086205B0704785B004900391029258
:102420000498006A00900499086A20F0100008627D
:10243000049880690190019820F4704001900299FD
:10244000019840EA01300190009820F0A00000902F
:102450000399009840EA011000900198049988615E
:1024600000980499086205B07047000080B584B0F8
:10247000039003980068006920F44050039A1168A3
:10248000D26810430861039988680A694969104352
:102490000843029003980068C06841F20C618843C9
:1024A0000299084303990968C86003980068406965
:1024B00020F44070039A11689269104348610398B0
:1024C000006843F60001C4F20101884204D1FFE72D
:1024D000FEF76CFB019003E0FEF756FB0190FFE76F
:1024E000019819214843039A116852689200B0FB81
:1024F000F2FC48F21F52C5F2EB12ACFB023043096A
:10250000642003FB10CC322000EB0C10A0FB020275
:10251000F02000EA521000EB0310C2F34312104403
:10252000886004B080BD000083B002900191ADF8D6
:102530000220019802998862BDF8020002998885FC
:10254000BDF802000299C8850299002048640299EA
:10255000222081F842000298006938B1FFE7029812
:102560000168C86840F48070C860FFE7029801689D
:10257000486940F00100486102980168C86840F06D
:102580002000C860002003B070470000FFE7FEE7AE
:102590004EF60C50CEF200000068C0F302207047E7
:1025A00082B08DF8070000919DF9070000280AD439
:1025B000FFE7009800019DF907104EF20042CEF2AD
:1025C000000288540BE0009800019DF8071001F00C
:1025D0000F014EF61452CEF200028854FFE702B00B
:1025E0007047000083B00290029800F0070000904E
:1025F0004EF60C51CEF200010868019001984FF69A
:10260000FF02104001900198009A40EA0220002247
:10261000C0F2FA52104301900198086003B070476D
:1026200083B0029001918DF8032001980068FF2883
:102630000CD8FFE79DF803000299DDF804C0DCF830
:102640000020531CCCF800308854FFE703B07047DB
:1026500080B586B00590049103928DF80B309DF8FB
:102660000B0001380190FFE7019800280ED4FFE726
:1026700005980499039A019BDA4002F00102FFF7E2
:10268000CFFFFFE7019801380190EDE706B080BD6C
:1026900080B588B084460A98CDF81CC00691059292
:1026A00004938DF80F0004990020086007980078C3
:1026B0008DF80E00012000908DF80D00059804990A
:1026C0009DF80E20FFF7ACFF00980290FFE70298FC
:1026D000069988423CD2FFE707980299405C8DF842
:1026E0000700059804999DF80720FFF799FF9DF8CA
:1026F00007009DF80E1088421DD1FFE79DF80D00E0
:1027000001308DF80D009DF80D00052812D1FFE76E
:102710009DF80F0050B9FFE7059804999DF8072030
:10272000B2FA82F25209FFF77BFFFFE700208DF833
:102730000D00FFE707E001208DF80D009DF8070070
:102740008DF80E00FFE7FFE7029801300290BEE728
:1027500008B080BD85B0049003910020ADF80A0058
:102760000190FFE70198039988422AD2FFE7049875
:102770000199405C8DF80300BDF80A00C0F3803079
:102780008DF80200BDF80A004000ADF80A009DF87F
:1027900003009DF80210484008D0FFE7BDF80A008A
:1027A00044F299514840ADF80A00FFE7BDF80A002D
:1027B0006FF3DF30ADF80A00FFE7019801300190B8
:1027C000D0E7BDF80A0005B07047000081B0009066
:1027D000009840F23061C2F20001096888420BD2D1
:1027E000FFE7009A40F23051C2F20001885CB0FA73
:1027F00080F040098854FFE701B0704780B5A6B06B
:102800002492BDF89020ADF894202390229140F2BC
:102810003061C2F200010F9100220A6040F2FC30E8
:10282000C2F20000027040F23050C2F20000FFF726
:10283000F7FE0F980068219023988068002858D1EF
:10284000FFE7239802686FF3DF2240F23050C2F2B4
:1028500000000C9040F23061C2F200010E910B2397
:10286000FFF7F6FE0C980E990A680B3A2092239A0D
:10287000127BFFF7D5FE0C980E990A68013A1F9259
:1028800000220D92FFF7CCFE0C980D9A0E990B6862
:10289000013B1E93FFF7C4FE0E98006801381D909F
:1028A0009DF894008008C00720B1FFE71F98FFF74C
:1028B0008DFFFFE79DF894004008C00720B1FFE7B7
:1028C0001E98FFF783FFFFE79DF894000009C007FB
:1028D00020B1FFE71D98FFF779FFFFE79DF894000F
:1028E0004009C00720B1FFE72098FFF76FFFFFE71F
:1028F0008AE02398406820F060401C901C98C0F348
:102900008A4240F23050C2F20000099040F2306139
:10291000C2F200010B910B23FFF79AFE09980B9965
:102920000A680B3A1B9201220892FFF779FE089A77
:1029300009980B990B68013B1A93FFF771FE0998F0
:102940000B990A68013A19921C9A6FF39F4212235D
:10295000FFF77EFE09980B990A68123A1892239A9B
:10296000127BFFF75DFE09980B990A68013A1792EE
:1029700000220A92FFF754FE09980A9A0B990B68F5
:10298000013B1693FFF74CFE0B9800680138159039
:102990009DF89400C00720B1FFE71A98FFF716FFD3
:1029A000FFE79DF894004008C00720B1FFE71998A1
:1029B000FFF70CFFFFE79DF894008008C00720B1E7
:1029C000FFE71798FFF702FFFFE79DF89400C008A4
:1029D000C00720B1FFE71698FFF7F8FEFFE79DF864
:1029E00094000009C00720B1FFE71598FFF7EEFE3D
:1029F000FFE79DF894004009C00720B1FFE71B984E
:102A0000FFF7E4FEFFE7FFE72398006900F00F02FD
:102A100040F23050C2F2000040F23061C2F20001D8
:102A20000423FFF715FE2398C068002867D1FFE74D
:102A30002398006900F00F008DF8530000208DF8F6
:102A40005200FFE79DF852109DF85320002091425C
:102A5000079008DAFFE79DF8521000200829B8BF58
:102A600001200790FFE70798C007002846D0FFE73E
:102A700040F23060C2F200000068139022989DF886
:102A80005210405C8DF84B002398007D012812D134
:102A9000FFE79DF8520006280DDBFFE740F23050BB
:102AA000C2F2000040F23061C2F2000100220823AD
:102AB000FFF7CEFD0DE09DF84B2040F23050C2F202
:102AC000000040F23061C2F200010823FFF7C0FDB0
:102AD000FFE79DF894008009C00740B1FFE79DF82B
:102AE000520020B9FFE71398FFF770FEFFE7FFE7FA
:102AF0009DF8520001308DF85200A3E7FFE740F245
:102B00003060C2F200000590016840F23050C2F21D
:102B100000000690FFF71EFE059902460698ADF8E4
:102B200048200A681192BDF848200F23FFF790FD56
:102B30009DF894100020B0EBD11F04D0FFE711984E
:102B4000FFF744FEFFE740F23050C2F2000002906F
:102B500040F23061C2F20001039101220492FFF7BA
:102B60005FFD0298039909689DF8952002F0010223
:102B70006B461A6040F2F722C2F2000240F2F833CC
:102B8000C2F20003FFF784FD02980399049AFFF74D
:102B900047FD02980399049AFFF742FD0020109028
:102BA000FFE71098062810DCFFE740F23050C2F231
:102BB000000040F23061C2F200010122FFF730FD57
:102BC000FFE7109801301090EBE726B080BD0000C1
:102BD00080B586B000200590FDF704FEFFF708FBE6
:102BE000FFF740F8FFF79AF8FFF7D8F8FFF718F962
:102BF00040F20440C2F2000004904EF64801C0F2D8
:102C00000101FDF747FB049940F223100860FFF72C
:102C100007F840F23040C2F2000040F2E801C2F290
:102C20000001FFF75DFAFFE740F20040C2F200004A
:102C30000068002840F0B480FFE740F27400C2F260
:102C400000004168C1F3800140F20442C2F2000278
:102C500091604168C1F3C001D16001894FF47A737A
:102C600059431162828901200021B1EB024F039088
:102C70000AD1FFE740F27400C2F20000C0890028C8
:102C800018BF01200390FFE7039800F0010040F215
:102C90000441C2F20001019148604868086040F2B6
:102CA0007400C2F200000290027C02F00F020A617E
:102CB00090F82A200A7690F82C204A7690F82E2058
:102CC0008A7690F83020CA7690F832200A7790F809
:102CD00034204A7790F836208A7790F83820CA77DF
:102CE0004268C2F3404391F8282002F0FE021A44E1
:102CF00081F828204268C2F3804391F8282002F02E
:102D0000FD0242EA430281F828204268C2F3C04330
:102D100091F8282002F0FB0242EA830281F8282081
:102D20004268C2F3005391F8282002F0F70242EA09
:102D3000C30281F828204268C2F3405391F828204A
:102D400002F0EF0242EA031281F828204268C2F33F
:102D5000805391F8282002F0DF0242EA431281F802
:102D600028204268C2F3C05391F8282002F0BF0225
:102D700042EA831281F82820C37991F8282002F0D2
:102D80007F0242EAC31281F828204068C0F3406203
:102D900091F8290000F0FE00104481F82900FFE7B7
:102DA00040F20440C2F200000090406AFDF73CFB94
:102DB0000098FDF783FA37E783B0ADF80A0044F2D4
:102DC0004020C0F20F00019000200090FFE7242077
:102DD000C4F200000068BDF80A10401A00B2B0F159
:102DE000FF3F0CDCFFE700980130009044F24121E6
:102DF000C0F20F01884201D3FFE700E0E7E703B02C
:102E000070470000000000000000010203040607F4
:102E1000080900000000010203040203040506077C
:102E200008090A0B0C0D0E0F101001025665722EC8
:102E300020312E30004E494F2D31320053544D3346
:102E40003246313033000000682E000800000020B8
:102E50001000000028010008782E00081000002053
:102E6000280C00004401000800127A000100000054
:082E700010000000000000004A
:04000005080000ED02
:00000001FF

View File

@@ -3,9 +3,9 @@
<title>Static Call Graph - [CANEmu\CANEmu.axf]</title></head>
<body><HR>
<H1>Static Call Graph for image CANEmu\CANEmu.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 6190004: Last Updated: Mon Aug 4 13:49:17 2025
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 6190004: Last Updated: Mon Aug 4 16:26:50 2025
<BR><P>
<H3>Maximum Stack Usage = 252 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3>
<H3>Maximum Stack Usage = 268 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3>
__rt_entry_main &rArr; main &rArr; CANEmu_SendFrame &rArr; form_CAN_bitstream_full &rArr; apply_bit_stuffing_with_error &rArr; append_bit
<P>
@@ -85,8 +85,8 @@ Function Pointers
Global Symbols
</H3>
<P><STRONG><a name="[36]"></a>__main</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main))
<BR><BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
<BR><BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry
</UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(.text)
</UL>
@@ -98,9 +98,9 @@ Global Symbols
<BR><BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry
</UL>
<P><STRONG><a name="[74]"></a>__scatterload_rt2_thumb_only</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<P><STRONG><a name="[89]"></a>__scatterload_rt2_thumb_only</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<P><STRONG><a name="[75]"></a>__scatterload_null</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<P><STRONG><a name="[8a]"></a>__scatterload_null</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<P><STRONG><a name="[3a]"></a>__scatterload_copy</STRONG> (Thumb, 26 bytes, Stack size unknown bytes, __scatter_copy.o(!!handler_copy), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_copy
@@ -108,80 +108,80 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_copy
</UL>
<P><STRONG><a name="[76]"></a>__scatterload_zeroinit</STRONG> (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED)
<P><STRONG><a name="[8b]"></a>__scatterload_zeroinit</STRONG> (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED)
<P><STRONG><a name="[3e]"></a>__rt_lib_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_li
</UL>
<P><STRONG><a name="[77]"></a>__rt_lib_init_alloca_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030))
<P><STRONG><a name="[8c]"></a>__rt_lib_init_alloca_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030))
<P><STRONG><a name="[78]"></a>__rt_lib_init_argv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E))
<P><STRONG><a name="[8d]"></a>__rt_lib_init_argv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E))
<P><STRONG><a name="[79]"></a>__rt_lib_init_atexit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D))
<P><STRONG><a name="[8e]"></a>__rt_lib_init_atexit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D))
<P><STRONG><a name="[7a]"></a>__rt_lib_init_clock_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023))
<P><STRONG><a name="[8f]"></a>__rt_lib_init_clock_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023))
<P><STRONG><a name="[7b]"></a>__rt_lib_init_cpp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000034))
<P><STRONG><a name="[90]"></a>__rt_lib_init_cpp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000034))
<P><STRONG><a name="[7c]"></a>__rt_lib_init_exceptions_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032))
<P><STRONG><a name="[91]"></a>__rt_lib_init_exceptions_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032))
<P><STRONG><a name="[7d]"></a>__rt_lib_init_fp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002))
<P><STRONG><a name="[92]"></a>__rt_lib_init_fp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002))
<P><STRONG><a name="[7e]"></a>__rt_lib_init_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021))
<P><STRONG><a name="[93]"></a>__rt_lib_init_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021))
<P><STRONG><a name="[7f]"></a>__rt_lib_init_getenv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025))
<P><STRONG><a name="[94]"></a>__rt_lib_init_getenv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025))
<P><STRONG><a name="[80]"></a>__rt_lib_init_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C))
<P><STRONG><a name="[95]"></a>__rt_lib_init_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C))
<P><STRONG><a name="[81]"></a>__rt_lib_init_lc_collate_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013))
<P><STRONG><a name="[96]"></a>__rt_lib_init_lc_collate_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013))
<P><STRONG><a name="[82]"></a>__rt_lib_init_lc_ctype_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015))
<P><STRONG><a name="[97]"></a>__rt_lib_init_lc_ctype_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015))
<P><STRONG><a name="[83]"></a>__rt_lib_init_lc_monetary_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017))
<P><STRONG><a name="[98]"></a>__rt_lib_init_lc_monetary_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017))
<P><STRONG><a name="[84]"></a>__rt_lib_init_lc_numeric_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019))
<P><STRONG><a name="[99]"></a>__rt_lib_init_lc_numeric_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019))
<P><STRONG><a name="[85]"></a>__rt_lib_init_lc_time_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B))
<P><STRONG><a name="[9a]"></a>__rt_lib_init_lc_time_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B))
<P><STRONG><a name="[86]"></a>__rt_lib_init_preinit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000006))
<P><STRONG><a name="[9b]"></a>__rt_lib_init_preinit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000006))
<P><STRONG><a name="[87]"></a>__rt_lib_init_rand_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000010))
<P><STRONG><a name="[9c]"></a>__rt_lib_init_rand_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000010))
<P><STRONG><a name="[88]"></a>__rt_lib_init_relocate_pie_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004))
<P><STRONG><a name="[9d]"></a>__rt_lib_init_relocate_pie_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004))
<P><STRONG><a name="[89]"></a>__rt_lib_init_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000035))
<P><STRONG><a name="[9e]"></a>__rt_lib_init_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000035))
<P><STRONG><a name="[8a]"></a>__rt_lib_init_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F))
<P><STRONG><a name="[9f]"></a>__rt_lib_init_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F))
<P><STRONG><a name="[8b]"></a>__rt_lib_init_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000027))
<P><STRONG><a name="[a0]"></a>__rt_lib_init_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000027))
<P><STRONG><a name="[8c]"></a>__rt_lib_init_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E))
<P><STRONG><a name="[a1]"></a>__rt_lib_init_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E))
<P><STRONG><a name="[43]"></a>__rt_lib_shutdown</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit_ls
</UL>
<P><STRONG><a name="[8d]"></a>__rt_lib_shutdown_cpp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002))
<P><STRONG><a name="[a2]"></a>__rt_lib_shutdown_cpp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002))
<P><STRONG><a name="[8e]"></a>__rt_lib_shutdown_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000007))
<P><STRONG><a name="[a3]"></a>__rt_lib_shutdown_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000007))
<P><STRONG><a name="[8f]"></a>__rt_lib_shutdown_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F))
<P><STRONG><a name="[a4]"></a>__rt_lib_shutdown_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F))
<P><STRONG><a name="[90]"></a>__rt_lib_shutdown_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000010))
<P><STRONG><a name="[a5]"></a>__rt_lib_shutdown_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000010))
<P><STRONG><a name="[91]"></a>__rt_lib_shutdown_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A))
<P><STRONG><a name="[a6]"></a>__rt_lib_shutdown_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A))
<P><STRONG><a name="[92]"></a>__rt_lib_shutdown_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004))
<P><STRONG><a name="[a7]"></a>__rt_lib_shutdown_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004))
<P><STRONG><a name="[93]"></a>__rt_lib_shutdown_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C))
<P><STRONG><a name="[a8]"></a>__rt_lib_shutdown_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C))
<P><STRONG><a name="[38]"></a>__rt_entry</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main
<LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_rt2
<BR><BR>[Called By]<UL><LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_rt2
<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main
</UL>
<P><STRONG><a name="[94]"></a>__rt_entry_presh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002))
<P><STRONG><a name="[a9]"></a>__rt_entry_presh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002))
<P><STRONG><a name="[3b]"></a>__rt_entry_sh</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004))
<BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size
@@ -194,17 +194,17 @@ Global Symbols
<BR><BR>[Calls]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_init
</UL>
<P><STRONG><a name="[95]"></a>__rt_entry_postsh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009))
<P><STRONG><a name="[aa]"></a>__rt_entry_postsh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009))
<P><STRONG><a name="[3f]"></a>__rt_entry_main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D))
<BR><BR>[Stack]<UL><LI>Max Depth = 252 + Unknown Stack Size
<BR><BR>[Stack]<UL><LI>Max Depth = 268 + Unknown Stack Size
<LI>Call Chain = __rt_entry_main &rArr; main &rArr; CANEmu_SendFrame &rArr; form_CAN_bitstream_full &rArr; apply_bit_stuffing_with_error &rArr; append_bit
</UL>
<BR>[Calls]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit
<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<BR>[Calls]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit
</UL>
<P><STRONG><a name="[96]"></a>__rt_entry_postli_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C))
<P><STRONG><a name="[ab]"></a>__rt_entry_postli_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C))
<P><STRONG><a name="[48]"></a>__rt_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit
@@ -214,7 +214,7 @@ Global Symbols
<BR><BR>[Calls]<UL><LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_shutdown
</UL>
<P><STRONG><a name="[97]"></a>__rt_exit_prels_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002))
<P><STRONG><a name="[ac]"></a>__rt_exit_prels_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002))
<P><STRONG><a name="[44]"></a>__rt_exit_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004))
<BR><BR>[Calls]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_sys_exit
@@ -360,21 +360,21 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap
</UL>
<P><STRONG><a name="[6d]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<P><STRONG><a name="[82]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
</UL>
<P><STRONG><a name="[98]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED)
<P><STRONG><a name="[ad]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED)
<P><STRONG><a name="[99]"></a>__rt_memclr_w</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED)
<P><STRONG><a name="[ae]"></a>__rt_memclr_w</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED)
<P><STRONG><a name="[9a]"></a>_memset_w</STRONG> (Thumb, 74 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED)
<P><STRONG><a name="[af]"></a>_memset_w</STRONG> (Thumb, 74 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED)
<P><STRONG><a name="[9b]"></a>__use_two_region_memory</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[b0]"></a>__use_two_region_memory</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[9c]"></a>__rt_heap_escrow$2region</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[b1]"></a>__rt_heap_escrow$2region</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[9d]"></a>__rt_heap_expand$2region</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[b2]"></a>__rt_heap_expand$2region</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[3c]"></a>__user_setup_stackheap</STRONG> (Thumb, 74 bytes, Stack size 8 bytes, sys_stackheap_outer.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size
@@ -395,28 +395,28 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_main
</UL>
<P><STRONG><a name="[9e]"></a>__user_libspace</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)
<P><STRONG><a name="[b3]"></a>__user_libspace</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)
<P><STRONG><a name="[46]"></a>__user_perproc_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap
</UL>
<P><STRONG><a name="[9f]"></a>__user_perthread_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)
<P><STRONG><a name="[b4]"></a>__user_perthread_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)
<P><STRONG><a name="[45]"></a>_sys_exit</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, sys_exit.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit_exit
</UL>
<P><STRONG><a name="[a0]"></a>__I$use$semihosting</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)
<P><STRONG><a name="[b5]"></a>__I$use$semihosting</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)
<P><STRONG><a name="[a1]"></a>__use_no_semihosting_swi</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)
<P><STRONG><a name="[b6]"></a>__use_no_semihosting_swi</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)
<P><STRONG><a name="[a2]"></a>__semihosting_library_function</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, indicate_semi.o(.text), UNUSED)
<P><STRONG><a name="[b7]"></a>__semihosting_library_function</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, indicate_semi.o(.text), UNUSED)
<P><STRONG><a name="[4]"></a>BusFault_Handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.BusFault_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[73]"></a>CANEmu_Init</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, canemu.o(.text.CANEmu_Init))
<P><STRONG><a name="[88]"></a>CANEmu_Init</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, canemu.o(.text.CANEmu_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = CANEmu_Init
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
@@ -434,11 +434,29 @@ Global Symbols
<P><STRONG><a name="[7]"></a>DebugMon_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.DebugMon_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[69]"></a>Error_Handler</STRONG> (Thumb, 14 bytes, Stack size 4 bytes, main.o(.text.Error_Handler))
<P><STRONG><a name="[79]"></a>Error_Handler</STRONG> (Thumb, 14 bytes, Stack size 4 bytes, main.o(.text.Error_Handler))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = Error_Handler
</UL>
<BR>[Called By]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<BR>[Called By]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_USART1_UART_Init
<LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM3_Init
<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
</UL>
<P><STRONG><a name="[69]"></a>HAL_DMA_Abort</STRONG> (Thumb, 124 bytes, Stack size 12 bytes, stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = HAL_DMA_Abort
</UL>
<BR>[Called By]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_AbortReceive
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_AbortTransmit
<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Abort
</UL>
<P><STRONG><a name="[6a]"></a>HAL_DMA_GetError</STRONG> (Thumb, 12 bytes, Stack size 4 bytes, stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = HAL_DMA_GetError
</UL>
<BR>[Called By]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_AbortReceive
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_AbortTransmit
<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Abort
</UL>
<P><STRONG><a name="[4c]"></a>HAL_Delay</STRONG> (Thumb, 66 bytes, Stack size 24 bytes, stm32f1xx_hal.o(.text.HAL_Delay))
@@ -449,25 +467,26 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[67]"></a>HAL_GPIO_Init</STRONG> (Thumb, 798 bytes, Stack size 64 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init))
<P><STRONG><a name="[70]"></a>HAL_GPIO_Init</STRONG> (Thumb, 798 bytes, Stack size 64 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = HAL_GPIO_Init
</UL>
<BR>[Called By]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<BR>[Called By]<UL><LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_MspInit
<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
</UL>
<P><STRONG><a name="[66]"></a>HAL_GPIO_WritePin</STRONG> (Thumb, 46 bytes, Stack size 8 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin))
<P><STRONG><a name="[77]"></a>HAL_GPIO_WritePin</STRONG> (Thumb, 46 bytes, Stack size 8 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<BR>[Called By]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
</UL>
<P><STRONG><a name="[4d]"></a>HAL_GetTick</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f1xx_hal.o(.text.HAL_GetTick))
<BR><BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
</UL>
<P><STRONG><a name="[6b]"></a>HAL_IncTick</STRONG> (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal.o(.text.HAL_IncTick))
<P><STRONG><a name="[80]"></a>HAL_IncTick</STRONG> (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal.o(.text.HAL_IncTick))
<BR><BR>[Called By]<UL><LI><a href="#[9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Handler
</UL>
@@ -522,7 +541,28 @@ Global Symbols
<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_InitTick
</UL>
<BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
</UL>
<P><STRONG><a name="[5b]"></a>HAL_RCC_GetHCLKFreq</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq))
<BR><BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetPCLK2Freq
<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetPCLK1Freq
</UL>
<P><STRONG><a name="[5a]"></a>HAL_RCC_GetPCLK1Freq</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = HAL_RCC_GetPCLK1Freq
</UL>
<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetHCLKFreq
</UL>
<BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SetConfig
</UL>
<P><STRONG><a name="[5c]"></a>HAL_RCC_GetPCLK2Freq</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = HAL_RCC_GetPCLK2Freq
</UL>
<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetHCLKFreq
</UL>
<BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SetConfig
</UL>
<P><STRONG><a name="[59]"></a>HAL_RCC_GetSysClockFreq</STRONG> (Thumb, 188 bytes, Stack size 24 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq))
@@ -531,74 +571,168 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
</UL>
<P><STRONG><a name="[5a]"></a>HAL_RCC_OscConfig</STRONG> (Thumb, 1658 bytes, Stack size 32 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig))
<P><STRONG><a name="[5d]"></a>HAL_RCC_OscConfig</STRONG> (Thumb, 1658 bytes, Stack size 32 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = HAL_RCC_OscConfig &rArr; RCC_Delay
</UL>
<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RCC_Delay
<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RCC_Delay
<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL>
<BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
</UL>
<P><STRONG><a name="[52]"></a>HAL_SYSTICK_Config</STRONG> (Thumb, 16 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = HAL_SYSTICK_Config &rArr; SysTick_Config &rArr; __NVIC_SetPriority
</UL>
<BR>[Calls]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Config
<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Config
</UL>
<BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_InitTick
</UL>
<P><STRONG><a name="[6a]"></a>HAL_TIMEx_MasterConfigSynchronization</STRONG> (Thumb, 220 bytes, Stack size 20 bytes, stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization))
<P><STRONG><a name="[7a]"></a>HAL_TIMEx_MasterConfigSynchronization</STRONG> (Thumb, 220 bytes, Stack size 20 bytes, stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = HAL_TIMEx_MasterConfigSynchronization
</UL>
<BR>[Called By]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<BR>[Called By]<UL><LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM3_Init
<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
</UL>
<P><STRONG><a name="[5d]"></a>HAL_TIM_Base_Init</STRONG> (Thumb, 156 bytes, Stack size 16 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init))
<P><STRONG><a name="[60]"></a>HAL_TIM_Base_Init</STRONG> (Thumb, 156 bytes, Stack size 16 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = HAL_TIM_Base_Init &rArr; TIM_Base_SetConfig
</UL>
<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Base_SetConfig
<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_MspInit
<BR>[Calls]<UL><LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Base_SetConfig
<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_MspInit
</UL>
<BR>[Called By]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<BR>[Called By]<UL><LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM3_Init
<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
</UL>
<P><STRONG><a name="[5e]"></a>HAL_TIM_Base_MspInit</STRONG> (Thumb, 52 bytes, Stack size 8 bytes, tim.o(.text.HAL_TIM_Base_MspInit))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = HAL_TIM_Base_MspInit
<P><STRONG><a name="[61]"></a>HAL_TIM_Base_MspInit</STRONG> (Thumb, 104 bytes, Stack size 12 bytes, tim.o(.text.HAL_TIM_Base_MspInit))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = HAL_TIM_Base_MspInit
</UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
</UL>
<P><STRONG><a name="[60]"></a>HAL_TIM_ConfigClockSource</STRONG> (Thumb, 388 bytes, Stack size 32 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource))
<P><STRONG><a name="[7e]"></a>HAL_TIM_Base_Stop_IT</STRONG> (Thumb, 82 bytes, Stack size 4 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = HAL_TIM_Base_Stop_IT
</UL>
<BR>[Called By]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Abort
</UL>
<P><STRONG><a name="[63]"></a>HAL_TIM_ConfigClockSource</STRONG> (Thumb, 388 bytes, Stack size 32 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource))
<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = HAL_TIM_ConfigClockSource &rArr; TIM_ETR_SetConfig
</UL>
<BR>[Calls]<UL><LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_ETR_SetConfig
<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_TI2_ConfigInputStage
<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_ITRx_SetConfig
<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_TI1_ConfigInputStage
<BR>[Calls]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_ETR_SetConfig
<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_TI2_ConfigInputStage
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_ITRx_SetConfig
<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_TI1_ConfigInputStage
</UL>
<BR>[Called By]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<BR>[Called By]<UL><LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM3_Init
<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
</UL>
<P><STRONG><a name="[68]"></a>HAL_UART_Abort</STRONG> (Thumb, 406 bytes, Stack size 40 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_Abort))
<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = HAL_UART_Abort &rArr; HAL_DMA_Abort
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_GetError
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort
</UL>
<BR>[Called By]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Abort
</UL>
<P><STRONG><a name="[6b]"></a>HAL_UART_AbortReceive</STRONG> (Thumb, 278 bytes, Stack size 32 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive))
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = HAL_UART_AbortReceive &rArr; HAL_DMA_Abort
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_GetError
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort
</UL>
<BR>[Called By]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Abort
</UL>
<P><STRONG><a name="[6c]"></a>HAL_UART_AbortTransmit</STRONG> (Thumb, 186 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = HAL_UART_AbortTransmit &rArr; HAL_DMA_Abort
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_GetError
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_DMA_Abort
</UL>
<BR>[Called By]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Abort
</UL>
<P><STRONG><a name="[6d]"></a>HAL_UART_Init</STRONG> (Thumb, 158 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 128<LI>Call Chain = HAL_UART_Init &rArr; HAL_UART_MspInit &rArr; HAL_GPIO_Init
</UL>
<BR>[Calls]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SetConfig
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_MspInit
</UL>
<BR>[Called By]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_USART1_UART_Init
</UL>
<P><STRONG><a name="[6e]"></a>HAL_UART_MspInit</STRONG> (Thumb, 152 bytes, Stack size 48 bytes, usart.o(.text.HAL_UART_MspInit))
<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = HAL_UART_MspInit &rArr; HAL_GPIO_Init
</UL>
<BR>[Calls]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_Init
</UL>
<BR>[Called By]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Init
</UL>
<P><STRONG><a name="[71]"></a>HAL_UART_Receive_IT</STRONG> (Thumb, 86 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = HAL_UART_Receive_IT &rArr; UART_Start_Receive_IT
</UL>
<BR>[Calls]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Start_Receive_IT
</UL>
<BR>[Called By]<UL><LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Receive_IT
</UL>
<P><STRONG><a name="[2]"></a>HardFault_Handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.HardFault_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[65]"></a>MX_GPIO_Init</STRONG> (Thumb, 182 bytes, Stack size 56 bytes, gpio.o(.text.MX_GPIO_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = MX_GPIO_Init &rArr; HAL_GPIO_Init
<P><STRONG><a name="[74]"></a>MB_DevoceInentificationInit</STRONG> (Thumb, 78 bytes, Stack size 0 bytes, modbus.o(.text.MB_DevoceInentificationInit))
<BR><BR>[Called By]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MODBUS_FirstInit
</UL>
<BR>[Calls]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_Init
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<P><STRONG><a name="[73]"></a>MODBUS_FirstInit</STRONG> (Thumb, 66 bytes, Stack size 16 bytes, modbus.o(.text.MODBUS_FirstInit))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = MODBUS_FirstInit &rArr; RS_Init
</UL>
<BR>[Calls]<UL><LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Init
<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MB_DevoceInentificationInit
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[68]"></a>MX_TIM2_Init</STRONG> (Thumb, 126 bytes, Stack size 40 bytes, tim.o(.text.MX_TIM2_Init))
<P><STRONG><a name="[76]"></a>MX_GPIO_Init</STRONG> (Thumb, 182 bytes, Stack size 56 bytes, gpio.o(.text.MX_GPIO_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = MX_GPIO_Init &rArr; HAL_GPIO_Init
</UL>
<BR>[Calls]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_Init
<LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[78]"></a>MX_TIM2_Init</STRONG> (Thumb, 126 bytes, Stack size 40 bytes, tim.o(.text.MX_TIM2_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 92<LI>Call Chain = MX_TIM2_Init &rArr; HAL_TIM_ConfigClockSource &rArr; TIM_ETR_SetConfig
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIMEx_MasterConfigSynchronization
<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Error_Handler
<BR>[Calls]<UL><LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIMEx_MasterConfigSynchronization
<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Error_Handler
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[7b]"></a>MX_TIM3_Init</STRONG> (Thumb, 130 bytes, Stack size 40 bytes, tim.o(.text.MX_TIM3_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 92<LI>Call Chain = MX_TIM3_Init &rArr; HAL_TIM_ConfigClockSource &rArr; TIM_ETR_SetConfig
</UL>
<BR>[Calls]<UL><LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIMEx_MasterConfigSynchronization
<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Error_Handler
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[7c]"></a>MX_USART1_UART_Init</STRONG> (Thumb, 64 bytes, Stack size 16 bytes, usart.o(.text.MX_USART1_UART_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 144<LI>Call Chain = MX_USART1_UART_Init &rArr; HAL_UART_Init &rArr; HAL_UART_MspInit &rArr; HAL_GPIO_Init
</UL>
<BR>[Calls]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Init
<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Error_Handler
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
@@ -612,24 +746,50 @@ Global Symbols
<P><STRONG><a name="[8]"></a>PendSV_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.PendSV_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[7d]"></a>RS_Abort</STRONG> (Thumb, 348 bytes, Stack size 24 bytes, rs_message.o(.text.RS_Abort))
<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = RS_Abort &rArr; HAL_UART_Abort &rArr; HAL_DMA_Abort
</UL>
<BR>[Calls]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_AbortReceive
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_AbortTransmit
<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Abort
<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Stop_IT
</UL>
<BR>[Called By]<UL><LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Receive_IT
</UL>
<P><STRONG><a name="[75]"></a>RS_Init</STRONG> (Thumb, 112 bytes, Stack size 20 bytes, rs_message.o(.text.RS_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = RS_Init
</UL>
<BR>[Called By]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MODBUS_FirstInit
</UL>
<P><STRONG><a name="[7f]"></a>RS_Receive_IT</STRONG> (Thumb, 176 bytes, Stack size 24 bytes, rs_message.o(.text.RS_Receive_IT))
<BR><BR>[Stack]<UL><LI>Max Depth = 100<LI>Call Chain = RS_Receive_IT &rArr; RS_Abort &rArr; HAL_UART_Abort &rArr; HAL_DMA_Abort
</UL>
<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Receive_IT
<LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Abort
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[6]"></a>SVC_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.SVC_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[9]"></a>SysTick_Handler</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, stm32f1xx_it.o(.text.SysTick_Handler))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = SysTick_Handler
</UL>
<BR>[Calls]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_IncTick
<BR>[Calls]<UL><LI><a href="#[80]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_IncTick
</UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[6c]"></a>SystemClock_Config</STRONG> (Thumb, 108 bytes, Stack size 72 bytes, main.o(.text.SystemClock_Config))
<P><STRONG><a name="[81]"></a>SystemClock_Config</STRONG> (Thumb, 108 bytes, Stack size 72 bytes, main.o(.text.SystemClock_Config))
<BR><BR>[Stack]<UL><LI>Max Depth = 176 + Unknown Stack Size
<LI>Call Chain = SystemClock_Config &rArr; HAL_RCC_ClockConfig &rArr; HAL_InitTick &rArr; HAL_NVIC_SetPriority &rArr; NVIC_EncodePriority
</UL>
<BR>[Calls]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Error_Handler
<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Error_Handler
<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
</UL>
<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
@@ -637,52 +797,58 @@ Global Symbols
<P><STRONG><a name="[35]"></a>SystemInit</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, system_stm32f1xx.o(.text.SystemInit))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(.text)
</UL>
<P><STRONG><a name="[5f]"></a>TIM_Base_SetConfig</STRONG> (Thumb, 262 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig))
<P><STRONG><a name="[62]"></a>TIM_Base_SetConfig</STRONG> (Thumb, 262 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = TIM_Base_SetConfig
</UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
</UL>
<P><STRONG><a name="[61]"></a>TIM_ETR_SetConfig</STRONG> (Thumb, 52 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig))
<P><STRONG><a name="[64]"></a>TIM_ETR_SetConfig</STRONG> (Thumb, 52 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = TIM_ETR_SetConfig
</UL>
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
</UL>
<P><STRONG><a name="[72]"></a>UART_Start_Receive_IT</STRONG> (Thumb, 98 bytes, Stack size 12 bytes, stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = UART_Start_Receive_IT
</UL>
<BR>[Called By]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Receive_IT
</UL>
<P><STRONG><a name="[5]"></a>UsageFault_Handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.UsageFault_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f103xb.o(RESET)
</UL>
<P><STRONG><a name="[6f]"></a>append_bit</STRONG> (Thumb, 48 bytes, Stack size 12 bytes, canform.o(.text.append_bit))
<P><STRONG><a name="[84]"></a>append_bit</STRONG> (Thumb, 48 bytes, Stack size 12 bytes, canform.o(.text.append_bit))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = append_bit
</UL>
<BR>[Called By]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;apply_bit_stuffing_with_error
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bits
<BR>[Called By]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;apply_bit_stuffing_with_error
<LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bits
<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;form_CAN_bitstream_full
</UL>
<P><STRONG><a name="[6e]"></a>append_bits</STRONG> (Thumb, 64 bytes, Stack size 32 bytes, canform.o(.text.append_bits))
<P><STRONG><a name="[83]"></a>append_bits</STRONG> (Thumb, 64 bytes, Stack size 32 bytes, canform.o(.text.append_bits))
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = append_bits &rArr; append_bit
</UL>
<BR>[Calls]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bit
<BR>[Calls]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bit
</UL>
<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;form_CAN_bitstream_full
</UL>
<P><STRONG><a name="[70]"></a>apply_bit_stuffing_with_error</STRONG> (Thumb, 196 bytes, Stack size 40 bytes, canform.o(.text.apply_bit_stuffing_with_error))
<P><STRONG><a name="[85]"></a>apply_bit_stuffing_with_error</STRONG> (Thumb, 196 bytes, Stack size 40 bytes, canform.o(.text.apply_bit_stuffing_with_error))
<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = apply_bit_stuffing_with_error &rArr; append_bit
</UL>
<BR>[Calls]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bit
<BR>[Calls]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bit
</UL>
<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;form_CAN_bitstream_full
</UL>
<P><STRONG><a name="[72]"></a>compute_crc15</STRONG> (Thumb, 118 bytes, Stack size 20 bytes, canform.o(.text.compute_crc15))
<P><STRONG><a name="[87]"></a>compute_crc15</STRONG> (Thumb, 118 bytes, Stack size 20 bytes, canform.o(.text.compute_crc15))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = compute_crc15
</UL>
<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;form_CAN_bitstream_full
</UL>
<P><STRONG><a name="[71]"></a>flip_bit</STRONG> (Thumb, 48 bytes, Stack size 4 bytes, canform.o(.text.flip_bit))
<P><STRONG><a name="[86]"></a>flip_bit</STRONG> (Thumb, 48 bytes, Stack size 4 bytes, canform.o(.text.flip_bit))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = flip_bit
</UL>
<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;form_CAN_bitstream_full
@@ -691,25 +857,29 @@ Global Symbols
<P><STRONG><a name="[4a]"></a>form_CAN_bitstream_full</STRONG> (Thumb, 978 bytes, Stack size 160 bytes, canform.o(.text.form_CAN_bitstream_full))
<BR><BR>[Stack]<UL><LI>Max Depth = 212<LI>Call Chain = form_CAN_bitstream_full &rArr; apply_bit_stuffing_with_error &rArr; append_bit
</UL>
<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flip_bit
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;apply_bit_stuffing_with_error
<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;compute_crc15
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bits
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bit
<BR>[Calls]<UL><LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flip_bit
<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;apply_bit_stuffing_with_error
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;compute_crc15
<LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bits
<LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;append_bit
</UL>
<BR>[Called By]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CANEmu_SendFrame
</UL>
<P><STRONG><a name="[40]"></a>main</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, main.o(.text.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 252 + Unknown Stack Size
<P><STRONG><a name="[40]"></a>main</STRONG> (Thumb, 488 bytes, Stack size 32 bytes, main.o(.text.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 268 + Unknown Stack Size
<LI>Call Chain = main &rArr; CANEmu_SendFrame &rArr; form_CAN_bitstream_full &rArr; apply_bit_stuffing_with_error &rArr; append_bit
</UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CANEmu_SendFrame
<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CANEmu_Init
<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RS_Receive_IT
<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MODBUS_FirstInit
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CANEmu_Init
<LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_USART1_UART_Init
<LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM3_Init
<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Init
</UL>
<BR>[Called By]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_main
@@ -724,28 +894,28 @@ Global Symbols
<H3>
Local Symbols
</H3>
<P><STRONG><a name="[62]"></a>TIM_TI1_ConfigInputStage</STRONG> (Thumb, 80 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage))
<P><STRONG><a name="[65]"></a>TIM_TI1_ConfigInputStage</STRONG> (Thumb, 80 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = TIM_TI1_ConfigInputStage
</UL>
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
</UL>
<P><STRONG><a name="[63]"></a>TIM_ITRx_SetConfig</STRONG> (Thumb, 42 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig))
<P><STRONG><a name="[66]"></a>TIM_ITRx_SetConfig</STRONG> (Thumb, 42 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = TIM_ITRx_SetConfig
</UL>
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
</UL>
<P><STRONG><a name="[64]"></a>TIM_TI2_ConfigInputStage</STRONG> (Thumb, 82 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage))
<P><STRONG><a name="[67]"></a>TIM_TI2_ConfigInputStage</STRONG> (Thumb, 82 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = TIM_TI2_ConfigInputStage
</UL>
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_ConfigClockSource
</UL>
<P><STRONG><a name="[5b]"></a>RCC_Delay</STRONG> (Thumb, 58 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.RCC_Delay))
<P><STRONG><a name="[5e]"></a>RCC_Delay</STRONG> (Thumb, 58 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.RCC_Delay))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = RCC_Delay
</UL>
<BR>[Called By]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_OscConfig
</UL>
<P><STRONG><a name="[57]"></a>__NVIC_SetPriorityGrouping</STRONG> (Thumb, 60 bytes, Stack size 12 bytes, stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping))
@@ -767,17 +937,26 @@ Local Symbols
<P><STRONG><a name="[56]"></a>__NVIC_SetPriority</STRONG> (Thumb, 66 bytes, Stack size 8 bytes, stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __NVIC_SetPriority
</UL>
<BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Config
<BR>[Called By]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Config
<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_NVIC_SetPriority
</UL>
<P><STRONG><a name="[5c]"></a>SysTick_Config</STRONG> (Thumb, 82 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(.text.SysTick_Config))
<P><STRONG><a name="[5f]"></a>SysTick_Config</STRONG> (Thumb, 82 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(.text.SysTick_Config))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = SysTick_Config &rArr; __NVIC_SetPriority
</UL>
<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__NVIC_SetPriority
</UL>
<BR>[Called By]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SYSTICK_Config
</UL>
<P><STRONG><a name="[6f]"></a>UART_SetConfig</STRONG> (Thumb, 186 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(.text.UART_SetConfig))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = UART_SetConfig &rArr; HAL_RCC_GetPCLK2Freq
</UL>
<BR>[Calls]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetPCLK2Freq
<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_GetPCLK1Freq
</UL>
<BR>[Called By]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_UART_Init
</UL>
<P>
<H3>
Undefined Global Symbols

View File

@@ -3,6 +3,7 @@
"canemu\main.o"
"canemu\gpio.o"
"canemu\tim.o"
"canemu\usart.o"
"canemu\stm32f1xx_it.o"
"canemu\stm32f1xx_hal_msp.o"
"canemu\stm32f1xx_hal_gpio_ex.o"
@@ -18,9 +19,13 @@
"canemu\stm32f1xx_hal_flash.o"
"canemu\stm32f1xx_hal_flash_ex.o"
"canemu\stm32f1xx_hal_exti.o"
"canemu\stm32f1xx_hal_uart.o"
"canemu\system_stm32f1xx.o"
"canemu\canemu.o"
"canemu\canform.o"
"canemu\crc_algs.o"
"canemu\modbus.o"
"canemu\rs_message.o"
--strict --scatter "CANEmu\CANEmu.sct"
--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols
--info sizes --info totals --info unused --info veneers

View File

@@ -27,8 +27,16 @@ Section Cross References
main.o(.text.main) refers to main.o(.text.SystemClock_Config) for SystemClock_Config
main.o(.text.main) refers to gpio.o(.text.MX_GPIO_Init) for MX_GPIO_Init
main.o(.text.main) refers to tim.o(.text.MX_TIM2_Init) for MX_TIM2_Init
main.o(.text.main) refers to tim.o(.text.MX_TIM3_Init) for MX_TIM3_Init
main.o(.text.main) refers to usart.o(.text.MX_USART1_UART_Init) for MX_USART1_UART_Init
main.o(.text.main) refers to main.o(.bss.hcanemu) for hcanemu
main.o(.text.main) refers to canemu.o(.text.CANEmu_Init) for CANEmu_Init
main.o(.text.main) refers to modbus.o(.text.MODBUS_FirstInit) for MODBUS_FirstInit
main.o(.text.main) refers to modbus.o(.bss.hmodbus1) for hmodbus1
main.o(.text.main) refers to modbus.o(.bss.MODBUS_MSG) for MODBUS_MSG
main.o(.text.main) refers to rs_message.o(.text.RS_Receive_IT) for RS_Receive_IT
main.o(.text.main) refers to main.o(.bss.flag_manual) for flag_manual
main.o(.text.main) refers to modbus.o(.bss.MB_DATA) for MB_DATA
main.o(.text.main) refers to stm32f1xx_hal.o(.text.HAL_Delay) for HAL_Delay
main.o(.text.main) refers to canemu.o(.text.CANEmu_SendFrame) for CANEmu_SendFrame
main.o(.ARM.exidx.text.main) refers to main.o(.text.main) for [Anonymous Symbol]
@@ -47,8 +55,22 @@ Section Cross References
tim.o(.text.MX_TIM2_Init) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource
tim.o(.text.MX_TIM2_Init) refers to stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization
tim.o(.ARM.exidx.text.MX_TIM2_Init) refers to tim.o(.text.MX_TIM2_Init) for [Anonymous Symbol]
tim.o(.text.MX_TIM3_Init) refers to tim.o(.bss.htim3) for htim3
tim.o(.text.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init) for HAL_TIM_Base_Init
tim.o(.text.MX_TIM3_Init) refers to main.o(.text.Error_Handler) for Error_Handler
tim.o(.text.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource
tim.o(.text.MX_TIM3_Init) refers to stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization
tim.o(.ARM.exidx.text.MX_TIM3_Init) refers to tim.o(.text.MX_TIM3_Init) for [Anonymous Symbol]
tim.o(.ARM.exidx.text.HAL_TIM_Base_MspInit) refers to tim.o(.text.HAL_TIM_Base_MspInit) for [Anonymous Symbol]
tim.o(.ARM.exidx.text.HAL_TIM_Base_MspDeInit) refers to tim.o(.text.HAL_TIM_Base_MspDeInit) for [Anonymous Symbol]
usart.o(.text.MX_USART1_UART_Init) refers to usart.o(.bss.huart1) for huart1
usart.o(.text.MX_USART1_UART_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Init) for HAL_UART_Init
usart.o(.text.MX_USART1_UART_Init) refers to main.o(.text.Error_Handler) for Error_Handler
usart.o(.ARM.exidx.text.MX_USART1_UART_Init) refers to usart.o(.text.MX_USART1_UART_Init) for [Anonymous Symbol]
usart.o(.text.HAL_UART_MspInit) refers to stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init) for HAL_GPIO_Init
usart.o(.ARM.exidx.text.HAL_UART_MspInit) refers to usart.o(.text.HAL_UART_MspInit) for [Anonymous Symbol]
usart.o(.text.HAL_UART_MspDeInit) refers to stm32f1xx_hal_gpio.o(.text.HAL_GPIO_DeInit) for HAL_GPIO_DeInit
usart.o(.ARM.exidx.text.HAL_UART_MspDeInit) refers to usart.o(.text.HAL_UART_MspDeInit) for [Anonymous Symbol]
stm32f1xx_it.o(.ARM.exidx.text.NMI_Handler) refers to stm32f1xx_it.o(.text.NMI_Handler) for [Anonymous Symbol]
stm32f1xx_it.o(.ARM.exidx.text.HardFault_Handler) refers to stm32f1xx_it.o(.text.HardFault_Handler) for [Anonymous Symbol]
stm32f1xx_it.o(.ARM.exidx.text.MemManage_Handler) refers to stm32f1xx_it.o(.text.MemManage_Handler) for [Anonymous Symbol]
@@ -685,6 +707,143 @@ Section Cross References
stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_GetPending) refers to stm32f1xx_hal_exti.o(.text.HAL_EXTI_GetPending) for [Anonymous Symbol]
stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_ClearPending) refers to stm32f1xx_hal_exti.o(.text.HAL_EXTI_ClearPending) for [Anonymous Symbol]
stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_GenerateSWI) refers to stm32f1xx_hal_exti.o(.text.HAL_EXTI_GenerateSWI) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit
stm32f1xx_hal_uart.o(.text.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Init) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspInit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_MspInit) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq
stm32f1xx_hal_uart.o(.text.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq) for HAL_RCC_GetPCLK1Freq
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_SetConfig) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit
stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_LIN_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit
stm32f1xx_hal_uart.o(.text.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_LIN_Init) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit
stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_DeInit) refers to usart.o(.text.HAL_UART_MspDeInit) for HAL_UART_MspDeInit
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DeInit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DeInit) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspDeInit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_MspDeInit) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick
stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick
stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Receive) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick
stm32f1xx_hal_uart.o(.text.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) for UART_Start_Receive_IT
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt) for UART_DMATransmitCplt
stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt) for UART_DMATxHalfCplt
stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMAError) for UART_DMAError
stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Start_IT) for HAL_DMA_Start_IT
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATransmitCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxHalfCpltCallback) for HAL_UART_TxHalfCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer) for UART_EndTxTransfer
stm32f1xx_hal_uart.o(.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer
stm32f1xx_hal_uart.o(.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.UART_DMAError) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) for UART_Start_Receive_DMA
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_DMA) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) for UART_DMAReceiveCplt
stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) for UART_DMARxHalfCplt
stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMAError) for UART_DMAError
stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Start_IT) for HAL_DMA_Start_IT
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAPause) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DMAPause) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAResume) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DMAResume) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort
stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer) for UART_EndTxTransfer
stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTxTransfer) refers to stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndRxTransfer) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) for UART_Start_Receive_IT
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) for UART_Start_Receive_DMA
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_DMA) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_GetRxEventType) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_GetRxEventType) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort
stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) for HAL_DMA_GetError
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) for HAL_DMA_GetError
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) for HAL_DMA_GetError
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback) for UART_DMATxAbortCallback
stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback) for UART_DMARxAbortCallback
stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT
stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback) for UART_DMATxOnlyAbortCallback
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmitCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback) for UART_DMARxOnlyAbortCallback
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT
stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceiveCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_Receive_IT) for UART_Receive_IT
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError) for UART_DMAAbortOnError
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_Transmit_IT) for UART_Transmit_IT
stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT) for UART_EndTransmit_IT
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback
stm32f1xx_hal_uart.o(.text.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Receive_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_ErrorCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_RxEventCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Transmit_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Transmit_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxHalfCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxHalfCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxHalfCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxHalfCpltCallback) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_SendBreak) refers to stm32f1xx_hal_uart.o(.text.HAL_LIN_SendBreak) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_EnterMuteMode) refers to stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_EnterMuteMode) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_ExitMuteMode) refers to stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_ExitMuteMode) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableTransmitter) refers to stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableTransmitter) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableReceiver) refers to stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableReceiver) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetState) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_GetState) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetError) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_GetError) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback
stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) for [Anonymous Symbol]
stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback
stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxHalfCpltCallback) for HAL_UART_RxHalfCpltCallback
stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) for [Anonymous Symbol]
system_stm32f1xx.o(.ARM.exidx.text.SystemInit) refers to system_stm32f1xx.o(.text.SystemInit) for [Anonymous Symbol]
system_stm32f1xx.o(.text.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.data.SystemCoreClock) for SystemCoreClock
system_stm32f1xx.o(.text.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.rodata.AHBPrescTable) for AHBPrescTable
@@ -717,6 +876,117 @@ Section Cross References
canform.o(.text.form_CAN_bitstream_full) refers to canform.o(.bss.can_bits_len) for can_bits_len
canform.o(.text.form_CAN_bitstream_full) refers to canform.o(.text.apply_bit_stuffing_with_error) for apply_bit_stuffing_with_error
canform.o(.ARM.exidx.text.form_CAN_bitstream_full) refers to canform.o(.text.form_CAN_bitstream_full) for [Anonymous Symbol]
crc_algs.o(.text.crc32) refers to crc_algs.o(.rodata.crc32.crc32_table) for crc32.crc32_table
crc_algs.o(.ARM.exidx.text.crc32) refers to crc_algs.o(.text.crc32) for [Anonymous Symbol]
crc_algs.o(.text.crc16) refers to crc_algs.o(.data.uchCRCHi) for uchCRCHi
crc_algs.o(.text.crc16) refers to crc_algs.o(.data.uchCRCLo) for uchCRCLo
crc_algs.o(.text.crc16) refers to crc_algs.o(.bss.uIndex) for uIndex
crc_algs.o(.text.crc16) refers to crc_algs.o(.data.crc16.auchCRCHi) for crc16.auchCRCHi
crc_algs.o(.text.crc16) refers to crc_algs.o(.data.crc16.auchCRCLo) for crc16.auchCRCLo
crc_algs.o(.ARM.exidx.text.crc16) refers to crc_algs.o(.text.crc16) for [Anonymous Symbol]
modbus.o(.text.MODBUS_FirstInit) refers to modbus.o(.text.MB_DevoceInentificationInit) for MB_DevoceInentificationInit
modbus.o(.text.MODBUS_FirstInit) refers to modbus.o(.bss.hmodbus1) for hmodbus1
modbus.o(.text.MODBUS_FirstInit) refers to usart.o(.bss.huart1) for huart1
modbus.o(.text.MODBUS_FirstInit) refers to tim.o(.bss.htim3) for htim3
modbus.o(.text.MODBUS_FirstInit) refers to rs_message.o(.text.RS_Init) for RS_Init
modbus.o(.ARM.exidx.text.MODBUS_FirstInit) refers to modbus.o(.text.MODBUS_FirstInit) for [Anonymous Symbol]
modbus.o(.text.MB_DevoceInentificationInit) refers to modbus.o(.bss.MB_INFO) for MB_INFO
modbus.o(.text.MB_DevoceInentificationInit) refers to modbus.o(.rodata.str1.1) for .L.str
modbus.o(.ARM.exidx.text.MB_DevoceInentificationInit) refers to modbus.o(.text.MB_DevoceInentificationInit) for [Anonymous Symbol]
modbus.o(.text.MB_Write_Coil_Global) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress
modbus.o(.ARM.exidx.text.MB_Write_Coil_Global) refers to modbus.o(.text.MB_Write_Coil_Global) for [Anonymous Symbol]
modbus.o(.text.MB_DefineCoilsAddress) refers to modbus.o(.text.MB_Check_Address_For_Arr) for MB_Check_Address_For_Arr
modbus.o(.text.MB_DefineCoilsAddress) refers to modbus.o(.bss.MB_DATA) for MB_DATA
modbus.o(.ARM.exidx.text.MB_DefineCoilsAddress) refers to modbus.o(.text.MB_DefineCoilsAddress) for [Anonymous Symbol]
modbus.o(.text.MB_Read_Coil_Global) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress
modbus.o(.ARM.exidx.text.MB_Read_Coil_Global) refers to modbus.o(.text.MB_Read_Coil_Global) for [Anonymous Symbol]
modbus.o(.ARM.exidx.text.MB_Check_Address_For_Arr) refers to modbus.o(.text.MB_Check_Address_For_Arr) for [Anonymous Symbol]
modbus.o(.text.MB_DefineRegistersAddress) refers to modbus.o(.text.MB_Check_Address_For_Arr) for MB_Check_Address_For_Arr
modbus.o(.text.MB_DefineRegistersAddress) refers to modbus.o(.bss.MB_DATA) for MB_DATA
modbus.o(.ARM.exidx.text.MB_DefineRegistersAddress) refers to modbus.o(.text.MB_DefineRegistersAddress) for [Anonymous Symbol]
modbus.o(.text.MB_Read_Coils) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress
modbus.o(.ARM.exidx.text.MB_Read_Coils) refers to modbus.o(.text.MB_Read_Coils) for [Anonymous Symbol]
modbus.o(.text.MB_Read_Hold_Regs) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress
modbus.o(.ARM.exidx.text.MB_Read_Hold_Regs) refers to modbus.o(.text.MB_Read_Hold_Regs) for [Anonymous Symbol]
modbus.o(.text.MB_Read_Input_Regs) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress
modbus.o(.ARM.exidx.text.MB_Read_Input_Regs) refers to modbus.o(.text.MB_Read_Input_Regs) for [Anonymous Symbol]
modbus.o(.text.MB_Write_Single_Coil) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress
modbus.o(.ARM.exidx.text.MB_Write_Single_Coil) refers to modbus.o(.text.MB_Write_Single_Coil) for [Anonymous Symbol]
modbus.o(.text.MB_Write_Single_Reg) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress
modbus.o(.ARM.exidx.text.MB_Write_Single_Reg) refers to modbus.o(.text.MB_Write_Single_Reg) for [Anonymous Symbol]
modbus.o(.text.MB_Write_Miltuple_Coils) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress
modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Coils) refers to modbus.o(.text.MB_Write_Miltuple_Coils) for [Anonymous Symbol]
modbus.o(.text.MB_Write_Miltuple_Regs) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress
modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Regs) refers to modbus.o(.text.MB_Write_Miltuple_Regs) for [Anonymous Symbol]
modbus.o(.ARM.exidx.text.MB_WriteObjectToMessage) refers to modbus.o(.text.MB_WriteObjectToMessage) for [Anonymous Symbol]
modbus.o(.text.MB_Read_Device_Identification) refers to modbus.o(.bss.MB_INFO) for MB_INFO
modbus.o(.text.MB_Read_Device_Identification) refers to modbus.o(.text.MB_WriteObjectToMessage) for MB_WriteObjectToMessage
modbus.o(.ARM.exidx.text.MB_Read_Device_Identification) refers to modbus.o(.text.MB_Read_Device_Identification) for [Anonymous Symbol]
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Coils) for MB_Read_Coils
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Hold_Regs) for MB_Read_Hold_Regs
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Input_Regs) for MB_Read_Input_Regs
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Single_Coil) for MB_Write_Single_Coil
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Single_Reg) for MB_Write_Single_Reg
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Miltuple_Coils) for MB_Write_Miltuple_Coils
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Miltuple_Regs) for MB_Write_Miltuple_Regs
modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Device_Identification) for MB_Read_Device_Identification
modbus.o(.text.RS_Response) refers to rs_message.o(.text.RS_Abort) for RS_Abort
modbus.o(.text.RS_Response) refers to rs_message.o(.text.RS_Handle_Transmit_Start) for RS_Handle_Transmit_Start
modbus.o(.ARM.exidx.text.RS_Response) refers to modbus.o(.text.RS_Response) for [Anonymous Symbol]
modbus.o(.text.RS_Collect_Message) refers to crc_algs.o(.text.crc16) for crc16
modbus.o(.ARM.exidx.text.RS_Collect_Message) refers to modbus.o(.text.RS_Collect_Message) for [Anonymous Symbol]
modbus.o(.text.RS_Parse_Message) refers to crc_algs.o(.text.crc16) for crc16
modbus.o(.ARM.exidx.text.RS_Parse_Message) refers to modbus.o(.text.RS_Parse_Message) for [Anonymous Symbol]
modbus.o(.text.RS_Define_Size_of_RX_Message) refers to modbus.o(.text.RS_Parse_Message) for RS_Parse_Message
modbus.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message) refers to modbus.o(.text.RS_Define_Size_of_RX_Message) for [Anonymous Symbol]
rs_message.o(.text.RS_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) for HAL_UART_Receive_IT
rs_message.o(.text.RS_Receive_IT) refers to rs_message.o(.text.RS_Abort) for RS_Abort
rs_message.o(.ARM.exidx.text.RS_Receive_IT) refers to rs_message.o(.text.RS_Receive_IT) for [Anonymous Symbol]
rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT
rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) for HAL_UART_AbortReceive
rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) for HAL_UART_AbortTransmit
rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) for HAL_UART_Abort
rs_message.o(.ARM.exidx.text.RS_Abort) refers to rs_message.o(.text.RS_Abort) for [Anonymous Symbol]
rs_message.o(.text.RS_Transmit_IT) refers to modbus.o(.text.RS_Collect_Message) for RS_Collect_Message
rs_message.o(.text.RS_Transmit_IT) refers to rs_message.o(.text.RS_Abort) for RS_Abort
rs_message.o(.text.RS_Transmit_IT) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start
rs_message.o(.text.RS_Transmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_IT) for HAL_UART_Transmit_IT
rs_message.o(.ARM.exidx.text.RS_Transmit_IT) refers to rs_message.o(.text.RS_Transmit_IT) for [Anonymous Symbol]
rs_message.o(.ARM.exidx.text.RS_Collect_Message) refers to rs_message.o(.text.RS_Collect_Message) for [Anonymous Symbol]
rs_message.o(.text.RS_Handle_Receive_Start) refers to rs_message.o(.text.RS_Receive_IT) for RS_Receive_IT
rs_message.o(.ARM.exidx.text.RS_Handle_Receive_Start) refers to rs_message.o(.text.RS_Handle_Receive_Start) for [Anonymous Symbol]
rs_message.o(.text.RS_Init) refers to rs_message.o(.bss.RS_Buffer) for RS_Buffer
rs_message.o(.ARM.exidx.text.RS_Init) refers to rs_message.o(.text.RS_Init) for [Anonymous Symbol]
rs_message.o(.text.RS_ReInit_UART) refers to rs_message.o(.text.RS_Abort) for RS_Abort
rs_message.o(.text.RS_ReInit_UART) refers to usart.o(.text.HAL_UART_MspDeInit) for HAL_UART_MspDeInit
rs_message.o(.text.RS_ReInit_UART) refers to usart.o(.text.MX_USART1_UART_Init) for MX_USART1_UART_Init
rs_message.o(.text.RS_ReInit_UART) refers to rs_message.o(.text.RS_Receive_IT) for RS_Receive_IT
rs_message.o(.ARM.exidx.text.RS_ReInit_UART) refers to rs_message.o(.text.RS_ReInit_UART) for [Anonymous Symbol]
rs_message.o(.text.RS_Handle_Transmit_Start) refers to rs_message.o(.text.RS_Transmit_IT) for RS_Transmit_IT
rs_message.o(.ARM.exidx.text.RS_Handle_Transmit_Start) refers to rs_message.o(.text.RS_Handle_Transmit_Start) for [Anonymous Symbol]
rs_message.o(.text.RS_UART_RxCpltCallback) refers to modbus.o(.text.RS_Define_Size_of_RX_Message) for RS_Define_Size_of_RX_Message
rs_message.o(.text.RS_UART_RxCpltCallback) refers to rs_message.o(.text.RS_Abort) for RS_Abort
rs_message.o(.text.RS_UART_RxCpltCallback) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start
rs_message.o(.text.RS_UART_RxCpltCallback) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT
rs_message.o(.text.RS_UART_RxCpltCallback) refers to modbus.o(.text.RS_Parse_Message) for RS_Parse_Message
rs_message.o(.text.RS_UART_RxCpltCallback) refers to modbus.o(.text.RS_Response) for RS_Response
rs_message.o(.text.RS_UART_RxCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) for HAL_UART_Receive_IT
rs_message.o(.ARM.exidx.text.RS_UART_RxCpltCallback) refers to rs_message.o(.text.RS_UART_RxCpltCallback) for [Anonymous Symbol]
rs_message.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message) refers to rs_message.o(.text.RS_Define_Size_of_RX_Message) for [Anonymous Symbol]
rs_message.o(.ARM.exidx.text.RS_Parse_Message) refers to rs_message.o(.text.RS_Parse_Message) for [Anonymous Symbol]
rs_message.o(.ARM.exidx.text.RS_Response) refers to rs_message.o(.text.RS_Response) for [Anonymous Symbol]
rs_message.o(.text.RS_UART_TxCpltCallback) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start
rs_message.o(.ARM.exidx.text.RS_UART_TxCpltCallback) refers to rs_message.o(.text.RS_UART_TxCpltCallback) for [Anonymous Symbol]
rs_message.o(.text.RS_UART_Handler) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Start_IT) for HAL_TIM_Base_Start_IT
rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_UART_RxCpltCallback) for RS_UART_RxCpltCallback
rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_UART_TxCpltCallback) for RS_UART_TxCpltCallback
rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_Abort) for RS_Abort
rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start
rs_message.o(.ARM.exidx.text.RS_UART_Handler) refers to rs_message.o(.text.RS_UART_Handler) for [Anonymous Symbol]
rs_message.o(.text.RS_TIM_Handler) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT
rs_message.o(.text.RS_TIM_Handler) refers to rs_message.o(.text.RS_Abort) for RS_Abort
rs_message.o(.text.RS_TIM_Handler) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start
rs_message.o(.ARM.exidx.text.RS_TIM_Handler) refers to rs_message.o(.text.RS_TIM_Handler) for [Anonymous Symbol]
__main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main
@@ -837,9 +1107,15 @@ Removing Unused input sections from the image.
Removing gpio.o(.ARM.exidx.text.MX_GPIO_Init), (8 bytes).
Removing tim.o(.text), (0 bytes).
Removing tim.o(.ARM.exidx.text.MX_TIM2_Init), (8 bytes).
Removing tim.o(.ARM.exidx.text.MX_TIM3_Init), (8 bytes).
Removing tim.o(.ARM.exidx.text.HAL_TIM_Base_MspInit), (8 bytes).
Removing tim.o(.text.HAL_TIM_Base_MspDeInit), (38 bytes).
Removing tim.o(.text.HAL_TIM_Base_MspDeInit), (76 bytes).
Removing tim.o(.ARM.exidx.text.HAL_TIM_Base_MspDeInit), (8 bytes).
Removing usart.o(.text), (0 bytes).
Removing usart.o(.ARM.exidx.text.MX_USART1_UART_Init), (8 bytes).
Removing usart.o(.ARM.exidx.text.HAL_UART_MspInit), (8 bytes).
Removing usart.o(.text.HAL_UART_MspDeInit), (62 bytes).
Removing usart.o(.ARM.exidx.text.HAL_UART_MspDeInit), (8 bytes).
Removing stm32f1xx_it.o(.text), (0 bytes).
Removing stm32f1xx_it.o(.ARM.exidx.text.NMI_Handler), (8 bytes).
Removing stm32f1xx_it.o(.ARM.exidx.text.HardFault_Handler), (8 bytes).
@@ -874,7 +1150,6 @@ Removing Unused input sections from the image.
Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Stop), (8 bytes).
Removing stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Start_IT), (176 bytes).
Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Start_IT), (8 bytes).
Removing stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT), (82 bytes).
Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Stop_IT), (8 bytes).
Removing stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Start_DMA), (304 bytes).
Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Start_DMA), (8 bytes).
@@ -1234,11 +1509,8 @@ Removing Unused input sections from the image.
Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_EnableCSS), (8 bytes).
Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_DisableCSS), (12 bytes).
Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_DisableCSS), (8 bytes).
Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq), (12 bytes).
Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetHCLKFreq), (8 bytes).
Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq), (34 bytes).
Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetPCLK1Freq), (8 bytes).
Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq), (34 bytes).
Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetPCLK2Freq), (8 bytes).
Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetOscConfig), (302 bytes).
Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetOscConfig), (8 bytes).
@@ -1283,7 +1555,6 @@ Removing Unused input sections from the image.
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.DMA_SetConfig), (8 bytes).
Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_Start_IT), (202 bytes).
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_Start_IT), (8 bytes).
Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort), (124 bytes).
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_Abort), (8 bytes).
Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT), (284 bytes).
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_Abort_IT), (8 bytes).
@@ -1297,7 +1568,6 @@ Removing Unused input sections from the image.
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_UnRegisterCallback), (8 bytes).
Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_GetState), (14 bytes).
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_GetState), (8 bytes).
Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError), (12 bytes).
Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_GetError), (8 bytes).
Removing stm32f1xx_hal_cortex.o(.text), (0 bytes).
Removing stm32f1xx_hal_cortex.o(.ARM.exidx.text.HAL_NVIC_SetPriorityGrouping), (8 bytes).
@@ -1469,11 +1739,128 @@ Removing Unused input sections from the image.
Removing stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_ClearPending), (8 bytes).
Removing stm32f1xx_hal_exti.o(.text.HAL_EXTI_GenerateSWI), (34 bytes).
Removing stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_GenerateSWI), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text), (0 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Init), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_MspInit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspInit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_SetConfig), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init), (158 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_Init), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_LIN_Init), (184 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_Init), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init), (202 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_Init), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DeInit), (100 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DeInit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_MspDeInit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspDeInit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit), (304 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout), (218 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_WaitOnFlagUntilTimeout), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Receive), (318 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_IT), (114 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA), (226 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_DMA), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt), (122 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATransmitCplt), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt), (22 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxHalfCplt), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMAError), (124 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAError), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_DMA), (86 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_DMA), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA), (268 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_DMA), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DMAPause), (230 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAPause), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DMAResume), (226 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAResume), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop), (204 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAStop), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer), (54 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTxTransfer), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer), (148 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndRxTransfer), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle), (448 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_IT), (194 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_DMA), (184 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_DMA), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_GetRxEventType), (12 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_GetRxEventType), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT), (478 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback), (86 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxAbortCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback), (86 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxAbortCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT), (194 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback), (36 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxOnlyAbortCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmitCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT), (290 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback), (40 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxOnlyAbortCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceiveCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler), (1066 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_IRQHandler), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_Receive_IT), (362 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Receive_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError), (32 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAAbortOnError), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_ErrorCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback), (12 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_RxEventCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_Transmit_IT), (148 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Transmit_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT), (38 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTransmit_IT), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_TxHalfCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxHalfCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_RxHalfCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxHalfCpltCallback), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_LIN_SendBreak), (120 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_SendBreak), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_EnterMuteMode), (126 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_EnterMuteMode), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_ExitMuteMode), (126 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_ExitMuteMode), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableTransmitter), (118 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableTransmitter), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableReceiver), (118 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableReceiver), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_GetState), (40 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetState), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.HAL_UART_GetError), (12 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetError), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt), (244 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAReceiveCplt), (8 bytes).
Removing stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt), (52 bytes).
Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxHalfCplt), (8 bytes).
Removing system_stm32f1xx.o(.text), (0 bytes).
Removing system_stm32f1xx.o(.ARM.exidx.text.SystemInit), (8 bytes).
Removing system_stm32f1xx.o(.text.SystemCoreClockUpdate), (290 bytes).
Removing system_stm32f1xx.o(.ARM.exidx.text.SystemCoreClockUpdate), (8 bytes).
Removing system_stm32f1xx.o(.rodata.APBPrescTable), (8 bytes).
Removing canemu.o(.text), (0 bytes).
Removing canemu.o(.ARM.exidx.text.CANEmu_Init), (8 bytes).
Removing canemu.o(.ARM.exidx.text.wait_exact_ticks), (8 bytes).
@@ -1486,8 +1873,91 @@ Removing Unused input sections from the image.
Removing canform.o(.ARM.exidx.text.flip_bit), (8 bytes).
Removing canform.o(.ARM.exidx.text.form_CAN_bitstream_full), (8 bytes).
Removing canform.o(.bss.err_indices), (128 bytes).
Removing crc_algs.o(.text), (0 bytes).
Removing crc_algs.o(.text.crc32), (68 bytes).
Removing crc_algs.o(.ARM.exidx.text.crc32), (8 bytes).
Removing crc_algs.o(.text.crc16), (148 bytes).
Removing crc_algs.o(.ARM.exidx.text.crc16), (8 bytes).
Removing crc_algs.o(.data.uchCRCHi), (1 bytes).
Removing crc_algs.o(.data.uchCRCLo), (1 bytes).
Removing crc_algs.o(.rodata.crc32.crc32_table), (1024 bytes).
Removing crc_algs.o(.data.crc16.auchCRCHi), (256 bytes).
Removing crc_algs.o(.data.crc16.auchCRCLo), (256 bytes).
Removing crc_algs.o(.bss.uIndex), (4 bytes).
Removing crc_algs.o(.bss.CRC_calc), (4 bytes).
Removing crc_algs.o(.bss.CRC_ref), (4 bytes).
Removing modbus.o(.text), (0 bytes).
Removing modbus.o(.ARM.exidx.text.MODBUS_FirstInit), (8 bytes).
Removing modbus.o(.ARM.exidx.text.MB_DevoceInentificationInit), (8 bytes).
Removing modbus.o(.text.MB_Write_Coil_Global), (152 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Write_Coil_Global), (8 bytes).
Removing modbus.o(.text.MB_DefineCoilsAddress), (130 bytes).
Removing modbus.o(.ARM.exidx.text.MB_DefineCoilsAddress), (8 bytes).
Removing modbus.o(.text.MB_Read_Coil_Global), (98 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Read_Coil_Global), (8 bytes).
Removing modbus.o(.text.MB_Check_Address_For_Arr), (90 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Check_Address_For_Arr), (8 bytes).
Removing modbus.o(.text.MB_DefineRegistersAddress), (186 bytes).
Removing modbus.o(.ARM.exidx.text.MB_DefineRegistersAddress), (8 bytes).
Removing modbus.o(.text.MB_Read_Coils), (342 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Read_Coils), (8 bytes).
Removing modbus.o(.text.MB_Read_Hold_Regs), (114 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Read_Hold_Regs), (8 bytes).
Removing modbus.o(.text.MB_Read_Input_Regs), (148 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Read_Input_Regs), (8 bytes).
Removing modbus.o(.text.MB_Write_Single_Coil), (160 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Write_Single_Coil), (8 bytes).
Removing modbus.o(.text.MB_Write_Single_Reg), (68 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Write_Single_Reg), (8 bytes).
Removing modbus.o(.text.MB_Write_Miltuple_Coils), (380 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Coils), (8 bytes).
Removing modbus.o(.text.MB_Write_Miltuple_Regs), (136 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Regs), (8 bytes).
Removing modbus.o(.text.MB_WriteObjectToMessage), (88 bytes).
Removing modbus.o(.ARM.exidx.text.MB_WriteObjectToMessage), (8 bytes).
Removing modbus.o(.text.MB_Read_Device_Identification), (304 bytes).
Removing modbus.o(.ARM.exidx.text.MB_Read_Device_Identification), (8 bytes).
Removing modbus.o(.text.RS_Response), (682 bytes).
Removing modbus.o(.ARM.exidx.text.RS_Response), (8 bytes).
Removing modbus.o(.text.RS_Collect_Message), (478 bytes).
Removing modbus.o(.ARM.exidx.text.RS_Collect_Message), (8 bytes).
Removing modbus.o(.text.RS_Parse_Message), (484 bytes).
Removing modbus.o(.ARM.exidx.text.RS_Parse_Message), (8 bytes).
Removing modbus.o(.text.RS_Define_Size_of_RX_Message), (150 bytes).
Removing modbus.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message), (8 bytes).
Removing modbus.o(.bss.dbg_temp), (4 bytes).
Removing modbus.o(.bss.dbg_temp2), (4 bytes).
Removing modbus.o(.bss.dbg_temp3), (4 bytes).
Removing rs_message.o(.text), (0 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Receive_IT), (8 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Abort), (8 bytes).
Removing rs_message.o(.text.RS_Transmit_IT), (206 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Transmit_IT), (8 bytes).
Removing rs_message.o(.text.RS_Collect_Message), (14 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Collect_Message), (8 bytes).
Removing rs_message.o(.text.RS_Handle_Receive_Start), (92 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Handle_Receive_Start), (8 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Init), (8 bytes).
Removing rs_message.o(.text.RS_ReInit_UART), (56 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_ReInit_UART), (8 bytes).
Removing rs_message.o(.text.RS_Handle_Transmit_Start), (60 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Handle_Transmit_Start), (8 bytes).
Removing rs_message.o(.text.RS_UART_RxCpltCallback), (474 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_UART_RxCpltCallback), (8 bytes).
Removing rs_message.o(.text.RS_Define_Size_of_RX_Message), (12 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message), (8 bytes).
Removing rs_message.o(.text.RS_Parse_Message), (14 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Parse_Message), (8 bytes).
Removing rs_message.o(.text.RS_Response), (12 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_Response), (8 bytes).
Removing rs_message.o(.text.RS_UART_TxCpltCallback), (80 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_UART_TxCpltCallback), (8 bytes).
Removing rs_message.o(.text.RS_UART_Handler), (222 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_UART_Handler), (8 bytes).
Removing rs_message.o(.text.RS_TIM_Handler), (34 bytes).
Removing rs_message.o(.ARM.exidx.text.RS_TIM_Handler), (8 bytes).
658 unused section(s) (total 47162 bytes) removed from the image.
858 unused section(s) (total 63074 bytes) removed from the image.
==============================================================================
@@ -1552,9 +2022,12 @@ Image Symbol Table
../fplib/fpinit_empty.s 0x00000000 Number 0 fpinit_empty.o ABSOLUTE
canEmu.c 0x00000000 Number 0 canemu.o ABSOLUTE
canform.c 0x00000000 Number 0 canform.o ABSOLUTE
crc_algs.c 0x00000000 Number 0 crc_algs.o ABSOLUTE
dc.s 0x00000000 Number 0 dc.o ABSOLUTE
gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE
main.c 0x00000000 Number 0 main.o ABSOLUTE
modbus.c 0x00000000 Number 0 modbus.o ABSOLUTE
rs_message.c 0x00000000 Number 0 rs_message.o ABSOLUTE
startup_stm32f103xb.s 0x00000000 Number 0 startup_stm32f103xb.o ABSOLUTE
stm32f1xx_hal.c 0x00000000 Number 0 stm32f1xx_hal.o ABSOLUTE
stm32f1xx_hal_cortex.c 0x00000000 Number 0 stm32f1xx_hal_cortex.o ABSOLUTE
@@ -1570,9 +2043,11 @@ Image Symbol Table
stm32f1xx_hal_rcc_ex.c 0x00000000 Number 0 stm32f1xx_hal_rcc_ex.o ABSOLUTE
stm32f1xx_hal_tim.c 0x00000000 Number 0 stm32f1xx_hal_tim.o ABSOLUTE
stm32f1xx_hal_tim_ex.c 0x00000000 Number 0 stm32f1xx_hal_tim_ex.o ABSOLUTE
stm32f1xx_hal_uart.c 0x00000000 Number 0 stm32f1xx_hal_uart.o ABSOLUTE
stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE
system_stm32f1xx.c 0x00000000 Number 0 system_stm32f1xx.o ABSOLUTE
tim.c 0x00000000 Number 0 tim.o ABSOLUTE
usart.c 0x00000000 Number 0 usart.o ABSOLUTE
RESET 0x08000000 Section 236 startup_stm32f103xb.o(RESET)
!!!main 0x080000ec Section 8 __main.o(!!!main)
!!!scatter 0x080000f4 Section 52 __scatter.o(!!!scatter)
@@ -1634,73 +2109,100 @@ Image Symbol Table
[Anonymous Symbol] 0x080002bc Section 0 canemu.o(.text.CANEmu_SendFrame)
[Anonymous Symbol] 0x0800038c Section 0 stm32f1xx_it.o(.text.DebugMon_Handler)
[Anonymous Symbol] 0x08000390 Section 0 main.o(.text.Error_Handler)
[Anonymous Symbol] 0x080003a0 Section 0 stm32f1xx_hal.o(.text.HAL_Delay)
[Anonymous Symbol] 0x080003e4 Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init)
[Anonymous Symbol] 0x08000704 Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin)
[Anonymous Symbol] 0x08000734 Section 0 stm32f1xx_hal.o(.text.HAL_GetTick)
[Anonymous Symbol] 0x08000740 Section 0 stm32f1xx_hal.o(.text.HAL_IncTick)
[Anonymous Symbol] 0x0800075c Section 0 stm32f1xx_hal.o(.text.HAL_Init)
[Anonymous Symbol] 0x08000784 Section 0 stm32f1xx_hal.o(.text.HAL_InitTick)
[Anonymous Symbol] 0x080007f4 Section 0 stm32f1xx_hal_msp.o(.text.HAL_MspInit)
[Anonymous Symbol] 0x08000858 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority)
[Anonymous Symbol] 0x0800088c Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping)
[Anonymous Symbol] 0x0800089c Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig)
[Anonymous Symbol] 0x08000af4 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq)
[Anonymous Symbol] 0x08000bb0 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig)
[Anonymous Symbol] 0x0800122c Section 0 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config)
[Anonymous Symbol] 0x0800123c Section 0 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization)
[Anonymous Symbol] 0x08001318 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init)
[Anonymous Symbol] 0x080013b4 Section 0 tim.o(.text.HAL_TIM_Base_MspInit)
[Anonymous Symbol] 0x080013e8 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource)
[Anonymous Symbol] 0x0800156c Section 0 stm32f1xx_it.o(.text.HardFault_Handler)
[Anonymous Symbol] 0x08001570 Section 0 gpio.o(.text.MX_GPIO_Init)
[Anonymous Symbol] 0x08001628 Section 0 tim.o(.text.MX_TIM2_Init)
[Anonymous Symbol] 0x080016a8 Section 0 stm32f1xx_it.o(.text.MemManage_Handler)
[Anonymous Symbol] 0x080016ac Section 0 stm32f1xx_it.o(.text.NMI_Handler)
NVIC_EncodePriority 0x080016b1 Thumb Code 108 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority)
[Anonymous Symbol] 0x080016b0 Section 0 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority)
[Anonymous Symbol] 0x0800171c Section 0 stm32f1xx_it.o(.text.PendSV_Handler)
RCC_Delay 0x08001721 Thumb Code 58 stm32f1xx_hal_rcc.o(.text.RCC_Delay)
[Anonymous Symbol] 0x08001720 Section 0 stm32f1xx_hal_rcc.o(.text.RCC_Delay)
[Anonymous Symbol] 0x0800175c Section 0 stm32f1xx_it.o(.text.SVC_Handler)
SysTick_Config 0x08001761 Thumb Code 82 stm32f1xx_hal_cortex.o(.text.SysTick_Config)
[Anonymous Symbol] 0x08001760 Section 0 stm32f1xx_hal_cortex.o(.text.SysTick_Config)
[Anonymous Symbol] 0x080017b4 Section 0 stm32f1xx_it.o(.text.SysTick_Handler)
[Anonymous Symbol] 0x080017bc Section 0 main.o(.text.SystemClock_Config)
[Anonymous Symbol] 0x08001828 Section 0 system_stm32f1xx.o(.text.SystemInit)
[Anonymous Symbol] 0x0800182c Section 0 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig)
[Anonymous Symbol] 0x08001934 Section 0 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig)
TIM_ITRx_SetConfig 0x08001969 Thumb Code 42 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig)
[Anonymous Symbol] 0x08001968 Section 0 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig)
TIM_TI1_ConfigInputStage 0x08001995 Thumb Code 80 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage)
[Anonymous Symbol] 0x08001994 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage)
TIM_TI2_ConfigInputStage 0x080019e5 Thumb Code 82 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage)
[Anonymous Symbol] 0x080019e4 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage)
[Anonymous Symbol] 0x08001a38 Section 0 stm32f1xx_it.o(.text.UsageFault_Handler)
__NVIC_GetPriorityGrouping 0x08001a3d Thumb Code 16 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping)
[Anonymous Symbol] 0x08001a3c Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping)
__NVIC_SetPriority 0x08001a4d Thumb Code 66 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority)
[Anonymous Symbol] 0x08001a4c Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority)
__NVIC_SetPriorityGrouping 0x08001a91 Thumb Code 60 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping)
[Anonymous Symbol] 0x08001a90 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping)
[Anonymous Symbol] 0x08001acc Section 0 canform.o(.text.append_bit)
[Anonymous Symbol] 0x08001afc Section 0 canform.o(.text.append_bits)
[Anonymous Symbol] 0x08001b3c Section 0 canform.o(.text.apply_bit_stuffing_with_error)
[Anonymous Symbol] 0x08001c00 Section 0 canform.o(.text.compute_crc15)
[Anonymous Symbol] 0x08001c78 Section 0 canform.o(.text.flip_bit)
[Anonymous Symbol] 0x08001ca8 Section 0 canform.o(.text.form_CAN_bitstream_full)
[Anonymous Symbol] 0x0800207c Section 0 main.o(.text.main)
[Anonymous Symbol] 0x080020c8 Section 0 canemu.o(.text.wait_exact_ticks)
HAL_RCC_GetSysClockFreq.aPLLMULFactorTable 0x08002122 Data 16 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable)
[Anonymous Symbol] 0x08002122 Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable)
HAL_RCC_GetSysClockFreq.aPredivFactorTable 0x08002132 Data 2 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable)
[Anonymous Symbol] 0x08002132 Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable)
[Anonymous Symbol] 0x080003a0 Section 0 stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort)
[Anonymous Symbol] 0x0800041c Section 0 stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError)
[Anonymous Symbol] 0x08000428 Section 0 stm32f1xx_hal.o(.text.HAL_Delay)
[Anonymous Symbol] 0x0800046c Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init)
[Anonymous Symbol] 0x0800078c Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin)
[Anonymous Symbol] 0x080007bc Section 0 stm32f1xx_hal.o(.text.HAL_GetTick)
[Anonymous Symbol] 0x080007c8 Section 0 stm32f1xx_hal.o(.text.HAL_IncTick)
[Anonymous Symbol] 0x080007e4 Section 0 stm32f1xx_hal.o(.text.HAL_Init)
[Anonymous Symbol] 0x0800080c Section 0 stm32f1xx_hal.o(.text.HAL_InitTick)
[Anonymous Symbol] 0x0800087c Section 0 stm32f1xx_hal_msp.o(.text.HAL_MspInit)
[Anonymous Symbol] 0x080008e0 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority)
[Anonymous Symbol] 0x08000914 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping)
[Anonymous Symbol] 0x08000924 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig)
[Anonymous Symbol] 0x08000b7c Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq)
[Anonymous Symbol] 0x08000b88 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq)
[Anonymous Symbol] 0x08000bac Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq)
[Anonymous Symbol] 0x08000bd0 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq)
[Anonymous Symbol] 0x08000c8c Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig)
[Anonymous Symbol] 0x08001308 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config)
[Anonymous Symbol] 0x08001318 Section 0 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization)
[Anonymous Symbol] 0x080013f4 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init)
[Anonymous Symbol] 0x08001490 Section 0 tim.o(.text.HAL_TIM_Base_MspInit)
[Anonymous Symbol] 0x080014f8 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT)
[Anonymous Symbol] 0x0800154c Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource)
[Anonymous Symbol] 0x080016d0 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_Abort)
[Anonymous Symbol] 0x08001868 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive)
[Anonymous Symbol] 0x08001980 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit)
[Anonymous Symbol] 0x08001a3c Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_Init)
[Anonymous Symbol] 0x08001adc Section 0 usart.o(.text.HAL_UART_MspInit)
[Anonymous Symbol] 0x08001b74 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT)
[Anonymous Symbol] 0x08001bcc Section 0 stm32f1xx_it.o(.text.HardFault_Handler)
[Anonymous Symbol] 0x08001bd0 Section 0 modbus.o(.text.MB_DevoceInentificationInit)
[Anonymous Symbol] 0x08001c20 Section 0 modbus.o(.text.MODBUS_FirstInit)
[Anonymous Symbol] 0x08001c64 Section 0 gpio.o(.text.MX_GPIO_Init)
[Anonymous Symbol] 0x08001d1c Section 0 tim.o(.text.MX_TIM2_Init)
[Anonymous Symbol] 0x08001d9c Section 0 tim.o(.text.MX_TIM3_Init)
[Anonymous Symbol] 0x08001e20 Section 0 usart.o(.text.MX_USART1_UART_Init)
[Anonymous Symbol] 0x08001e60 Section 0 stm32f1xx_it.o(.text.MemManage_Handler)
[Anonymous Symbol] 0x08001e64 Section 0 stm32f1xx_it.o(.text.NMI_Handler)
NVIC_EncodePriority 0x08001e69 Thumb Code 108 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority)
[Anonymous Symbol] 0x08001e68 Section 0 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority)
[Anonymous Symbol] 0x08001ed4 Section 0 stm32f1xx_it.o(.text.PendSV_Handler)
RCC_Delay 0x08001ed9 Thumb Code 58 stm32f1xx_hal_rcc.o(.text.RCC_Delay)
[Anonymous Symbol] 0x08001ed8 Section 0 stm32f1xx_hal_rcc.o(.text.RCC_Delay)
[Anonymous Symbol] 0x08001f14 Section 0 rs_message.o(.text.RS_Abort)
[Anonymous Symbol] 0x08002070 Section 0 rs_message.o(.text.RS_Init)
[Anonymous Symbol] 0x080020e0 Section 0 rs_message.o(.text.RS_Receive_IT)
[Anonymous Symbol] 0x08002190 Section 0 stm32f1xx_it.o(.text.SVC_Handler)
SysTick_Config 0x08002195 Thumb Code 82 stm32f1xx_hal_cortex.o(.text.SysTick_Config)
[Anonymous Symbol] 0x08002194 Section 0 stm32f1xx_hal_cortex.o(.text.SysTick_Config)
[Anonymous Symbol] 0x080021e8 Section 0 stm32f1xx_it.o(.text.SysTick_Handler)
[Anonymous Symbol] 0x080021f0 Section 0 main.o(.text.SystemClock_Config)
[Anonymous Symbol] 0x0800225c Section 0 system_stm32f1xx.o(.text.SystemInit)
[Anonymous Symbol] 0x08002260 Section 0 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig)
[Anonymous Symbol] 0x08002368 Section 0 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig)
TIM_ITRx_SetConfig 0x0800239d Thumb Code 42 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig)
[Anonymous Symbol] 0x0800239c Section 0 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig)
TIM_TI1_ConfigInputStage 0x080023c9 Thumb Code 80 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage)
[Anonymous Symbol] 0x080023c8 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage)
TIM_TI2_ConfigInputStage 0x08002419 Thumb Code 82 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage)
[Anonymous Symbol] 0x08002418 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage)
UART_SetConfig 0x0800246d Thumb Code 186 stm32f1xx_hal_uart.o(.text.UART_SetConfig)
[Anonymous Symbol] 0x0800246c Section 0 stm32f1xx_hal_uart.o(.text.UART_SetConfig)
[Anonymous Symbol] 0x08002528 Section 0 stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT)
[Anonymous Symbol] 0x0800258c Section 0 stm32f1xx_it.o(.text.UsageFault_Handler)
__NVIC_GetPriorityGrouping 0x08002591 Thumb Code 16 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping)
[Anonymous Symbol] 0x08002590 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping)
__NVIC_SetPriority 0x080025a1 Thumb Code 66 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority)
[Anonymous Symbol] 0x080025a0 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority)
__NVIC_SetPriorityGrouping 0x080025e5 Thumb Code 60 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping)
[Anonymous Symbol] 0x080025e4 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping)
[Anonymous Symbol] 0x08002620 Section 0 canform.o(.text.append_bit)
[Anonymous Symbol] 0x08002650 Section 0 canform.o(.text.append_bits)
[Anonymous Symbol] 0x08002690 Section 0 canform.o(.text.apply_bit_stuffing_with_error)
[Anonymous Symbol] 0x08002754 Section 0 canform.o(.text.compute_crc15)
[Anonymous Symbol] 0x080027cc Section 0 canform.o(.text.flip_bit)
[Anonymous Symbol] 0x080027fc Section 0 canform.o(.text.form_CAN_bitstream_full)
[Anonymous Symbol] 0x08002bd0 Section 0 main.o(.text.main)
[Anonymous Symbol] 0x08002db8 Section 0 canemu.o(.text.wait_exact_ticks)
HAL_RCC_GetSysClockFreq.aPLLMULFactorTable 0x08002e1a Data 16 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable)
[Anonymous Symbol] 0x08002e1a Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable)
HAL_RCC_GetSysClockFreq.aPredivFactorTable 0x08002e2a Data 2 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable)
[Anonymous Symbol] 0x08002e2a Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable)
.L.str.2 0x08002e2c Data 9 modbus.o(.rodata.str1.1)
[Anonymous Symbol] 0x08002e2c Section 0 modbus.o(.rodata.str1.1)
.L.str 0x08002e35 Data 7 modbus.o(.rodata.str1.1)
.L.str.3 0x08002e3c Data 10 modbus.o(.rodata.str1.1)
.L.str.1 0x08002e45 Data 1 modbus.o(.rodata.str1.1)
.bss 0x20000010 Section 96 libspace.o(.bss)
Heap_Mem 0x200002f8 Data 512 startup_stm32f103xb.o(HEAP)
HEAP 0x200002f8 Section 512 startup_stm32f103xb.o(HEAP)
Stack_Mem 0x200004f8 Data 1024 startup_stm32f103xb.o(STACK)
STACK 0x200004f8 Section 1024 startup_stm32f103xb.o(STACK)
__initial_sp 0x200008f8 Data 0 startup_stm32f103xb.o(STACK)
Heap_Mem 0x20000638 Data 512 startup_stm32f103xb.o(HEAP)
HEAP 0x20000638 Section 512 startup_stm32f103xb.o(HEAP)
Stack_Mem 0x20000838 Data 1024 startup_stm32f103xb.o(STACK)
STACK 0x20000838 Section 1024 startup_stm32f103xb.o(STACK)
__initial_sp 0x20000c38 Data 0 startup_stm32f103xb.o(STACK)
Global Symbols
@@ -1855,62 +2357,91 @@ Image Symbol Table
CANEmu_SendFrame 0x080002bd Thumb Code 208 canemu.o(.text.CANEmu_SendFrame)
DebugMon_Handler 0x0800038d Thumb Code 2 stm32f1xx_it.o(.text.DebugMon_Handler)
Error_Handler 0x08000391 Thumb Code 14 main.o(.text.Error_Handler)
HAL_Delay 0x080003a1 Thumb Code 66 stm32f1xx_hal.o(.text.HAL_Delay)
HAL_GPIO_Init 0x080003e5 Thumb Code 798 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init)
HAL_GPIO_WritePin 0x08000705 Thumb Code 46 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin)
HAL_GetTick 0x08000735 Thumb Code 12 stm32f1xx_hal.o(.text.HAL_GetTick)
HAL_IncTick 0x08000741 Thumb Code 26 stm32f1xx_hal.o(.text.HAL_IncTick)
HAL_Init 0x0800075d Thumb Code 38 stm32f1xx_hal.o(.text.HAL_Init)
HAL_InitTick 0x08000785 Thumb Code 112 stm32f1xx_hal.o(.text.HAL_InitTick)
HAL_MspInit 0x080007f5 Thumb Code 100 stm32f1xx_hal_msp.o(.text.HAL_MspInit)
HAL_NVIC_SetPriority 0x08000859 Thumb Code 50 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority)
HAL_NVIC_SetPriorityGrouping 0x0800088d Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping)
HAL_RCC_ClockConfig 0x0800089d Thumb Code 598 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig)
HAL_RCC_GetSysClockFreq 0x08000af5 Thumb Code 188 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq)
HAL_RCC_OscConfig 0x08000bb1 Thumb Code 1658 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig)
HAL_SYSTICK_Config 0x0800122d Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config)
HAL_TIMEx_MasterConfigSynchronization 0x0800123d Thumb Code 220 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization)
HAL_TIM_Base_Init 0x08001319 Thumb Code 156 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init)
HAL_TIM_Base_MspInit 0x080013b5 Thumb Code 52 tim.o(.text.HAL_TIM_Base_MspInit)
HAL_TIM_ConfigClockSource 0x080013e9 Thumb Code 388 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource)
HardFault_Handler 0x0800156d Thumb Code 4 stm32f1xx_it.o(.text.HardFault_Handler)
MX_GPIO_Init 0x08001571 Thumb Code 182 gpio.o(.text.MX_GPIO_Init)
MX_TIM2_Init 0x08001629 Thumb Code 126 tim.o(.text.MX_TIM2_Init)
MemManage_Handler 0x080016a9 Thumb Code 4 stm32f1xx_it.o(.text.MemManage_Handler)
NMI_Handler 0x080016ad Thumb Code 4 stm32f1xx_it.o(.text.NMI_Handler)
PendSV_Handler 0x0800171d Thumb Code 2 stm32f1xx_it.o(.text.PendSV_Handler)
SVC_Handler 0x0800175d Thumb Code 2 stm32f1xx_it.o(.text.SVC_Handler)
SysTick_Handler 0x080017b5 Thumb Code 8 stm32f1xx_it.o(.text.SysTick_Handler)
SystemClock_Config 0x080017bd Thumb Code 108 main.o(.text.SystemClock_Config)
SystemInit 0x08001829 Thumb Code 2 system_stm32f1xx.o(.text.SystemInit)
TIM_Base_SetConfig 0x0800182d Thumb Code 262 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig)
TIM_ETR_SetConfig 0x08001935 Thumb Code 52 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig)
UsageFault_Handler 0x08001a39 Thumb Code 4 stm32f1xx_it.o(.text.UsageFault_Handler)
append_bit 0x08001acd Thumb Code 48 canform.o(.text.append_bit)
append_bits 0x08001afd Thumb Code 64 canform.o(.text.append_bits)
apply_bit_stuffing_with_error 0x08001b3d Thumb Code 196 canform.o(.text.apply_bit_stuffing_with_error)
compute_crc15 0x08001c01 Thumb Code 118 canform.o(.text.compute_crc15)
flip_bit 0x08001c79 Thumb Code 48 canform.o(.text.flip_bit)
form_CAN_bitstream_full 0x08001ca9 Thumb Code 978 canform.o(.text.form_CAN_bitstream_full)
main 0x0800207d Thumb Code 76 main.o(.text.main)
wait_exact_ticks 0x080020c9 Thumb Code 74 canemu.o(.text.wait_exact_ticks)
AHBPrescTable 0x08002112 Data 16 system_stm32f1xx.o(.rodata.AHBPrescTable)
Region$$Table$$Base 0x08002134 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x08002154 Number 0 anon$$obj.o(Region$$Table)
HAL_DMA_Abort 0x080003a1 Thumb Code 124 stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort)
HAL_DMA_GetError 0x0800041d Thumb Code 12 stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError)
HAL_Delay 0x08000429 Thumb Code 66 stm32f1xx_hal.o(.text.HAL_Delay)
HAL_GPIO_Init 0x0800046d Thumb Code 798 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init)
HAL_GPIO_WritePin 0x0800078d Thumb Code 46 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin)
HAL_GetTick 0x080007bd Thumb Code 12 stm32f1xx_hal.o(.text.HAL_GetTick)
HAL_IncTick 0x080007c9 Thumb Code 26 stm32f1xx_hal.o(.text.HAL_IncTick)
HAL_Init 0x080007e5 Thumb Code 38 stm32f1xx_hal.o(.text.HAL_Init)
HAL_InitTick 0x0800080d Thumb Code 112 stm32f1xx_hal.o(.text.HAL_InitTick)
HAL_MspInit 0x0800087d Thumb Code 100 stm32f1xx_hal_msp.o(.text.HAL_MspInit)
HAL_NVIC_SetPriority 0x080008e1 Thumb Code 50 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority)
HAL_NVIC_SetPriorityGrouping 0x08000915 Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping)
HAL_RCC_ClockConfig 0x08000925 Thumb Code 598 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig)
HAL_RCC_GetHCLKFreq 0x08000b7d Thumb Code 12 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq)
HAL_RCC_GetPCLK1Freq 0x08000b89 Thumb Code 34 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq)
HAL_RCC_GetPCLK2Freq 0x08000bad Thumb Code 34 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq)
HAL_RCC_GetSysClockFreq 0x08000bd1 Thumb Code 188 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq)
HAL_RCC_OscConfig 0x08000c8d Thumb Code 1658 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig)
HAL_SYSTICK_Config 0x08001309 Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config)
HAL_TIMEx_MasterConfigSynchronization 0x08001319 Thumb Code 220 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization)
HAL_TIM_Base_Init 0x080013f5 Thumb Code 156 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init)
HAL_TIM_Base_MspInit 0x08001491 Thumb Code 104 tim.o(.text.HAL_TIM_Base_MspInit)
HAL_TIM_Base_Stop_IT 0x080014f9 Thumb Code 82 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT)
HAL_TIM_ConfigClockSource 0x0800154d Thumb Code 388 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource)
HAL_UART_Abort 0x080016d1 Thumb Code 406 stm32f1xx_hal_uart.o(.text.HAL_UART_Abort)
HAL_UART_AbortReceive 0x08001869 Thumb Code 278 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive)
HAL_UART_AbortTransmit 0x08001981 Thumb Code 186 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit)
HAL_UART_Init 0x08001a3d Thumb Code 158 stm32f1xx_hal_uart.o(.text.HAL_UART_Init)
HAL_UART_MspInit 0x08001add Thumb Code 152 usart.o(.text.HAL_UART_MspInit)
HAL_UART_Receive_IT 0x08001b75 Thumb Code 86 stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT)
HardFault_Handler 0x08001bcd Thumb Code 4 stm32f1xx_it.o(.text.HardFault_Handler)
MB_DevoceInentificationInit 0x08001bd1 Thumb Code 78 modbus.o(.text.MB_DevoceInentificationInit)
MODBUS_FirstInit 0x08001c21 Thumb Code 66 modbus.o(.text.MODBUS_FirstInit)
MX_GPIO_Init 0x08001c65 Thumb Code 182 gpio.o(.text.MX_GPIO_Init)
MX_TIM2_Init 0x08001d1d Thumb Code 126 tim.o(.text.MX_TIM2_Init)
MX_TIM3_Init 0x08001d9d Thumb Code 130 tim.o(.text.MX_TIM3_Init)
MX_USART1_UART_Init 0x08001e21 Thumb Code 64 usart.o(.text.MX_USART1_UART_Init)
MemManage_Handler 0x08001e61 Thumb Code 4 stm32f1xx_it.o(.text.MemManage_Handler)
NMI_Handler 0x08001e65 Thumb Code 4 stm32f1xx_it.o(.text.NMI_Handler)
PendSV_Handler 0x08001ed5 Thumb Code 2 stm32f1xx_it.o(.text.PendSV_Handler)
RS_Abort 0x08001f15 Thumb Code 348 rs_message.o(.text.RS_Abort)
RS_Init 0x08002071 Thumb Code 112 rs_message.o(.text.RS_Init)
RS_Receive_IT 0x080020e1 Thumb Code 176 rs_message.o(.text.RS_Receive_IT)
SVC_Handler 0x08002191 Thumb Code 2 stm32f1xx_it.o(.text.SVC_Handler)
SysTick_Handler 0x080021e9 Thumb Code 8 stm32f1xx_it.o(.text.SysTick_Handler)
SystemClock_Config 0x080021f1 Thumb Code 108 main.o(.text.SystemClock_Config)
SystemInit 0x0800225d Thumb Code 2 system_stm32f1xx.o(.text.SystemInit)
TIM_Base_SetConfig 0x08002261 Thumb Code 262 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig)
TIM_ETR_SetConfig 0x08002369 Thumb Code 52 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig)
UART_Start_Receive_IT 0x08002529 Thumb Code 98 stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT)
UsageFault_Handler 0x0800258d Thumb Code 4 stm32f1xx_it.o(.text.UsageFault_Handler)
append_bit 0x08002621 Thumb Code 48 canform.o(.text.append_bit)
append_bits 0x08002651 Thumb Code 64 canform.o(.text.append_bits)
apply_bit_stuffing_with_error 0x08002691 Thumb Code 196 canform.o(.text.apply_bit_stuffing_with_error)
compute_crc15 0x08002755 Thumb Code 118 canform.o(.text.compute_crc15)
flip_bit 0x080027cd Thumb Code 48 canform.o(.text.flip_bit)
form_CAN_bitstream_full 0x080027fd Thumb Code 978 canform.o(.text.form_CAN_bitstream_full)
main 0x08002bd1 Thumb Code 488 main.o(.text.main)
wait_exact_ticks 0x08002db9 Thumb Code 74 canemu.o(.text.wait_exact_ticks)
AHBPrescTable 0x08002e02 Data 16 system_stm32f1xx.o(.rodata.AHBPrescTable)
APBPrescTable 0x08002e12 Data 8 system_stm32f1xx.o(.rodata.APBPrescTable)
Region$$Table$$Base 0x08002e48 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x08002e68 Number 0 anon$$obj.o(Region$$Table)
SystemCoreClock 0x20000000 Data 4 system_stm32f1xx.o(.data.SystemCoreClock)
uwTickFreq 0x20000004 Data 1 stm32f1xx_hal.o(.data.uwTickFreq)
uwTickPrio 0x20000008 Data 4 stm32f1xx_hal.o(.data.uwTickPrio)
__libspace_start 0x20000010 Data 96 libspace.o(.bss)
CANEMU_BIT_TICKS 0x20000070 Data 4 canemu.o(.bss.CANEMU_BIT_TICKS)
__temporary_stack_top$libspace 0x20000070 Data 0 libspace.o(.bss)
can_bits 0x20000074 Data 256 canform.o(.bss.can_bits)
can_bits_len 0x20000174 Data 4 canform.o(.bss.can_bits_len)
err_indices_count 0x20000178 Data 1 canform.o(.bss.err_indices_count)
hcanemu 0x2000017c Data 40 main.o(.bss.hcanemu)
htim2 0x200001a4 Data 72 tim.o(.bss.htim2)
raw_bits 0x200001ec Data 256 canform.o(.bss.raw_bits)
raw_len 0x200002ec Data 4 canform.o(.bss.raw_len)
uwTick 0x200002f0 Data 4 stm32f1xx_hal.o(.bss.uwTick)
MB_DATA 0x20000074 Data 60 modbus.o(.bss.MB_DATA)
MB_INFO 0x200000b0 Data 56 modbus.o(.bss.MB_INFO)
MODBUS_MSG 0x200000e8 Data 268 modbus.o(.bss.MODBUS_MSG)
RS_Buffer 0x200001f4 Data 259 rs_message.o(.bss.RS_Buffer)
can_bits 0x200002f7 Data 256 canform.o(.bss.can_bits)
can_bits_len 0x200003f8 Data 4 canform.o(.bss.can_bits_len)
err_indices_count 0x200003fc Data 1 canform.o(.bss.err_indices_count)
flag_manual 0x20000400 Data 4 main.o(.bss.flag_manual)
hcanemu 0x20000404 Data 44 main.o(.bss.hcanemu)
hmodbus1 0x20000430 Data 40 modbus.o(.bss.hmodbus1)
htim2 0x20000458 Data 72 tim.o(.bss.htim2)
htim3 0x200004a0 Data 72 tim.o(.bss.htim3)
huart1 0x200004e8 Data 72 usart.o(.bss.huart1)
raw_bits 0x20000530 Data 256 canform.o(.bss.raw_bits)
raw_len 0x20000630 Data 4 canform.o(.bss.raw_len)
uwTick 0x20000634 Data 4 stm32f1xx_hal.o(.bss.uwTick)
@@ -1920,176 +2451,221 @@ Memory Map of the image
Image Entry point : 0x080000ed
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002168, Max: 0x00010000, ABSOLUTE)
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002e78, Max: 0x00010000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002154, Max: 0x00010000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002e68, Max: 0x00010000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x08000000 0x08000000 0x000000ec Data RO 3 RESET startup_stm32f103xb.o
0x080000ec 0x080000ec 0x00000008 Code RO 866 * !!!main c_w.l(__main.o)
0x080000f4 0x080000f4 0x00000034 Code RO 1031 !!!scatter c_w.l(__scatter.o)
0x08000128 0x08000128 0x0000001a Code RO 1033 !!handler_copy c_w.l(__scatter_copy.o)
0x080000ec 0x080000ec 0x00000008 Code RO 1127 * !!!main c_w.l(__main.o)
0x080000f4 0x080000f4 0x00000034 Code RO 1292 !!!scatter c_w.l(__scatter.o)
0x08000128 0x08000128 0x0000001a Code RO 1294 !!handler_copy c_w.l(__scatter_copy.o)
0x08000142 0x08000142 0x00000002 PAD
0x08000144 0x08000144 0x0000001c Code RO 1035 !!handler_zi c_w.l(__scatter_zi.o)
0x08000160 0x08000160 0x00000002 Code RO 893 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o)
0x08000162 0x08000162 0x00000000 Code RO 900 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 902 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 904 .ARM.Collect$$libinit$$00000006 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 907 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 909 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 911 .ARM.Collect$$libinit$$00000010 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 914 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 916 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 918 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 920 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 922 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 924 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 926 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 928 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 930 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 932 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 934 .ARM.Collect$$libinit$$00000027 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 938 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 940 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 942 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 944 .ARM.Collect$$libinit$$00000034 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000002 Code RO 945 .ARM.Collect$$libinit$$00000035 c_w.l(libinit2.o)
0x08000164 0x08000164 0x00000002 Code RO 967 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o)
0x08000166 0x08000166 0x00000000 Code RO 982 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 984 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 987 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 990 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 992 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 995 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000002 Code RO 996 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o)
0x08000168 0x08000168 0x00000000 Code RO 868 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o)
0x08000168 0x08000168 0x00000000 Code RO 870 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o)
0x08000168 0x08000168 0x00000006 Code RO 882 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o)
0x0800016e 0x0800016e 0x00000000 Code RO 872 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o)
0x0800016e 0x0800016e 0x00000004 Code RO 873 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o)
0x08000172 0x08000172 0x00000000 Code RO 875 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o)
0x08000172 0x08000172 0x00000008 Code RO 876 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o)
0x0800017a 0x0800017a 0x00000002 Code RO 897 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o)
0x0800017c 0x0800017c 0x00000000 Code RO 947 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o)
0x0800017c 0x0800017c 0x00000004 Code RO 948 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o)
0x08000180 0x08000180 0x00000006 Code RO 949 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o)
0x08000144 0x08000144 0x0000001c Code RO 1296 !!handler_zi c_w.l(__scatter_zi.o)
0x08000160 0x08000160 0x00000002 Code RO 1154 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o)
0x08000162 0x08000162 0x00000000 Code RO 1161 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1163 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1165 .ARM.Collect$$libinit$$00000006 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1168 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1170 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1172 .ARM.Collect$$libinit$$00000010 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1175 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1177 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1179 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1181 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1183 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1185 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1187 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1189 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1191 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1193 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1195 .ARM.Collect$$libinit$$00000027 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1199 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1201 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1203 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000000 Code RO 1205 .ARM.Collect$$libinit$$00000034 c_w.l(libinit2.o)
0x08000162 0x08000162 0x00000002 Code RO 1206 .ARM.Collect$$libinit$$00000035 c_w.l(libinit2.o)
0x08000164 0x08000164 0x00000002 Code RO 1228 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o)
0x08000166 0x08000166 0x00000000 Code RO 1243 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 1245 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 1248 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 1251 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 1253 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000000 Code RO 1256 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o)
0x08000166 0x08000166 0x00000002 Code RO 1257 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o)
0x08000168 0x08000168 0x00000000 Code RO 1129 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o)
0x08000168 0x08000168 0x00000000 Code RO 1131 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o)
0x08000168 0x08000168 0x00000006 Code RO 1143 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o)
0x0800016e 0x0800016e 0x00000000 Code RO 1133 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o)
0x0800016e 0x0800016e 0x00000004 Code RO 1134 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o)
0x08000172 0x08000172 0x00000000 Code RO 1136 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o)
0x08000172 0x08000172 0x00000008 Code RO 1137 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o)
0x0800017a 0x0800017a 0x00000002 Code RO 1158 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o)
0x0800017c 0x0800017c 0x00000000 Code RO 1208 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o)
0x0800017c 0x0800017c 0x00000004 Code RO 1209 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o)
0x08000180 0x08000180 0x00000006 Code RO 1210 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o)
0x08000186 0x08000186 0x00000002 PAD
0x08000188 0x08000188 0x00000040 Code RO 4 .text startup_stm32f103xb.o
0x080001c8 0x080001c8 0x0000004e Code RO 862 .text c_w.l(rt_memclr_w.o)
0x08000216 0x08000216 0x00000006 Code RO 864 .text c_w.l(heapauxi.o)
0x0800021c 0x0800021c 0x0000004a Code RO 884 .text c_w.l(sys_stackheap_outer.o)
0x08000266 0x08000266 0x00000012 Code RO 886 .text c_w.l(exit.o)
0x08000278 0x08000278 0x00000008 Code RO 894 .text c_w.l(libspace.o)
0x08000280 0x08000280 0x0000000c Code RO 957 .text c_w.l(sys_exit.o)
0x0800028c 0x0800028c 0x00000002 Code RO 972 .text c_w.l(use_no_semi.o)
0x0800028e 0x0800028e 0x00000000 Code RO 974 .text c_w.l(indicate_semi.o)
0x080001c8 0x080001c8 0x0000004e Code RO 1123 .text c_w.l(rt_memclr_w.o)
0x08000216 0x08000216 0x00000006 Code RO 1125 .text c_w.l(heapauxi.o)
0x0800021c 0x0800021c 0x0000004a Code RO 1145 .text c_w.l(sys_stackheap_outer.o)
0x08000266 0x08000266 0x00000012 Code RO 1147 .text c_w.l(exit.o)
0x08000278 0x08000278 0x00000008 Code RO 1155 .text c_w.l(libspace.o)
0x08000280 0x08000280 0x0000000c Code RO 1218 .text c_w.l(sys_exit.o)
0x0800028c 0x0800028c 0x00000002 Code RO 1233 .text c_w.l(use_no_semi.o)
0x0800028e 0x0800028e 0x00000000 Code RO 1235 .text c_w.l(indicate_semi.o)
0x0800028e 0x0800028e 0x00000002 PAD
0x08000290 0x08000290 0x00000004 Code RO 54 .text.BusFault_Handler stm32f1xx_it.o
0x08000294 0x08000294 0x00000028 Code RO 822 .text.CANEmu_Init canemu.o
0x080002bc 0x080002bc 0x000000d0 Code RO 826 .text.CANEmu_SendFrame canemu.o
0x0800038c 0x0800038c 0x00000002 Code RO 60 .text.DebugMon_Handler stm32f1xx_it.o
0x08000290 0x08000290 0x00000004 Code RO 72 .text.BusFault_Handler stm32f1xx_it.o
0x08000294 0x08000294 0x00000028 Code RO 971 .text.CANEmu_Init canemu.o
0x080002bc 0x080002bc 0x000000d0 Code RO 975 .text.CANEmu_SendFrame canemu.o
0x0800038c 0x0800038c 0x00000002 Code RO 78 .text.DebugMon_Handler stm32f1xx_it.o
0x0800038e 0x0800038e 0x00000002 PAD
0x08000390 0x08000390 0x0000000e Code RO 15 .text.Error_Handler main.o
0x0800039e 0x0800039e 0x00000002 PAD
0x080003a0 0x080003a0 0x00000042 Code RO 450 .text.HAL_Delay stm32f1xx_hal.o
0x080003e2 0x080003e2 0x00000002 PAD
0x080003e4 0x080003e4 0x0000031e Code RO 544 .text.HAL_GPIO_Init stm32f1xx_hal_gpio.o
0x08000702 0x08000702 0x00000002 PAD
0x08000704 0x08000704 0x0000002e Code RO 550 .text.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o
0x08000732 0x08000732 0x00000002 PAD
0x08000734 0x08000734 0x0000000c Code RO 442 .text.HAL_GetTick stm32f1xx_hal.o
0x08000740 0x08000740 0x0000001a Code RO 440 .text.HAL_IncTick stm32f1xx_hal.o
0x0800075a 0x0800075a 0x00000002 PAD
0x0800075c 0x0800075c 0x00000026 Code RO 430 .text.HAL_Init stm32f1xx_hal.o
0x08000782 0x08000782 0x00000002 PAD
0x08000784 0x08000784 0x00000070 Code RO 432 .text.HAL_InitTick stm32f1xx_hal.o
0x080007f4 0x080007f4 0x00000064 Code RO 73 .text.HAL_MspInit stm32f1xx_hal_msp.o
0x08000858 0x08000858 0x00000032 Code RO 604 .text.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o
0x0800088a 0x0800088a 0x00000002 PAD
0x0800088c 0x0800088c 0x00000010 Code RO 600 .text.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o
0x0800089c 0x0800089c 0x00000256 Code RO 496 .text.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o
0x08000af2 0x08000af2 0x00000002 PAD
0x08000af4 0x08000af4 0x000000bc Code RO 498 .text.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o
0x08000bb0 0x08000bb0 0x0000067a Code RO 492 .text.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o
0x0800122a 0x0800122a 0x00000002 PAD
0x0800122c 0x0800122c 0x00000010 Code RO 624 .text.HAL_SYSTICK_Config stm32f1xx_hal_cortex.o
0x0800123c 0x0800123c 0x000000dc Code RO 407 .text.HAL_TIMEx_MasterConfigSynchronization stm32f1xx_hal_tim_ex.o
0x08001318 0x08001318 0x0000009c Code RO 94 .text.HAL_TIM_Base_Init stm32f1xx_hal_tim.o
0x080013b4 0x080013b4 0x00000034 Code RO 36 .text.HAL_TIM_Base_MspInit tim.o
0x080013e8 0x080013e8 0x00000184 Code RO 286 .text.HAL_TIM_ConfigClockSource stm32f1xx_hal_tim.o
0x0800156c 0x0800156c 0x00000004 Code RO 50 .text.HardFault_Handler stm32f1xx_it.o
0x08001570 0x08001570 0x000000b6 Code RO 26 .text.MX_GPIO_Init gpio.o
0x08001626 0x08001626 0x00000002 PAD
0x08001628 0x08001628 0x0000007e Code RO 34 .text.MX_TIM2_Init tim.o
0x080016a6 0x080016a6 0x00000002 PAD
0x080016a8 0x080016a8 0x00000004 Code RO 52 .text.MemManage_Handler stm32f1xx_it.o
0x080016ac 0x080016ac 0x00000004 Code RO 48 .text.NMI_Handler stm32f1xx_it.o
0x080016b0 0x080016b0 0x0000006c Code RO 610 .text.NVIC_EncodePriority stm32f1xx_hal_cortex.o
0x0800171c 0x0800171c 0x00000002 Code RO 62 .text.PendSV_Handler stm32f1xx_it.o
0x0800171e 0x0800171e 0x00000002 PAD
0x08001720 0x08001720 0x0000003a Code RO 494 .text.RCC_Delay stm32f1xx_hal_rcc.o
0x0800175a 0x0800175a 0x00000002 PAD
0x0800175c 0x0800175c 0x00000002 Code RO 58 .text.SVC_Handler stm32f1xx_it.o
0x0800175e 0x0800175e 0x00000002 PAD
0x08001760 0x08001760 0x00000052 Code RO 626 .text.SysTick_Config stm32f1xx_hal_cortex.o
0x080017b2 0x080017b2 0x00000002 PAD
0x080017b4 0x080017b4 0x00000008 Code RO 64 .text.SysTick_Handler stm32f1xx_it.o
0x080017bc 0x080017bc 0x0000006c Code RO 13 .text.SystemClock_Config main.o
0x08001828 0x08001828 0x00000002 Code RO 808 .text.SystemInit system_stm32f1xx.o
0x0800182a 0x0800182a 0x00000002 PAD
0x0800182c 0x0800182c 0x00000106 Code RO 98 .text.TIM_Base_SetConfig stm32f1xx_hal_tim.o
0x08001932 0x08001932 0x00000002 PAD
0x08001934 0x08001934 0x00000034 Code RO 284 .text.TIM_ETR_SetConfig stm32f1xx_hal_tim.o
0x08001968 0x08001968 0x0000002a Code RO 290 .text.TIM_ITRx_SetConfig stm32f1xx_hal_tim.o
0x08001992 0x08001992 0x00000002 PAD
0x08001994 0x08001994 0x00000050 Code RO 288 .text.TIM_TI1_ConfigInputStage stm32f1xx_hal_tim.o
0x080019e4 0x080019e4 0x00000052 Code RO 292 .text.TIM_TI2_ConfigInputStage stm32f1xx_hal_tim.o
0x08001a36 0x08001a36 0x00000002 PAD
0x08001a38 0x08001a38 0x00000004 Code RO 56 .text.UsageFault_Handler stm32f1xx_it.o
0x08001a3c 0x08001a3c 0x00000010 Code RO 606 .text.__NVIC_GetPriorityGrouping stm32f1xx_hal_cortex.o
0x08001a4c 0x08001a4c 0x00000042 Code RO 608 .text.__NVIC_SetPriority stm32f1xx_hal_cortex.o
0x08001a8e 0x08001a8e 0x00000002 PAD
0x08001a90 0x08001a90 0x0000003c Code RO 602 .text.__NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o
0x08001acc 0x08001acc 0x00000030 Code RO 836 .text.append_bit canform.o
0x08001afc 0x08001afc 0x00000040 Code RO 838 .text.append_bits canform.o
0x08001b3c 0x08001b3c 0x000000c4 Code RO 842 .text.apply_bit_stuffing_with_error canform.o
0x08001c00 0x08001c00 0x00000076 Code RO 840 .text.compute_crc15 canform.o
0x08001c76 0x08001c76 0x00000002 PAD
0x08001c78 0x08001c78 0x00000030 Code RO 844 .text.flip_bit canform.o
0x08001ca8 0x08001ca8 0x000003d2 Code RO 846 .text.form_CAN_bitstream_full canform.o
0x0800207a 0x0800207a 0x00000002 PAD
0x0800207c 0x0800207c 0x0000004c Code RO 11 .text.main main.o
0x080020c8 0x080020c8 0x0000004a Code RO 824 .text.wait_exact_ticks canemu.o
0x08002112 0x08002112 0x00000010 Data RO 813 .rodata.AHBPrescTable system_stm32f1xx.o
0x08002122 0x08002122 0x00000010 Data RO 520 .rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable stm32f1xx_hal_rcc.o
0x08002132 0x08002132 0x00000002 Data RO 521 .rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable stm32f1xx_hal_rcc.o
0x08002134 0x08002134 0x00000020 Data RO 1030 Region$$Table anon$$obj.o
0x080003a0 0x080003a0 0x0000007c Code RO 595 .text.HAL_DMA_Abort stm32f1xx_hal_dma.o
0x0800041c 0x0800041c 0x0000000c Code RO 609 .text.HAL_DMA_GetError stm32f1xx_hal_dma.o
0x08000428 0x08000428 0x00000042 Code RO 468 .text.HAL_Delay stm32f1xx_hal.o
0x0800046a 0x0800046a 0x00000002 PAD
0x0800046c 0x0800046c 0x0000031e Code RO 562 .text.HAL_GPIO_Init stm32f1xx_hal_gpio.o
0x0800078a 0x0800078a 0x00000002 PAD
0x0800078c 0x0800078c 0x0000002e Code RO 568 .text.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o
0x080007ba 0x080007ba 0x00000002 PAD
0x080007bc 0x080007bc 0x0000000c Code RO 460 .text.HAL_GetTick stm32f1xx_hal.o
0x080007c8 0x080007c8 0x0000001a Code RO 458 .text.HAL_IncTick stm32f1xx_hal.o
0x080007e2 0x080007e2 0x00000002 PAD
0x080007e4 0x080007e4 0x00000026 Code RO 448 .text.HAL_Init stm32f1xx_hal.o
0x0800080a 0x0800080a 0x00000002 PAD
0x0800080c 0x0800080c 0x00000070 Code RO 450 .text.HAL_InitTick stm32f1xx_hal.o
0x0800087c 0x0800087c 0x00000064 Code RO 91 .text.HAL_MspInit stm32f1xx_hal_msp.o
0x080008e0 0x080008e0 0x00000032 Code RO 622 .text.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o
0x08000912 0x08000912 0x00000002 PAD
0x08000914 0x08000914 0x00000010 Code RO 618 .text.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o
0x08000924 0x08000924 0x00000256 Code RO 514 .text.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o
0x08000b7a 0x08000b7a 0x00000002 PAD
0x08000b7c 0x08000b7c 0x0000000c Code RO 524 .text.HAL_RCC_GetHCLKFreq stm32f1xx_hal_rcc.o
0x08000b88 0x08000b88 0x00000022 Code RO 526 .text.HAL_RCC_GetPCLK1Freq stm32f1xx_hal_rcc.o
0x08000baa 0x08000baa 0x00000002 PAD
0x08000bac 0x08000bac 0x00000022 Code RO 528 .text.HAL_RCC_GetPCLK2Freq stm32f1xx_hal_rcc.o
0x08000bce 0x08000bce 0x00000002 PAD
0x08000bd0 0x08000bd0 0x000000bc Code RO 516 .text.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o
0x08000c8c 0x08000c8c 0x0000067a Code RO 510 .text.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o
0x08001306 0x08001306 0x00000002 PAD
0x08001308 0x08001308 0x00000010 Code RO 642 .text.HAL_SYSTICK_Config stm32f1xx_hal_cortex.o
0x08001318 0x08001318 0x000000dc Code RO 425 .text.HAL_TIMEx_MasterConfigSynchronization stm32f1xx_hal_tim_ex.o
0x080013f4 0x080013f4 0x0000009c Code RO 112 .text.HAL_TIM_Base_Init stm32f1xx_hal_tim.o
0x08001490 0x08001490 0x00000068 Code RO 39 .text.HAL_TIM_Base_MspInit tim.o
0x080014f8 0x080014f8 0x00000052 Code RO 128 .text.HAL_TIM_Base_Stop_IT stm32f1xx_hal_tim.o
0x0800154a 0x0800154a 0x00000002 PAD
0x0800154c 0x0800154c 0x00000184 Code RO 304 .text.HAL_TIM_ConfigClockSource stm32f1xx_hal_tim.o
0x080016d0 0x080016d0 0x00000196 Code RO 884 .text.HAL_UART_Abort stm32f1xx_hal_uart.o
0x08001866 0x08001866 0x00000002 PAD
0x08001868 0x08001868 0x00000116 Code RO 888 .text.HAL_UART_AbortReceive stm32f1xx_hal_uart.o
0x0800197e 0x0800197e 0x00000002 PAD
0x08001980 0x08001980 0x000000ba Code RO 886 .text.HAL_UART_AbortTransmit stm32f1xx_hal_uart.o
0x08001a3a 0x08001a3a 0x00000002 PAD
0x08001a3c 0x08001a3c 0x0000009e Code RO 826 .text.HAL_UART_Init stm32f1xx_hal_uart.o
0x08001ada 0x08001ada 0x00000002 PAD
0x08001adc 0x08001adc 0x00000098 Code RO 54 .text.HAL_UART_MspInit usart.o
0x08001b74 0x08001b74 0x00000056 Code RO 850 .text.HAL_UART_Receive_IT stm32f1xx_hal_uart.o
0x08001bca 0x08001bca 0x00000002 PAD
0x08001bcc 0x08001bcc 0x00000004 Code RO 68 .text.HardFault_Handler stm32f1xx_it.o
0x08001bd0 0x08001bd0 0x0000004e Code RO 1031 .text.MB_DevoceInentificationInit modbus.o
0x08001c1e 0x08001c1e 0x00000002 PAD
0x08001c20 0x08001c20 0x00000042 Code RO 1029 .text.MODBUS_FirstInit modbus.o
0x08001c62 0x08001c62 0x00000002 PAD
0x08001c64 0x08001c64 0x000000b6 Code RO 27 .text.MX_GPIO_Init gpio.o
0x08001d1a 0x08001d1a 0x00000002 PAD
0x08001d1c 0x08001d1c 0x0000007e Code RO 35 .text.MX_TIM2_Init tim.o
0x08001d9a 0x08001d9a 0x00000002 PAD
0x08001d9c 0x08001d9c 0x00000082 Code RO 37 .text.MX_TIM3_Init tim.o
0x08001e1e 0x08001e1e 0x00000002 PAD
0x08001e20 0x08001e20 0x00000040 Code RO 52 .text.MX_USART1_UART_Init usart.o
0x08001e60 0x08001e60 0x00000004 Code RO 70 .text.MemManage_Handler stm32f1xx_it.o
0x08001e64 0x08001e64 0x00000004 Code RO 66 .text.NMI_Handler stm32f1xx_it.o
0x08001e68 0x08001e68 0x0000006c Code RO 628 .text.NVIC_EncodePriority stm32f1xx_hal_cortex.o
0x08001ed4 0x08001ed4 0x00000002 Code RO 80 .text.PendSV_Handler stm32f1xx_it.o
0x08001ed6 0x08001ed6 0x00000002 PAD
0x08001ed8 0x08001ed8 0x0000003a Code RO 512 .text.RCC_Delay stm32f1xx_hal_rcc.o
0x08001f12 0x08001f12 0x00000002 PAD
0x08001f14 0x08001f14 0x0000015c Code RO 1086 .text.RS_Abort rs_message.o
0x08002070 0x08002070 0x00000070 Code RO 1094 .text.RS_Init rs_message.o
0x080020e0 0x080020e0 0x000000b0 Code RO 1084 .text.RS_Receive_IT rs_message.o
0x08002190 0x08002190 0x00000002 Code RO 76 .text.SVC_Handler stm32f1xx_it.o
0x08002192 0x08002192 0x00000002 PAD
0x08002194 0x08002194 0x00000052 Code RO 644 .text.SysTick_Config stm32f1xx_hal_cortex.o
0x080021e6 0x080021e6 0x00000002 PAD
0x080021e8 0x080021e8 0x00000008 Code RO 82 .text.SysTick_Handler stm32f1xx_it.o
0x080021f0 0x080021f0 0x0000006c Code RO 13 .text.SystemClock_Config main.o
0x0800225c 0x0800225c 0x00000002 Code RO 957 .text.SystemInit system_stm32f1xx.o
0x0800225e 0x0800225e 0x00000002 PAD
0x08002260 0x08002260 0x00000106 Code RO 116 .text.TIM_Base_SetConfig stm32f1xx_hal_tim.o
0x08002366 0x08002366 0x00000002 PAD
0x08002368 0x08002368 0x00000034 Code RO 302 .text.TIM_ETR_SetConfig stm32f1xx_hal_tim.o
0x0800239c 0x0800239c 0x0000002a Code RO 308 .text.TIM_ITRx_SetConfig stm32f1xx_hal_tim.o
0x080023c6 0x080023c6 0x00000002 PAD
0x080023c8 0x080023c8 0x00000050 Code RO 306 .text.TIM_TI1_ConfigInputStage stm32f1xx_hal_tim.o
0x08002418 0x08002418 0x00000052 Code RO 310 .text.TIM_TI2_ConfigInputStage stm32f1xx_hal_tim.o
0x0800246a 0x0800246a 0x00000002 PAD
0x0800246c 0x0800246c 0x000000ba Code RO 830 .text.UART_SetConfig stm32f1xx_hal_uart.o
0x08002526 0x08002526 0x00000002 PAD
0x08002528 0x08002528 0x00000062 Code RO 852 .text.UART_Start_Receive_IT stm32f1xx_hal_uart.o
0x0800258a 0x0800258a 0x00000002 PAD
0x0800258c 0x0800258c 0x00000004 Code RO 74 .text.UsageFault_Handler stm32f1xx_it.o
0x08002590 0x08002590 0x00000010 Code RO 624 .text.__NVIC_GetPriorityGrouping stm32f1xx_hal_cortex.o
0x080025a0 0x080025a0 0x00000042 Code RO 626 .text.__NVIC_SetPriority stm32f1xx_hal_cortex.o
0x080025e2 0x080025e2 0x00000002 PAD
0x080025e4 0x080025e4 0x0000003c Code RO 620 .text.__NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o
0x08002620 0x08002620 0x00000030 Code RO 985 .text.append_bit canform.o
0x08002650 0x08002650 0x00000040 Code RO 987 .text.append_bits canform.o
0x08002690 0x08002690 0x000000c4 Code RO 991 .text.apply_bit_stuffing_with_error canform.o
0x08002754 0x08002754 0x00000076 Code RO 989 .text.compute_crc15 canform.o
0x080027ca 0x080027ca 0x00000002 PAD
0x080027cc 0x080027cc 0x00000030 Code RO 993 .text.flip_bit canform.o
0x080027fc 0x080027fc 0x000003d2 Code RO 995 .text.form_CAN_bitstream_full canform.o
0x08002bce 0x08002bce 0x00000002 PAD
0x08002bd0 0x08002bd0 0x000001e8 Code RO 11 .text.main main.o
0x08002db8 0x08002db8 0x0000004a Code RO 973 .text.wait_exact_ticks canemu.o
0x08002e02 0x08002e02 0x00000010 Data RO 962 .rodata.AHBPrescTable system_stm32f1xx.o
0x08002e12 0x08002e12 0x00000008 Data RO 963 .rodata.APBPrescTable system_stm32f1xx.o
0x08002e1a 0x08002e1a 0x00000010 Data RO 538 .rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable stm32f1xx_hal_rcc.o
0x08002e2a 0x08002e2a 0x00000002 Data RO 539 .rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable stm32f1xx_hal_rcc.o
0x08002e2c 0x08002e2c 0x0000001a Data RO 1072 .rodata.str1.1 modbus.o
0x08002e46 0x08002e46 0x00000002 PAD
0x08002e48 0x08002e48 0x00000020 Data RO 1291 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002158, Size: 0x000008f8, Max: 0x00005000, ABSOLUTE)
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002e68, Size: 0x00000c38, Max: 0x00005000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 0x08002158 0x00000004 Data RW 812 .data.SystemCoreClock system_stm32f1xx.o
0x20000004 0x0800215c 0x00000001 Data RW 481 .data.uwTickFreq stm32f1xx_hal.o
0x20000005 0x0800215d 0x00000003 PAD
0x20000008 0x08002160 0x00000004 Data RW 480 .data.uwTickPrio stm32f1xx_hal.o
0x2000000c 0x08002164 0x00000004 PAD
0x20000010 - 0x00000060 Zero RW 895 .bss c_w.l(libspace.o)
0x20000070 - 0x00000004 Zero RW 828 .bss.CANEMU_BIT_TICKS canemu.o
0x20000074 - 0x00000100 Zero RW 852 .bss.can_bits canform.o
0x20000174 - 0x00000004 Zero RW 849 .bss.can_bits_len canform.o
0x20000178 - 0x00000001 Zero RW 850 .bss.err_indices_count canform.o
0x20000179 0x08002164 0x00000003 PAD
0x2000017c - 0x00000028 Zero RW 17 .bss.hcanemu main.o
0x200001a4 - 0x00000048 Zero RW 40 .bss.htim2 tim.o
0x200001ec - 0x00000100 Zero RW 851 .bss.raw_bits canform.o
0x200002ec - 0x00000004 Zero RW 848 .bss.raw_len canform.o
0x200002f0 - 0x00000004 Zero RW 482 .bss.uwTick stm32f1xx_hal.o
0x200002f4 0x08002164 0x00000004 PAD
0x200002f8 - 0x00000200 Zero RW 2 HEAP startup_stm32f103xb.o
0x200004f8 - 0x00000400 Zero RW 1 STACK startup_stm32f103xb.o
0x20000000 0x08002e68 0x00000004 Data RW 961 .data.SystemCoreClock system_stm32f1xx.o
0x20000004 0x08002e6c 0x00000001 Data RW 499 .data.uwTickFreq stm32f1xx_hal.o
0x20000005 0x08002e6d 0x00000003 PAD
0x20000008 0x08002e70 0x00000004 Data RW 498 .data.uwTickPrio stm32f1xx_hal.o
0x2000000c 0x08002e74 0x00000004 PAD
0x20000010 - 0x00000060 Zero RW 1156 .bss c_w.l(libspace.o)
0x20000070 - 0x00000004 Zero RW 977 .bss.CANEMU_BIT_TICKS canemu.o
0x20000074 - 0x0000003c Zero RW 1070 .bss.MB_DATA modbus.o
0x200000b0 - 0x00000038 Zero RW 1071 .bss.MB_INFO modbus.o
0x200000e8 - 0x0000010c Zero RW 1076 .bss.MODBUS_MSG modbus.o
0x200001f4 - 0x00000103 Zero RW 1114 .bss.RS_Buffer rs_message.o
0x200002f7 - 0x00000100 Zero RW 1001 .bss.can_bits canform.o
0x200003f7 0x08002e74 0x00000001 PAD
0x200003f8 - 0x00000004 Zero RW 998 .bss.can_bits_len canform.o
0x200003fc - 0x00000001 Zero RW 999 .bss.err_indices_count canform.o
0x200003fd 0x08002e74 0x00000003 PAD
0x20000400 - 0x00000004 Zero RW 17 .bss.flag_manual main.o
0x20000404 - 0x0000002c Zero RW 18 .bss.hcanemu main.o
0x20000430 - 0x00000028 Zero RW 1069 .bss.hmodbus1 modbus.o
0x20000458 - 0x00000048 Zero RW 43 .bss.htim2 tim.o
0x200004a0 - 0x00000048 Zero RW 44 .bss.htim3 tim.o
0x200004e8 - 0x00000048 Zero RW 58 .bss.huart1 usart.o
0x20000530 - 0x00000100 Zero RW 1000 .bss.raw_bits canform.o
0x20000630 - 0x00000004 Zero RW 997 .bss.raw_len canform.o
0x20000634 - 0x00000004 Zero RW 500 .bss.uwTick stm32f1xx_hal.o
0x20000638 - 0x00000200 Zero RW 2 HEAP startup_stm32f103xb.o
0x20000838 - 0x00000400 Zero RW 1 STACK startup_stm32f103xb.o
==============================================================================
@@ -2099,26 +2675,31 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
322 0 0 0 4 2724 canemu.o
322 0 0 0 4 2746 canemu.o
1452 0 0 0 521 4078 canform.o
182 0 0 0 0 1516 gpio.o
198 0 0 0 40 2510 main.o
610 0 0 0 48 2785 main.o
144 0 26 0 424 15875 modbus.o
636 0 0 0 259 10566 rs_message.o
64 26 236 0 1536 780 startup_stm32f103xb.o
254 0 0 5 4 5537 stm32f1xx_hal.o
414 0 0 0 0 7488 stm32f1xx_hal_cortex.o
136 0 0 0 0 6248 stm32f1xx_hal_dma.o
844 0 0 0 0 4192 stm32f1xx_hal_gpio.o
100 0 0 0 0 1176 stm32f1xx_hal_msp.o
2502 0 18 0 0 7388 stm32f1xx_hal_rcc.o
1062 0 0 0 0 35467 stm32f1xx_hal_tim.o
2582 0 18 0 0 7388 stm32f1xx_hal_rcc.o
1144 0 0 0 0 35467 stm32f1xx_hal_tim.o
220 0 0 0 0 15009 stm32f1xx_hal_tim_ex.o
1398 0 0 0 0 19913 stm32f1xx_hal_uart.o
34 0 0 0 0 1003 stm32f1xx_it.o
2 0 16 4 0 1547 system_stm32f1xx.o
178 0 0 0 72 4433 tim.o
2 0 24 4 0 1547 system_stm32f1xx.o
360 0 0 0 144 4755 tim.o
216 0 0 0 72 4069 usart.o
----------------------------------------------------------------------
7874 26 302 12 2188 94848 Object Totals
11186 26 338 12 3020 152138 Object Totals
0 0 32 0 0 0 (incl. Generated)
46 0 0 3 11 0 (incl. Padding)
72 0 2 3 8 0 (incl. Padding)
----------------------------------------------------------------------
@@ -2166,15 +2747,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
8230 42 302 12 2284 95092 Grand Totals
8230 42 302 12 2284 95092 ELF Image Totals
8230 42 302 12 0 0 ROM Totals
11542 42 338 12 3116 152282 Grand Totals
11542 42 338 12 3116 152282 ELF Image Totals
11542 42 338 12 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 8532 ( 8.33kB)
Total RW Size (RW Data + ZI Data) 2296 ( 2.24kB)
Total ROM Size (Code + RO Data + RW Data) 8544 ( 8.34kB)
Total RO Size (Code + RO Data) 11880 ( 11.60kB)
Total RW Size (RW Data + ZI Data) 3128 ( 3.05kB)
Total ROM Size (Code + RO Data + RW Data) 11892 ( 11.61kB)
==============================================================================

File diff suppressed because one or more lines are too long

View File

@@ -28,5 +28,6 @@ canemu/canemu.o: ..\Core\CANEmu\canEmu.c ..\Core\CANEmu\canEmu.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h ..\Core\Inc\tim.h

Binary file not shown.

View File

@@ -27,5 +27,6 @@ canemu/canform.o: ..\Core\CANEmu\canform.c ..\Core\CANEmu\canform.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h

31
MDK-ARM/CANEmu/crc_algs.d Normal file
View File

@@ -0,0 +1,31 @@
canemu/crc_algs.o: ..\Core\Modbus\crc_algs.c ..\Core\Modbus\crc_algs.h \
..\Core\Modbus\modbus_config.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \
..\Core\Inc\stm32f1xx_hal_conf.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h \
..\Drivers\CMSIS\Include\core_cm3.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \
..\Drivers\CMSIS\Include\cmsis_version.h \
..\Drivers\CMSIS\Include\cmsis_compiler.h \
..\Drivers\CMSIS\Include\cmsis_armclang.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_compat.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_acle.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stddef.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

BIN
MDK-ARM/CANEmu/crc_algs.o Normal file

Binary file not shown.

View File

@@ -26,4 +26,5 @@ canemu/gpio.o: ..\Core\Src\gpio.c ..\Core\Inc\gpio.h ..\Core\Inc\main.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,7 +27,11 @@ canemu/main.o: ..\Core\Src\main.c ..\Core\Inc\main.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Core\Inc\tim.h ..\Core\Inc\gpio.h ..\Core\CANEmu\canEmu.h \
..\Core\CANEmu\canform.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \
..\Core\Inc\tim.h ..\Core\Inc\usart.h ..\Core\Inc\gpio.h \
..\Core\CANEmu\canEmu.h ..\Core\CANEmu\canform.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h \
..\Core\Modbus\rs_message.h ..\Core\Modbus\modbus.h \
..\Core\Modbus\modbus_config.h ..\Core\Modbus\modbus_data.h \
..\Core\Modbus\crc_algs.h

Binary file not shown.

32
MDK-ARM/CANEmu/modbus.d Normal file
View File

@@ -0,0 +1,32 @@
canemu/modbus.o: ..\Core\Modbus\modbus.c ..\Core\Modbus\rs_message.h \
..\Core\Modbus\modbus.h ..\Core\Modbus\modbus_config.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \
..\Core\Inc\stm32f1xx_hal_conf.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h \
..\Drivers\CMSIS\Include\core_cm3.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \
..\Drivers\CMSIS\Include\cmsis_version.h \
..\Drivers\CMSIS\Include\cmsis_compiler.h \
..\Drivers\CMSIS\Include\cmsis_armclang.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_compat.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_acle.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stddef.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \
..\Core\Modbus\modbus_data.h ..\Core\Modbus\crc_algs.h

BIN
MDK-ARM/CANEmu/modbus.o Normal file

Binary file not shown.

View File

@@ -0,0 +1,33 @@
canemu/rs_message.o: ..\Core\Modbus\rs_message.c \
..\Core\Modbus\rs_message.h ..\Core\Modbus\modbus.h \
..\Core\Modbus\modbus_config.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \
..\Core\Inc\stm32f1xx_hal_conf.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h \
..\Drivers\CMSIS\Include\core_cm3.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \
..\Drivers\CMSIS\Include\cmsis_version.h \
..\Drivers\CMSIS\Include\cmsis_compiler.h \
..\Drivers\CMSIS\Include\cmsis_armclang.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_compat.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_acle.h \
..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \
C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stddef.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \
..\Core\Modbus\modbus_data.h ..\Core\Modbus\crc_algs.h

BIN
MDK-ARM/CANEmu/rs_message.o Normal file

Binary file not shown.

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_cortex.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_dma.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_exti.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_flash.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_flash_ex.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_gpio.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_gpio_ex.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -26,4 +26,5 @@ canemu/stm32f1xx_hal_msp.o: ..\Core\Src\stm32f1xx_hal_msp.c \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_pwr.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

View File

@@ -27,4 +27,5 @@ canemu/stm32f1xx_hal_rcc.o: \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h

Some files were not shown because too many files have changed in this diff Show More