-- - diff --git a/MDK-ARM/controller-v2/controller-v2.htm b/MDK-ARM/controller-v2/controller-v2.htm deleted file mode 100644 index 3e1db9a..0000000 --- a/MDK-ARM/controller-v2/controller-v2.htm +++ /dev/null @@ -1,5244 +0,0 @@ - - -Vision Build Log
-Tool Versions:
-IDE-Version: Vision V5.25.3.0 -Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved. -License Information: 1 1057513, HP Inc., LIC=TA39H-WDLB6-8Y2VV-PUJQI-ZPP1R-CLZXV - -Tool Versions: -Toolchain: MDK-ARM Professional Version: 5.18 -Toolchain Path: D:\work\Work app\Keil5\ARM\ARMCC\Bin -C Compiler: Armcc.exe V5.06 update 1 (build 61) -Assembler: Armasm.exe V5.06 update 1 (build 61) -Linker/Locator: ArmLink.exe V5.06 update 1 (build 61) -Library Manager: ArmAr.exe V5.06 update 1 (build 61) -Hex Converter: FromElf.exe V5.06 update 1 (build 61) -CPU DLL: SARMCM3.DLL V5.18 -Dialog DLL: DCM.DLL V1.13.6.0 -Target DLL: Segger\JL2CM3.dll V2.99.18.0 -Dialog DLL: TCM.DLL V1.14.8.0 - -Project:
-C:\Users\10575\Desktop\wuxi\code3\controller-cut new\controller-cut\controller-cut\MDK-ARM\controller-v2.uvprojx -Project File Date: 01/21/2024 - -Output:
-*** Using Compiler 'V5.06 update 1 (build 61)', folder: 'D:\work\Work app\Keil5\ARM\ARMCC\Bin' -Rebuild target 'controller-v2.4' -assembling startup_stm32l476xx.s... -compiling stm32l4xx_ll_gpio.c... -compiling stm32l4xx_ll_exti.c... -compiling system_stm32l4xx.c... -compiling stm32l4xx_ll_dac.c... -compiling stm32l4xx_ll_spi.c... -compiling stm32l4xx_ll_i2c.c... -compiling stm32l4xx_ll_pwr.c... -compiling stm32l4xx_ll_dma.c... -compiling stm32l4xx_ll_rcc.c... -compiling stm32l4xx_ll_tim.c... -compiling stm32l4xx_ll_adc.c... -compiling stm32l4xx_ll_usart.c... -compiling stm32l4xx_ll_utils.c... -compiling at_hc24.c... -compiling i2c.c... -compiling tim.c... -compiling gpio.c... -compiling dac.c... -compiling adc.c... -compiling dma.c... -compiling main.c... -compiling spi.c... -compiling usart.c... -compiling stm32l4xx_it.c... -compiling app.c... -compiling key.c... -compiling params.c... -compiling app_hart.c... -compiling app_flow.c... -compiling mode.c... -compiling convert.c... -compiling pdctrl.c... -compiling mode_pwm.c... -compiling pwms.c... -compiling mode_pwmp.c... -compiling mode_dac.c... -compiling malloc.c... -compiling fal_execution.c... -compiling flow_core.c... -compiling btn.c... -compiling debug.c... -compiling lib.c... -compiling filter.c... -compiling sqqueue.c... -compiling aes.c... -compiling execute_hd.c... -compiling clist.c... -compiling cmac.c... -compiling delay.c... -compiling ntc_3950.c... -compiling board.c... -compiling rtc_rx8010.c... -compiling leds.c... -compiling eeprom_m95.c... -compiling sys.c... -compiling eeprom_fm24.c... -compiling eeprom_lc02b.c... -compiling autotune_hd.c... -compiling i2cs.c... -compiling adcs.c... -compiling uarts.c... -compiling dacs.c... -compiling eeprom.c... -compiling spis.c... -compiling gpios.c... -compiling pid.c... -compiling fdb.c... -compiling fdb_utils.c... -compiling fdb_tsdb.c... -compiling fdb_kvdb.c... -compiling fdb_file.c... -compiling fal_eeprom24_port.c... -compiling fal_eeprom95_port.c... -compiling fal.c... -compiling fal_partition.c... -compiling fal_rtt.c... -compiling fal_flash.c... -compiling pid_position.c... -linking... -Program Size: Code=49274 RO-data=5142 RW-data=1320 ZI-data=27852 -"controller-v2\controller-v2.4" - 0 Error(s), 0 Warning(s). - -Software Packages used:
- -Package Vendor: ARM - http://www.keil.com/pack/ARM.CMSIS.4.5.0.pack - ARM.CMSIS.4.5.0 - CMSIS (Cortex Microcontroller Software Interface Standard) - * Component: CORE Version: 4.3.0 - -Package Vendor: Keil - http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.1.0.pack - Keil.STM32L4xx_DFP.2.1.0 - STMicroelectronics STM32L4 Series Device Support, Drivers and Examples - -Collection of Component include folders:
- .\RTE\_controller-v2.4 - D:\work\Work app\Keil5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include - D:\work\Work app\Keil5\ARM\PACK\Keil\STM32L4xx_DFP\2.1.0\Drivers\CMSIS\Device\ST\STM32L4xx\Include - -Collection of Component Files used:
- - * Component: ARM::CMSIS:CORE:4.3.0 -Build Time Elapsed: 00:00:17 -
#<CALLGRAPH># ARM Linker, 5060061: Last Updated: Mon Jan 22 04:17:04 2024
-
-
-
-
-
__main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
-
[Address Reference Count : 1]
_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) - -
_main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
-
[Calls]
__main_after_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
-
[Called By]
_main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) - -
_main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) - -
_main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) - -
__rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) - -
__rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F)) - -
Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
ADC3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Calls]
CAN1_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
CAN1_RX1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
CAN1_SCE_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
CAN1_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
COMP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DFSDM1_FLT0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DFSDM1_FLT1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DFSDM1_FLT2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DFSDM1_FLT3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DMA1_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DMA1_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DMA1_Channel4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DMA2_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DMA2_Channel4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
DMA2_Channel5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI15_10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
EXTI9_5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
FLASH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
FMC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
FPU_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
I2C1_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
I2C2_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
I2C2_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
I2C3_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
I2C3_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
LCD_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
LPTIM1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
LPTIM2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
LPUART1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
OTG_FS_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
PVD_PVM_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
QUADSPI_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
RCC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
RNG_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
RTC_Alarm_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
RTC_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SAI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SAI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SDMMC1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SPI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SPI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SPI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
SWPMI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TAMP_STAMP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM1_BRK_TIM15_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM1_CC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM1_TRG_COM_TIM17_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM1_UP_TIM16_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM8_BRK_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM8_CC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM8_TRG_COM_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TIM8_UP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
TSC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
UART4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
USART2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
USART3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
WWDG_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32l476xx.o(.text))
-
[Address Reference Count : 1]
rand (Thumb, 20 bytes, Stack size 0 bytes, rand.o(.text))
-
[Called By]
srand (Thumb, 6 bytes, Stack size 0 bytes, rand.o(.text))
-
[Called By]
__aeabi_memcpy (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED) - -
__aeabi_memcpy4 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text))
-
[Called By]
__aeabi_memcpy8 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED) - -
__aeabi_memset (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text))
-
[Called By]
__aeabi_memset4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) - -
__aeabi_memset8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) - -
__aeabi_memclr (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
-
[Calls]
__aeabi_memclr4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
-
[Called By]
__aeabi_memclr8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) - -
_memset$wrapper (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
-
[Calls]
strncpy (Thumb, 24 bytes, Stack size 8 bytes, strncpy.o(.text))
-
[Stack]
strlen (Thumb, 14 bytes, Stack size 0 bytes, strlen.o(.text))
-
[Called By]
strcmp (Thumb, 28 bytes, Stack size 8 bytes, strcmp.o(.text))
-
[Stack]
strncmp (Thumb, 30 bytes, Stack size 12 bytes, strncmp.o(.text))
-
[Stack]
__aeabi_fadd (Thumb, 164 bytes, Stack size 16 bytes, fadd.o(.text))
-
[Stack]
__aeabi_fsub (Thumb, 6 bytes, Stack size 0 bytes, fadd.o(.text))
-
[Stack]
__aeabi_frsub (Thumb, 6 bytes, Stack size 0 bytes, fadd.o(.text))
-
[Stack]
__aeabi_fmul (Thumb, 100 bytes, Stack size 8 bytes, fmul.o(.text))
-
[Stack]
__aeabi_fdiv (Thumb, 124 bytes, Stack size 8 bytes, fdiv.o(.text))
-
[Stack]
__ARM_scalbnf (Thumb, 24 bytes, Stack size 0 bytes, fscalb.o(.text))
-
[Called By]
scalbnf (Thumb, 0 bytes, Stack size 0 bytes, fscalb.o(.text), UNUSED) - -
__aeabi_dadd (Thumb, 322 bytes, Stack size 48 bytes, dadd.o(.text))
-
[Stack]
__aeabi_dsub (Thumb, 6 bytes, Stack size 0 bytes, dadd.o(.text))
-
[Stack]
__aeabi_drsub (Thumb, 6 bytes, Stack size 0 bytes, dadd.o(.text), UNUSED)
-
[Calls]
__aeabi_dmul (Thumb, 228 bytes, Stack size 48 bytes, dmul.o(.text))
-
[Stack]
__aeabi_ddiv (Thumb, 222 bytes, Stack size 32 bytes, ddiv.o(.text))
-
[Stack]
__aeabi_i2f (Thumb, 18 bytes, Stack size 0 bytes, fflti.o(.text))
-
[Stack]
__aeabi_ui2f (Thumb, 10 bytes, Stack size 0 bytes, ffltui.o(.text))
-
[Stack]
__aeabi_i2d (Thumb, 34 bytes, Stack size 16 bytes, dflti.o(.text))
-
[Stack]
__aeabi_ui2d (Thumb, 26 bytes, Stack size 16 bytes, dfltui.o(.text))
-
[Stack]
__aeabi_f2uiz (Thumb, 40 bytes, Stack size 0 bytes, ffixui.o(.text))
-
[Called By]
__aeabi_d2uiz (Thumb, 50 bytes, Stack size 8 bytes, dfixui.o(.text))
-
[Stack]
__aeabi_f2d (Thumb, 38 bytes, Stack size 0 bytes, f2d.o(.text))
-
[Called By]
__aeabi_cdcmpeq (Thumb, 0 bytes, Stack size 0 bytes, cdcmple.o(.text), UNUSED) - -
__aeabi_cdcmple (Thumb, 48 bytes, Stack size 0 bytes, cdcmple.o(.text))
-
[Called By]
__aeabi_cdrcmple (Thumb, 48 bytes, Stack size 0 bytes, cdrcmple.o(.text))
-
[Called By]
__aeabi_d2f (Thumb, 56 bytes, Stack size 8 bytes, d2f.o(.text))
-
[Stack]
__aeabi_cfcmpeq (Thumb, 0 bytes, Stack size 0 bytes, cfcmple.o(.text))
-
[Called By]
__aeabi_cfcmple (Thumb, 20 bytes, Stack size 0 bytes, cfcmple.o(.text))
-
[Called By]
__aeabi_cfrcmple (Thumb, 20 bytes, Stack size 0 bytes, cfrcmple.o(.text))
-
[Called By]
__aeabi_uidiv (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED) - -
__aeabi_uidivmod (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
-
[Called By]
__aeabi_uldivmod (Thumb, 98 bytes, Stack size 40 bytes, uldiv.o(.text), UNUSED)
-
[Calls]
__aeabi_llsl (Thumb, 30 bytes, Stack size 0 bytes, llshl.o(.text))
-
[Called By]
_ll_shift_l (Thumb, 0 bytes, Stack size 0 bytes, llshl.o(.text), UNUSED) - -
__aeabi_llsr (Thumb, 32 bytes, Stack size 0 bytes, llushr.o(.text))
-
[Called By]
_ll_ushift_r (Thumb, 0 bytes, Stack size 0 bytes, llushr.o(.text), UNUSED) - -
__aeabi_lasr (Thumb, 36 bytes, Stack size 0 bytes, llsshr.o(.text))
-
[Called By]
_ll_sshift_r (Thumb, 0 bytes, Stack size 0 bytes, llsshr.o(.text), UNUSED) - -
__I$use$fp (Thumb, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED) - -
_float_round (Thumb, 18 bytes, Stack size 0 bytes, fepilogue.o(.text))
-
[Called By]
_float_epilogue (Thumb, 92 bytes, Stack size 4 bytes, fepilogue.o(.text))
-
[Stack]
_double_round (Thumb, 30 bytes, Stack size 8 bytes, depilogue.o(.text))
-
[Stack]
_double_epilogue (Thumb, 156 bytes, Stack size 32 bytes, depilogue.o(.text))
-
[Stack]
__aeabi_d2ulz (Thumb, 48 bytes, Stack size 0 bytes, dfixul.o(.text), UNUSED)
-
[Calls]
__scatterload (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text))
-
[Calls]
__scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED) - -
__decompress (Thumb, 0 bytes, Stack size unknown bytes, __dczerorl2.o(.text), UNUSED) - -
__decompress1 (Thumb, 86 bytes, Stack size unknown bytes, __dczerorl2.o(.text), UNUSED) - -
ADC1_2_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.ADC1_2_IRQHandler))
-
[Stack]
AES_CMAC_Final (Thumb, 328 bytes, Stack size 48 bytes, cmac.o(i.AES_CMAC_Final))
-
[Stack]
AES_CMAC_Init (Thumb, 36 bytes, Stack size 8 bytes, cmac.o(i.AES_CMAC_Init))
-
[Stack]
AES_CMAC_SetKey (Thumb, 10 bytes, Stack size 0 bytes, cmac.o(i.AES_CMAC_SetKey))
-
[Stack]
AES_CMAC_Update (Thumb, 180 bytes, Stack size 48 bytes, cmac.o(i.AES_CMAC_Update))
-
[Stack]
BusFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.BusFault_Handler))
-
[Calls]
DBG_ASSERT (Thumb, 10 bytes, Stack size 0 bytes, debug.o(i.DBG_ASSERT))
-
[Called By]
DMA1_Channel1_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA1_Channel1_IRQHandler))
-
[Stack]
DMA1_Channel5_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA1_Channel5_IRQHandler))
-
[Address Reference Count : 1]
DMA1_Channel6_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA1_Channel6_IRQHandler))
-
[Stack]
DMA1_Channel7_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA1_Channel7_IRQHandler))
-
[Stack]
DMA2_Channel1_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA2_Channel1_IRQHandler))
-
[Stack]
DMA2_Channel2_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA2_Channel2_IRQHandler))
-
[Stack]
DMA2_Channel6_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA2_Channel6_IRQHandler))
-
[Stack]
DMA2_Channel7_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DMA2_Channel7_IRQHandler))
-
[Stack]
DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.DebugMon_Handler))
-
[Address Reference Count : 1]
HardFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.HardFault_Handler))
-
[Calls]
I2C1_EV_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.I2C1_EV_IRQHandler))
-
[Stack]
LL_ADC_CommonInit (Thumb, 80 bytes, Stack size 12 bytes, stm32l4xx_ll_adc.o(i.LL_ADC_CommonInit))
-
[Stack]
LL_ADC_Init (Thumb, 44 bytes, Stack size 12 bytes, stm32l4xx_ll_adc.o(i.LL_ADC_Init))
-
[Stack]
LL_ADC_REG_Init (Thumb, 90 bytes, Stack size 16 bytes, stm32l4xx_ll_adc.o(i.LL_ADC_REG_Init))
-
[Stack]
LL_DAC_Init (Thumb, 104 bytes, Stack size 16 bytes, stm32l4xx_ll_dac.o(i.LL_DAC_Init))
-
[Stack]
LL_GPIO_Init (Thumb, 316 bytes, Stack size 24 bytes, stm32l4xx_ll_gpio.o(i.LL_GPIO_Init))
-
[Stack]
LL_I2C_Init (Thumb, 106 bytes, Stack size 8 bytes, stm32l4xx_ll_i2c.o(i.LL_I2C_Init))
-
[Stack]
LL_IncTick (Thumb, 10 bytes, Stack size 0 bytes, sys.o(i.LL_IncTick))
-
[Called By]
LL_Init1msTick (Thumb, 26 bytes, Stack size 0 bytes, stm32l4xx_ll_utils.o(i.LL_Init1msTick))
-
[Called By]
LL_RCC_GetUARTClockFreq (Thumb, 192 bytes, Stack size 24 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_GetUARTClockFreq))
-
[Stack]
LL_RCC_GetUSARTClockFreq (Thumb, 268 bytes, Stack size 16 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_GetUSARTClockFreq))
-
[Stack]
LL_SPI_Init (Thumb, 112 bytes, Stack size 8 bytes, stm32l4xx_ll_spi.o(i.LL_SPI_Init))
-
[Stack]
LL_SetSystemCoreClock (Thumb, 6 bytes, Stack size 0 bytes, stm32l4xx_ll_utils.o(i.LL_SetSystemCoreClock))
-
[Called By]
LL_TIM_Init (Thumb, 160 bytes, Stack size 32 bytes, stm32l4xx_ll_tim.o(i.LL_TIM_Init))
-
[Stack]
LL_TIM_OC_Init (Thumb, 88 bytes, Stack size 0 bytes, stm32l4xx_ll_tim.o(i.LL_TIM_OC_Init))
-
[Stack]
LL_USART_Init (Thumb, 198 bytes, Stack size 16 bytes, stm32l4xx_ll_usart.o(i.LL_USART_Init))
-
[Stack]
LL_mDelay (Thumb, 32 bytes, Stack size 8 bytes, stm32l4xx_ll_utils.o(i.LL_mDelay))
-
[Stack]
MX_ADC1_Init (Thumb, 814 bytes, Stack size 104 bytes, adc.o(i.MX_ADC1_Init))
-
[Stack]
MX_DAC1_Init (Thumb, 172 bytes, Stack size 64 bytes, dac.o(i.MX_DAC1_Init))
-
[Stack]
MX_DMA_Init (Thumb, 226 bytes, Stack size 8 bytes, dma.o(i.MX_DMA_Init))
-
[Stack]
MX_GPIO_Init (Thumb, 480 bytes, Stack size 64 bytes, gpio.o(i.MX_GPIO_Init))
-
[Stack]
MX_I2C1_Init (Thumb, 374 bytes, Stack size 72 bytes, i2c.o(i.MX_I2C1_Init))
-
[Stack]
MX_SPI1_Init (Thumb, 138 bytes, Stack size 80 bytes, spi.o(i.MX_SPI1_Init))
-
[Stack]
MX_SPI2_Init (Thumb, 264 bytes, Stack size 80 bytes, spi.o(i.MX_SPI2_Init))
-
[Stack]
MX_TIM2_Init (Thumb, 194 bytes, Stack size 96 bytes, tim.o(i.MX_TIM2_Init))
-
[Stack]
MX_TIM3_Init (Thumb, 190 bytes, Stack size 96 bytes, tim.o(i.MX_TIM3_Init))
-
[Stack]
MX_TIM6_Init (Thumb, 102 bytes, Stack size 32 bytes, tim.o(i.MX_TIM6_Init))
-
[Stack]
MX_TIM7_Init (Thumb, 102 bytes, Stack size 32 bytes, tim.o(i.MX_TIM7_Init))
-
[Stack]
MX_UART5_Init (Thumb, 362 bytes, Stack size 80 bytes, usart.o(i.MX_UART5_Init))
-
[Stack]
MX_USART1_UART_Init (Thumb, 338 bytes, Stack size 72 bytes, usart.o(i.MX_USART1_UART_Init))
-
[Stack]
MemManage_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.MemManage_Handler))
-
[Calls]
NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.NMI_Handler))
-
[Calls]
PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.PendSV_Handler))
-
[Address Reference Count : 1]
PeriphCommonClock_Config (Thumb, 54 bytes, Stack size 0 bytes, main.o(i.PeriphCommonClock_Config))
-
[Called By]
SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.SVC_Handler))
-
[Address Reference Count : 1]
SysTick_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.SysTick_Handler))
-
[Address Reference Count : 1]
SysTick_Init (Thumb, 20 bytes, Stack size 0 bytes, delay.o(i.SysTick_Init))
-
[Called By]
SystemClock_Config (Thumb, 134 bytes, Stack size 8 bytes, main.o(i.SystemClock_Config))
-
[Stack]
SystemInit (Thumb, 2 bytes, Stack size 0 bytes, system_stm32l4xx.o(i.SystemInit))
-
[Address Reference Count : 1]
TIM6_DAC_IRQHandler (Thumb, 136 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.TIM6_DAC_IRQHandler))
-
[Calls]
TIM7_IRQHandler (Thumb, 128 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.TIM7_IRQHandler))
-
[Stack]
UART5_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.UART5_IRQHandler))
-
[Stack]
USART1_IRQHandler (Thumb, 8 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.USART1_IRQHandler))
-
[Stack]
UsageFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32l4xx_it.o(i.UsageFault_Handler))
-
[Calls]
__0sprintf (Thumb, 34 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED)
-
[Calls]
__1sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) - -
__2sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf))
-
[Stack]
__c89sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) - -
sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) - -
__scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) - -
__scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) - -
__scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) - -
_fdb_continue_ff_addr (Thumb, 100 bytes, Stack size 72 bytes, fdb_utils.o(i._fdb_continue_ff_addr))
-
[Stack]
_fdb_flash_erase (Thumb, 30 bytes, Stack size 8 bytes, fdb_utils.o(i._fdb_flash_erase))
-
[Stack]
_fdb_flash_read (Thumb, 30 bytes, Stack size 16 bytes, fdb_utils.o(i._fdb_flash_read))
-
[Stack]
_fdb_flash_write (Thumb, 30 bytes, Stack size 16 bytes, fdb_utils.o(i._fdb_flash_write))
-
[Stack]
_fdb_get_status (Thumb, 42 bytes, Stack size 20 bytes, fdb_utils.o(i._fdb_get_status))
-
[Stack]
_fdb_init_ex (Thumb, 134 bytes, Stack size 16 bytes, fdb.o(i._fdb_init_ex))
-
[Stack]
_fdb_init_finish (Thumb, 20 bytes, Stack size 0 bytes, fdb.o(i._fdb_init_finish))
-
[Called By]
_fdb_read_status (Thumb, 38 bytes, Stack size 16 bytes, fdb_utils.o(i._fdb_read_status))
-
[Stack]
_fdb_set_status (Thumb, 46 bytes, Stack size 16 bytes, fdb_utils.o(i._fdb_set_status))
-
[Stack]
_fdb_write_status (Thumb, 54 bytes, Stack size 24 bytes, fdb_utils.o(i._fdb_write_status))
-
[Stack]
actual_travel_deal (Thumb, 26 bytes, Stack size 8 bytes, convert.o(i.actual_travel_deal))
-
[Stack]
adc_callback (Thumb, 124 bytes, Stack size 32 bytes, adcs.o(i.adc_callback))
-
[Stack]
adc_completed_state_change (Thumb, 6 bytes, Stack size 0 bytes, adcs.o(i.adc_completed_state_change))
-
[Called By]
adc_dma_callback (Thumb, 60 bytes, Stack size 16 bytes, adcs.o(i.adc_dma_callback))
-
[Stack]
adc_get_result_average (Thumb, 44 bytes, Stack size 8 bytes, adcs.o(i.adc_get_result_average))
-
[Stack]
adc_get_result_median (Thumb, 92 bytes, Stack size 76 bytes, adcs.o(i.adc_get_result_median))
-
[Stack]
adc_init (Thumb, 182 bytes, Stack size 32 bytes, adcs.o(i.adc_init))
-
[Stack]
aes_encrypt (Thumb, 86 bytes, Stack size 32 bytes, aes.o(i.aes_encrypt))
-
[Stack]
aes_set_key (Thumb, 246 bytes, Stack size 40 bytes, aes.o(i.aes_set_key))
-
[Stack]
alog_control_module (Thumb, 90 bytes, Stack size 8 bytes, mode.o(i.alog_control_module))
-
[Stack]
app_init (Thumb, 34 bytes, Stack size 8 bytes, app.o(i.app_init))
-
[Stack]
app_start (Thumb, 4 bytes, Stack size 0 bytes, app.o(i.app_start))
-
[Stack]
at_cmd_parse (Thumb, 110 bytes, Stack size 16 bytes, at_hc24.o(i.at_cmd_parse))
-
[Stack]
at_cmd_search (Thumb, 62 bytes, Stack size 24 bytes, at_hc24.o(i.at_cmd_search))
-
[Stack]
at_set_memcmp_cache (Thumb, 40 bytes, Stack size 12 bytes, at_hc24.o(i.at_set_memcmp_cache))
-
[Stack]
board_init (Thumb, 130 bytes, Stack size 16 bytes, board.o(i.board_init))
-
[Stack]
button_attach (Thumb, 8 bytes, Stack size 0 bytes, btn.o(i.button_attach))
-
[Called By]
button_handler (Thumb, 506 bytes, Stack size 16 bytes, btn.o(i.button_handler))
-
[Stack]
button_init (Thumb, 64 bytes, Stack size 24 bytes, btn.o(i.button_init))
-
[Stack]
button_start (Thumb, 32 bytes, Stack size 0 bytes, btn.o(i.button_start))
-
[Called By]
button_stop (Thumb, 26 bytes, Stack size 0 bytes, btn.o(i.button_stop))
-
[Called By]
button_ticks (Thumb, 22 bytes, Stack size 8 bytes, btn.o(i.button_ticks))
-
[Stack]
calculate_pwm_duty (Thumb, 108 bytes, Stack size 24 bytes, pdctrl.o(i.calculate_pwm_duty))
-
[Stack]
calib_parapos_perent (Thumb, 106 bytes, Stack size 24 bytes, board.o(i.calib_parapos_perent))
-
[Stack]
crc16_compute (Thumb, 54 bytes, Stack size 16 bytes, lib.o(i.crc16_compute))
-
[Stack]
dac_process_state_set (Thumb, 14 bytes, Stack size 0 bytes, mode_dac.o(i.dac_process_state_set))
-
[Called By]
dead_zone_deal (Thumb, 36 bytes, Stack size 16 bytes, convert.o(i.dead_zone_deal))
-
[Stack]
dec_format_hex (Thumb, 70 bytes, Stack size 16 bytes, lib.o(i.dec_format_hex))
-
[Stack]
delay_init (Thumb, 20 bytes, Stack size 8 bytes, delay.o(i.delay_init))
-
[Stack]
delay_ms (Thumb, 54 bytes, Stack size 16 bytes, delay.o(i.delay_ms))
-
[Stack]
delay_tick (Thumb, 12 bytes, Stack size 0 bytes, delay.o(i.delay_tick))
-
[Called By]
delay_us (Thumb, 52 bytes, Stack size 16 bytes, delay.o(i.delay_us))
-
[Stack]
driver_dinit (Thumb, 38 bytes, Stack size 8 bytes, board.o(i.driver_dinit))
-
[Stack]
driver_init (Thumb, 38 bytes, Stack size 8 bytes, board.o(i.driver_init))
-
[Stack]
eeprom_fm24_disable (Thumb, 40 bytes, Stack size 8 bytes, eeprom_fm24.o(i.eeprom_fm24_disable))
-
[Stack]
eeprom_fm24_enable (Thumb, 40 bytes, Stack size 8 bytes, eeprom_fm24.o(i.eeprom_fm24_enable))
-
[Stack]
eeprom_fm24_init (Thumb, 48 bytes, Stack size 24 bytes, eeprom_fm24.o(i.eeprom_fm24_init))
-
[Stack]
eeprom_fm24_read (Thumb, 38 bytes, Stack size 24 bytes, eeprom_fm24.o(i.eeprom_fm24_read))
-
[Stack]
eeprom_fm24_write (Thumb, 184 bytes, Stack size 40 bytes, eeprom_fm24.o(i.eeprom_fm24_write))
-
[Stack]
eeprom_lc02b_init (Thumb, 40 bytes, Stack size 16 bytes, eeprom_lc02b.o(i.eeprom_lc02b_init))
-
[Stack]
eeprom_m95_disable (Thumb, 2 bytes, Stack size 0 bytes, eeprom_m95.o(i.eeprom_m95_disable))
-
[Called By]
eeprom_m95_enable (Thumb, 2 bytes, Stack size 0 bytes, eeprom_m95.o(i.eeprom_m95_enable))
-
[Called By]
eeprom_m95_init (Thumb, 254 bytes, Stack size 64 bytes, eeprom_m95.o(i.eeprom_m95_init))
-
[Stack]
eeprom_m95_read (Thumb, 150 bytes, Stack size 32 bytes, eeprom_m95.o(i.eeprom_m95_read))
-
[Stack]
eeprom_m95_write (Thumb, 310 bytes, Stack size 48 bytes, eeprom_m95.o(i.eeprom_m95_write))
-
[Stack]
execute_dac (Thumb, 42 bytes, Stack size 0 bytes, execute_hd.o(i.execute_dac))
-
[Stack]
execute_pid_init (Thumb, 58 bytes, Stack size 24 bytes, execute_hd.o(i.execute_pid_init))
-
[Stack]
fal_execution_init (Thumb, 350 bytes, Stack size 32 bytes, fal_execution.o(i.fal_execution_init))
-
[Stack]
fal_execution_kv_read (Thumb, 198 bytes, Stack size 48 bytes, fal_execution.o(i.fal_execution_kv_read))
-
[Stack]
fal_execution_kv_write (Thumb, 200 bytes, Stack size 48 bytes, fal_execution.o(i.fal_execution_kv_write))
-
[Stack]
fal_flash_device_find (Thumb, 38 bytes, Stack size 16 bytes, fal_flash.o(i.fal_flash_device_find))
-
[Stack]
fal_flash_init (Thumb, 42 bytes, Stack size 16 bytes, fal_flash.o(i.fal_flash_init))
-
[Stack]
fal_init (Thumb, 40 bytes, Stack size 8 bytes, fal.o(i.fal_init))
-
[Stack]
fal_partition_erase (Thumb, 56 bytes, Stack size 24 bytes, fal_partition.o(i.fal_partition_erase))
-
[Stack]
fal_partition_find (Thumb, 46 bytes, Stack size 16 bytes, fal_partition.o(i.fal_partition_find))
-
[Stack]
fal_partition_init (Thumb, 36 bytes, Stack size 8 bytes, fal_partition.o(i.fal_partition_init))
-
[Stack]
fal_partition_read (Thumb, 62 bytes, Stack size 24 bytes, fal_partition.o(i.fal_partition_read))
-
[Stack]
fal_partition_write (Thumb, 62 bytes, Stack size 24 bytes, fal_partition.o(i.fal_partition_write))
-
[Stack]
fdb_blob_make (Thumb, 6 bytes, Stack size 0 bytes, fdb_utils.o(i.fdb_blob_make))
-
[Called By]
fdb_calc_crc32 (Thumb, 34 bytes, Stack size 8 bytes, fdb_utils.o(i.fdb_calc_crc32))
-
[Stack]
fdb_kv_get_blob (Thumb, 56 bytes, Stack size 24 bytes, fdb_kvdb.o(i.fdb_kv_get_blob))
-
[Stack]
fdb_kv_set_blob (Thumb, 50 bytes, Stack size 16 bytes, fdb_kvdb.o(i.fdb_kv_set_blob))
-
[Stack]
fdb_kv_set_default (Thumb, 146 bytes, Stack size 64 bytes, fdb_kvdb.o(i.fdb_kv_set_default))
-
[Stack]
fdb_kvdb_control (Thumb, 64 bytes, Stack size 0 bytes, fdb_kvdb.o(i.fdb_kvdb_control))
-
[Called By]
fdb_kvdb_init (Thumb, 188 bytes, Stack size 64 bytes, fdb_kvdb.o(i.fdb_kvdb_init))
-
[Stack]
fdb_tsdb_control (Thumb, 94 bytes, Stack size 0 bytes, fdb_tsdb.o(i.fdb_tsdb_control))
-
[Called By]
fdb_tsdb_init (Thumb, 262 bytes, Stack size 120 bytes, fdb_tsdb.o(i.fdb_tsdb_init))
-
[Stack]
flow_init (Thumb, 20 bytes, Stack size 0 bytes, app_flow.o(i.flow_init))
-
[Called By]
flow_start (Thumb, 36 bytes, Stack size 8 bytes, app_flow.o(i.flow_start))
-
[Stack]
get_actual_travel (Thumb, 60 bytes, Stack size 8 bytes, board.o(i.get_actual_travel))
-
[Stack]
get_actual_travel_adc (Thumb, 6 bytes, Stack size 0 bytes, board.o(i.get_actual_travel_adc))
-
[Stack]
get_current (Thumb, 46 bytes, Stack size 8 bytes, board.o(i.get_current))
-
[Stack]
get_current_deal (Thumb, 28 bytes, Stack size 8 bytes, board.o(i.get_current_deal))
-
[Stack]
get_pid_travel (Thumb, 20 bytes, Stack size 0 bytes, convert.o(i.get_pid_travel))
-
[Stack]
get_pressure (Thumb, 102 bytes, Stack size 16 bytes, board.o(i.get_pressure))
-
[Stack]
get_pwmp_control_kd (Thumb, 10 bytes, Stack size 0 bytes, mode_pwmp.o(i.get_pwmp_control_kd))
-
[Called By]
get_pwmp_control_ki (Thumb, 10 bytes, Stack size 0 bytes, mode_pwmp.o(i.get_pwmp_control_ki))
-
[Called By]
get_pwmp_control_kp (Thumb, 22 bytes, Stack size 0 bytes, mode_pwmp.o(i.get_pwmp_control_kp))
-
[Stack]
get_show_travel (Thumb, 18 bytes, Stack size 0 bytes, convert.o(i.get_show_travel))
-
[Stack]
get_temperature (Thumb, 28 bytes, Stack size 8 bytes, board.o(i.get_temperature))
-
[Stack]
get_timestamp (Thumb, 48 bytes, Stack size 16 bytes, board.o(i.get_timestamp))
-
[Stack]
get_weekday (Thumb, 76 bytes, Stack size 8 bytes, lib.o(i.get_weekday))
-
[Stack]
gpio_create (Thumb, 54 bytes, Stack size 16 bytes, gpios.o(i.gpio_create))
-
[Stack]
h24_bluetooth_output_dbg (Thumb, 4 bytes, Stack size 0 bytes, app_hart.o(i.h24_bluetooth_output_dbg))
-
[Stack]
h24_bluetooth_work (Thumb, 226 bytes, Stack size 208 bytes, app_hart.o(i.h24_bluetooth_work))
-
[Stack]
hart_ble_dinit (Thumb, 78 bytes, Stack size 8 bytes, app_hart.o(i.hart_ble_dinit))
-
[Stack]
hart_ble_init (Thumb, 132 bytes, Stack size 32 bytes, app_hart.o(i.hart_ble_init))
-
[Stack]
hart_uart_dinit (Thumb, 84 bytes, Stack size 8 bytes, app_hart.o(i.hart_uart_dinit))
-
[Stack]
hart_uart_init (Thumb, 184 bytes, Stack size 40 bytes, app_hart.o(i.hart_uart_init))
-
[Stack]
hex_format_dec (Thumb, 104 bytes, Stack size 16 bytes, lib.o(i.hex_format_dec))
-
[Stack]
i2c_create (Thumb, 52 bytes, Stack size 24 bytes, i2cs.o(i.i2c_create))
-
[Stack]
i2c_create_dma (Thumb, 276 bytes, Stack size 40 bytes, i2cs.o(i.i2c_create_dma))
-
[Stack]
i2c_dma_callback (Thumb, 46 bytes, Stack size 8 bytes, i2cs.o(i.i2c_dma_callback))
-
[Stack]
i2c_dma_set_address (Thumb, 34 bytes, Stack size 16 bytes, i2cs.o(i.i2c_dma_set_address))
-
[Stack]
i2c_ev_callback (Thumb, 242 bytes, Stack size 8 bytes, i2cs.o(i.i2c_ev_callback))
-
[Stack]
i2psb (Thumb, 220 bytes, Stack size 24 bytes, convert.o(i.i2psb))
-
[Stack]
is_manual_test (Thumb, 16 bytes, Stack size 0 bytes, mode.o(i.is_manual_test))
-
[Called By]
key_botton_start (Thumb, 58 bytes, Stack size 8 bytes, key.o(i.key_botton_start))
-
[Stack]
key_dinit (Thumb, 154 bytes, Stack size 16 bytes, key.o(i.key_dinit))
-
[Stack]
key_init (Thumb, 590 bytes, Stack size 16 bytes, key.o(i.key_init))
-
[Stack]
leds_dinit (Thumb, 68 bytes, Stack size 8 bytes, leds.o(i.leds_dinit))
-
[Stack]
leds_init (Thumb, 168 bytes, Stack size 40 bytes, leds.o(i.leds_init))
-
[Stack]
leds_toggle (Thumb, 26 bytes, Stack size 16 bytes, leds.o(i.leds_toggle))
-
[Stack]
loop_current_convert (Thumb, 22 bytes, Stack size 8 bytes, board.o(i.loop_current_convert))
-
[Stack]
lpf_init (Thumb, 26 bytes, Stack size 0 bytes, filter.o(i.lpf_init))
-
[Called By]
lpf_update (Thumb, 60 bytes, Stack size 24 bytes, filter.o(i.lpf_update))
-
[Stack]
main (Thumb, 200 bytes, Stack size 8 bytes, main.o(i.main))
-
[Stack]
mode_dac_dinit (Thumb, 22 bytes, Stack size 8 bytes, mode_dac.o(i.mode_dac_dinit))
-
[Stack]
mode_dac_init (Thumb, 74 bytes, Stack size 8 bytes, mode_dac.o(i.mode_dac_init))
-
[Stack]
mode_dac_process (Thumb, 36 bytes, Stack size 0 bytes, mode_dac.o(i.mode_dac_process))
-
[Stack]
mode_detection (Thumb, 114 bytes, Stack size 16 bytes, mode.o(i.mode_detection))
-
[Stack]
mode_init (Thumb, 102 bytes, Stack size 8 bytes, mode.o(i.mode_init))
-
[Stack]
mode_pwm_dinit (Thumb, 34 bytes, Stack size 8 bytes, mode_pwm.o(i.mode_pwm_dinit))
-
[Stack]
mode_pwm_init (Thumb, 94 bytes, Stack size 8 bytes, mode_pwm.o(i.mode_pwm_init))
-
[Stack]
mode_pwm_process (Thumb, 50 bytes, Stack size 8 bytes, mode_pwm.o(i.mode_pwm_process))
-
[Stack]
mode_pwmp_dinit (Thumb, 30 bytes, Stack size 8 bytes, mode_pwmp.o(i.mode_pwmp_dinit))
-
[Stack]
mode_pwmp_init (Thumb, 204 bytes, Stack size 24 bytes, mode_pwmp.o(i.mode_pwmp_init))
-
[Stack]
mode_pwmp_process (Thumb, 348 bytes, Stack size 192 bytes, mode_pwmp.o(i.mode_pwmp_process))
-
[Stack]
mstrncmp (Thumb, 30 bytes, Stack size 8 bytes, at_hc24.o(i.mstrncmp))
-
[Stack]
my_mem_free (Thumb, 80 bytes, Stack size 16 bytes, malloc.o(i.my_mem_free))
-
[Stack]
my_mem_init (Thumb, 50 bytes, Stack size 16 bytes, malloc.o(i.my_mem_init))
-
[Stack]
my_mem_malloc (Thumb, 146 bytes, Stack size 24 bytes, malloc.o(i.my_mem_malloc))
-
[Stack]
my_mem_perused (Thumb, 48 bytes, Stack size 8 bytes, malloc.o(i.my_mem_perused))
-
[Stack]
myfree (Thumb, 58 bytes, Stack size 16 bytes, malloc.o(i.myfree))
-
[Stack]
mymalloc (Thumb, 30 bytes, Stack size 8 bytes, malloc.o(i.mymalloc))
-
[Stack]
mymemset (Thumb, 14 bytes, Stack size 0 bytes, malloc.o(i.mymemset))
-
[Called By]
ntc_get_temp (Thumb, 114 bytes, Stack size 16 bytes, ntc_3950.o(i.ntc_get_temp))
-
[Stack]
params_init (Thumb, 148 bytes, Stack size 16 bytes, params.o(i.params_init))
-
[Stack]
params_restart (Thumb, 586 bytes, Stack size 40 bytes, params.o(i.params_restart))
-
[Stack]
part_travel_deal (Thumb, 54 bytes, Stack size 16 bytes, convert.o(i.part_travel_deal))
-
[Stack]
pdctrl_init (Thumb, 80 bytes, Stack size 8 bytes, pdctrl.o(i.pdctrl_init))
-
[Stack]
pdctrl_out (Thumb, 78 bytes, Stack size 0 bytes, pdctrl.o(i.pdctrl_out))
-
[Stack]
pdctrl_pwm_set_arr (Thumb, 44 bytes, Stack size 8 bytes, pdctrl.o(i.pdctrl_pwm_set_arr))
-
[Stack]
pdctrl_run (Thumb, 38 bytes, Stack size 0 bytes, pdctrl.o(i.pdctrl_run))
-
[Stack]
pdctrl_stop (Thumb, 44 bytes, Stack size 0 bytes, pdctrl.o(i.pdctrl_stop))
-
[Stack]
pid_constructor (Thumb, 18 bytes, Stack size 0 bytes, pid.o(i.pid_constructor))
-
[Calls]
pid_position_constructor (Thumb, 14 bytes, Stack size 0 bytes, pid_position.o(i.pid_position_constructor))
-
[Called By]
pwm_output_deal (Thumb, 16 bytes, Stack size 0 bytes, convert.o(i.pwm_output_deal))
-
[Stack]
pwm_output_position (Thumb, 40 bytes, Stack size 8 bytes, board.o(i.pwm_output_position))
-
[Stack]
pwmp_adjust (Thumb, 194 bytes, Stack size 8 bytes, autotune_hd.o(i.pwmp_adjust))
-
[Stack]
pwmp_process_state_set (Thumb, 34 bytes, Stack size 0 bytes, mode_pwmp.o(i.pwmp_process_state_set))
-
[Called By]
rtc_get_clock_time (Thumb, 8 bytes, Stack size 0 bytes, rtc_rx8010.o(i.rtc_get_clock_time))
-
[Stack]
rtc_init (Thumb, 76 bytes, Stack size 16 bytes, rtc_rx8010.o(i.rtc_init))
-
[Stack]
rtc_set_clock_time (Thumb, 72 bytes, Stack size 16 bytes, rtc_rx8010.o(i.rtc_set_clock_time))
-
[Stack]
rtc_weekday_convert (Thumb, 66 bytes, Stack size 0 bytes, rtc_rx8010.o(i.rtc_weekday_convert))
-
[Called By]
scheduler_time_occupancy_get (Thumb, 40 bytes, Stack size 16 bytes, sys.o(i.scheduler_time_occupancy_get))
-
[Stack]
scheduler_time_start (Thumb, 12 bytes, Stack size 4 bytes, sys.o(i.scheduler_time_start))
-
[Stack]
scheduler_time_stop (Thumb, 20 bytes, Stack size 4 bytes, sys.o(i.scheduler_time_stop))
-
[Stack]
set_app_preload_language_flag (Thumb, 12 bytes, Stack size 0 bytes, board.o(i.set_app_preload_language_flag))
-
[Called By]
set_pwm_calib_current (Thumb, 66 bytes, Stack size 24 bytes, board.o(i.set_pwm_calib_current))
-
[Stack]
small_signal_deal (Thumb, 56 bytes, Stack size 16 bytes, convert.o(i.small_signal_deal))
-
[Stack]
spi_create (Thumb, 140 bytes, Stack size 32 bytes, spis.o(i.spi_create))
-
[Stack]
swo_output_deal (Thumb, 130 bytes, Stack size 16 bytes, convert.o(i.swo_output_deal))
-
[Stack]
sys_millis (Thumb, 12 bytes, Stack size 0 bytes, sys.o(i.sys_millis))
-
[Called By]
sys_millis_reset (Thumb, 8 bytes, Stack size 0 bytes, sys.o(i.sys_millis_reset))
-
[Called By]
target_travel_deal (Thumb, 18 bytes, Stack size 8 bytes, convert.o(i.target_travel_deal))
-
[Stack]
time2Stamp (Thumb, 162 bytes, Stack size 20 bytes, lib.o(i.time2Stamp))
-
[Stack]
travel_statistics (Thumb, 136 bytes, Stack size 16 bytes, mode.o(i.travel_statistics))
-
[Stack]
uart_create (Thumb, 132 bytes, Stack size 40 bytes, uarts.o(i.uart_create))
-
[Stack]
uart_dma_reception_callback (Thumb, 118 bytes, Stack size 8 bytes, uarts.o(i.uart_dma_reception_callback))
-
[Stack]
uart_reception_callback (Thumb, 310 bytes, Stack size 16 bytes, uarts.o(i.uart_reception_callback))
-
[Stack]
uart_recv_en (Thumb, 232 bytes, Stack size 24 bytes, uarts.o(i.uart_recv_en))
-
[Stack]
uart_send_data (Thumb, 202 bytes, Stack size 24 bytes, uarts.o(i.uart_send_data))
-
[Stack]
-
LL_AHB2_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, gpio.o(i.LL_AHB2_GRP1_EnableClock))
-
[Stack]
LL_ADC_REG_SetSequencerRanks (Thumb, 34 bytes, Stack size 8 bytes, adc.o(i.LL_ADC_REG_SetSequencerRanks))
-
[Stack]
LL_ADC_SetChannelSamplingTime (Thumb, 30 bytes, Stack size 8 bytes, adc.o(i.LL_ADC_SetChannelSamplingTime))
-
[Stack]
LL_ADC_SetChannelSingleDiff (Thumb, 28 bytes, Stack size 8 bytes, adc.o(i.LL_ADC_SetChannelSingleDiff))
-
[Stack]
LL_AHB2_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, adc.o(i.LL_AHB2_GRP1_EnableClock))
-
[Stack]
LL_AHB1_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, dma.o(i.LL_AHB1_GRP1_EnableClock))
-
[Stack]
NVIC_EncodePriority (Thumb, 50 bytes, Stack size 12 bytes, dma.o(i.NVIC_EncodePriority))
-
[Stack]
__NVIC_EnableIRQ (Thumb, 26 bytes, Stack size 0 bytes, dma.o(i.__NVIC_EnableIRQ))
-
[Called By]
__NVIC_GetPriorityGrouping (Thumb, 10 bytes, Stack size 0 bytes, dma.o(i.__NVIC_GetPriorityGrouping))
-
[Called By]
__NVIC_SetPriority (Thumb, 32 bytes, Stack size 0 bytes, dma.o(i.__NVIC_SetPriority))
-
[Called By]
LL_DMA_SetChannelPriorityLevel (Thumb, 16 bytes, Stack size 0 bytes, i2c.o(i.LL_DMA_SetChannelPriorityLevel))
-
[Called By]
LL_DMA_SetDataTransferDirection (Thumb, 20 bytes, Stack size 8 bytes, i2c.o(i.LL_DMA_SetDataTransferDirection))
-
[Stack]
LL_DMA_SetMemoryIncMode (Thumb, 16 bytes, Stack size 0 bytes, i2c.o(i.LL_DMA_SetMemoryIncMode))
-
[Called By]
LL_DMA_SetMemorySize (Thumb, 16 bytes, Stack size 0 bytes, i2c.o(i.LL_DMA_SetMemorySize))
-
[Called By]
LL_DMA_SetMode (Thumb, 16 bytes, Stack size 0 bytes, i2c.o(i.LL_DMA_SetMode))
-
[Called By]
LL_DMA_SetPeriphIncMode (Thumb, 16 bytes, Stack size 0 bytes, i2c.o(i.LL_DMA_SetPeriphIncMode))
-
[Called By]
LL_DMA_SetPeriphRequest (Thumb, 30 bytes, Stack size 8 bytes, i2c.o(i.LL_DMA_SetPeriphRequest))
-
[Stack]
LL_DMA_SetPeriphSize (Thumb, 16 bytes, Stack size 0 bytes, i2c.o(i.LL_DMA_SetPeriphSize))
-
[Called By]
LL_AHB2_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, spi.o(i.LL_AHB2_GRP1_EnableClock))
-
[Stack]
LL_AHB2_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, tim.o(i.LL_AHB2_GRP1_EnableClock))
-
[Stack]
LL_APB1_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, tim.o(i.LL_APB1_GRP1_EnableClock))
-
[Stack]
LL_TIM_OC_DisableFast (Thumb, 100 bytes, Stack size 0 bytes, tim.o(i.LL_TIM_OC_DisableFast))
-
[Called By]
LL_TIM_OC_EnablePreload (Thumb, 100 bytes, Stack size 0 bytes, tim.o(i.LL_TIM_OC_EnablePreload))
-
[Called By]
NVIC_EncodePriority (Thumb, 50 bytes, Stack size 12 bytes, tim.o(i.NVIC_EncodePriority))
-
[Stack]
__NVIC_EnableIRQ (Thumb, 26 bytes, Stack size 0 bytes, tim.o(i.__NVIC_EnableIRQ))
-
[Called By]
__NVIC_SetPriority (Thumb, 32 bytes, Stack size 0 bytes, tim.o(i.__NVIC_SetPriority))
-
[Called By]
LL_AHB2_GRP1_EnableClock (Thumb, 18 bytes, Stack size 8 bytes, usart.o(i.LL_AHB2_GRP1_EnableClock))
-
[Stack]
LL_DMA_SetChannelPriorityLevel (Thumb, 16 bytes, Stack size 0 bytes, usart.o(i.LL_DMA_SetChannelPriorityLevel))
-
[Called By]
LL_DMA_SetDataTransferDirection (Thumb, 20 bytes, Stack size 8 bytes, usart.o(i.LL_DMA_SetDataTransferDirection))
-
[Stack]
LL_DMA_SetMemoryIncMode (Thumb, 16 bytes, Stack size 0 bytes, usart.o(i.LL_DMA_SetMemoryIncMode))
-
[Called By]
LL_DMA_SetMemorySize (Thumb, 16 bytes, Stack size 0 bytes, usart.o(i.LL_DMA_SetMemorySize))
-
[Called By]
LL_DMA_SetMode (Thumb, 16 bytes, Stack size 0 bytes, usart.o(i.LL_DMA_SetMode))
-
[Called By]
LL_DMA_SetPeriphIncMode (Thumb, 16 bytes, Stack size 0 bytes, usart.o(i.LL_DMA_SetPeriphIncMode))
-
[Called By]
LL_DMA_SetPeriphRequest (Thumb, 30 bytes, Stack size 8 bytes, usart.o(i.LL_DMA_SetPeriphRequest))
-
[Stack]
LL_DMA_SetPeriphSize (Thumb, 16 bytes, Stack size 0 bytes, usart.o(i.LL_DMA_SetPeriphSize))
-
[Called By]
NVIC_EncodePriority (Thumb, 50 bytes, Stack size 12 bytes, usart.o(i.NVIC_EncodePriority))
-
[Stack]
__NVIC_EnableIRQ (Thumb, 26 bytes, Stack size 0 bytes, usart.o(i.__NVIC_EnableIRQ))
-
[Called By]
__NVIC_SetPriority (Thumb, 32 bytes, Stack size 0 bytes, usart.o(i.__NVIC_SetPriority))
-
[Called By]
OC1Config (Thumb, 126 bytes, Stack size 12 bytes, stm32l4xx_ll_tim.o(i.OC1Config))
-
[Stack]
OC2Config (Thumb, 134 bytes, Stack size 12 bytes, stm32l4xx_ll_tim.o(i.OC2Config))
-
[Stack]
OC3Config (Thumb, 132 bytes, Stack size 12 bytes, stm32l4xx_ll_tim.o(i.OC3Config))
-
[Stack]
OC4Config (Thumb, 104 bytes, Stack size 12 bytes, stm32l4xx_ll_tim.o(i.OC4Config))
-
[Stack]
OC5Config (Thumb, 100 bytes, Stack size 12 bytes, stm32l4xx_ll_tim.o(i.OC5Config))
-
[Stack]
OC6Config (Thumb, 100 bytes, Stack size 12 bytes, stm32l4xx_ll_tim.o(i.OC6Config))
-
[Stack]
LL_RCC_HSI_IsReady (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_HSI_IsReady))
-
[Called By]
LL_RCC_LSE_IsReady (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_LSE_IsReady))
-
[Called By]
LL_RCC_MSI_GetRange (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_MSI_GetRange))
-
[Called By]
LL_RCC_MSI_GetRangeAfterStandby (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_MSI_GetRangeAfterStandby))
-
[Called By]
LL_RCC_MSI_IsEnabledRangeSelect (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_MSI_IsEnabledRangeSelect))
-
[Called By]
LL_RCC_PLL_GetDivider (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_PLL_GetDivider))
-
[Called By]
LL_RCC_PLL_GetMainSource (Thumb, 10 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.LL_RCC_PLL_GetMainSource))
-
[Called By]
RCC_GetHCLKClockFreq (Thumb, 18 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.RCC_GetHCLKClockFreq))
-
[Called By]
RCC_GetPCLK1ClockFreq (Thumb, 20 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.RCC_GetPCLK1ClockFreq))
-
[Called By]
RCC_GetPCLK2ClockFreq (Thumb, 20 bytes, Stack size 0 bytes, stm32l4xx_ll_rcc.o(i.RCC_GetPCLK2ClockFreq))
-
[Called By]
RCC_GetSystemClockFreq (Thumb, 154 bytes, Stack size 8 bytes, stm32l4xx_ll_rcc.o(i.RCC_GetSystemClockFreq))
-
[Stack]
RCC_PLL_GetFreqDomain_SYS (Thumb, 176 bytes, Stack size 8 bytes, stm32l4xx_ll_rcc.o(i.RCC_PLL_GetFreqDomain_SYS))
-
[Stack]
LL_GPIO_SetPinMode (Thumb, 38 bytes, Stack size 12 bytes, app_hart.o(i.LL_GPIO_SetPinMode))
-
[Stack]
_mstrlen (Thumb, 16 bytes, Stack size 0 bytes, app_hart.o(i._mstrlen))
-
[Called By]
h24_bluetooth_output (Thumb, 20 bytes, Stack size 0 bytes, app_hart.o(i.h24_bluetooth_output))
-
[Stack]
hart_rx_cb (Thumb, 66 bytes, Stack size 16 bytes, app_hart.o(i.hart_rx_cb))
-
[Stack]
hart_tx_complete_cb (Thumb, 12 bytes, Stack size 0 bytes, app_hart.o(i.hart_tx_complete_cb))
-
[Address Reference Count : 1]
LL_GPIO_IsInputPinSet (Thumb, 14 bytes, Stack size 0 bytes, app_flow.o(i.LL_GPIO_IsInputPinSet))
-
[Called By]
btn_inspection (Thumb, 64 bytes, Stack size 16 bytes, app_flow.o(i.btn_inspection))
-
[Stack]
business_inspection (Thumb, 70 bytes, Stack size 16 bytes, app_flow.o(i.business_inspection))
-
[Stack]
current_inspection (Thumb, 162 bytes, Stack size 8 bytes, app_flow.o(i.current_inspection))
-
[Stack]
icon_inspection (Thumb, 82 bytes, Stack size 16 bytes, app_flow.o(i.icon_inspection))
-
[Stack]
idle_inspection (Thumb, 74 bytes, Stack size 16 bytes, app_flow.o(i.idle_inspection))
-
[Stack]
pressure_inspection (Thumb, 4 bytes, Stack size 0 bytes, app_flow.o(i.pressure_inspection))
-
[Stack]
systom_inspection (Thumb, 120 bytes, Stack size 24 bytes, app_flow.o(i.systom_inspection))
-
[Stack]
temperature_inspection (Thumb, 40 bytes, Stack size 16 bytes, app_flow.o(i.temperature_inspection))
-
[Stack]
LL_GPIO_IsInputPinSet (Thumb, 14 bytes, Stack size 0 bytes, key.o(i.LL_GPIO_IsInputPinSet))
-
[Called By]
LL_GPIO_SetPinMode (Thumb, 38 bytes, Stack size 12 bytes, key.o(i.LL_GPIO_SetPinMode))
-
[Stack]
allow_condition (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.allow_condition))
-
[Called By]
key_1_double_click_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_1_double_click_handler))
-
[Address Reference Count : 1]
key_1_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_1_long_press_hold_handler))
-
[Address Reference Count : 1]
key_1_press_down_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_1_press_down_handler))
-
[Address Reference Count : 1]
key_1_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_1_up_handler))
-
[Address Reference Count : 1]
key_2_5_press_down (Thumb, 26 bytes, Stack size 8 bytes, key.o(i.key_2_5_press_down))
-
[Stack]
key_2_double_click_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_2_double_click_handler))
-
[Address Reference Count : 1]
key_2_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_2_long_press_hold_handler))
-
[Address Reference Count : 1]
key_2_press_down_handler (Thumb, 6 bytes, Stack size 0 bytes, key.o(i.key_2_press_down_handler))
-
[Stack]
key_2_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_2_up_handler))
-
[Address Reference Count : 1]
key_3_double_click_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_3_double_click_handler))
-
[Address Reference Count : 1]
key_3_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_3_long_press_hold_handler))
-
[Address Reference Count : 1]
key_3_press_down_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_3_press_down_handler))
-
[Address Reference Count : 1]
key_3_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_3_up_handler))
-
[Address Reference Count : 1]
key_4_double_click_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_4_double_click_handler))
-
[Address Reference Count : 1]
key_4_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_4_long_press_hold_handler))
-
[Address Reference Count : 1]
key_4_press_down_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_4_press_down_handler))
-
[Address Reference Count : 1]
key_4_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_4_up_handler))
-
[Address Reference Count : 1]
key_5_double_click_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_5_double_click_handler))
-
[Address Reference Count : 1]
key_5_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_5_long_press_hold_handler))
-
[Address Reference Count : 1]
key_5_press_down_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_5_press_down_handler))
-
[Address Reference Count : 1]
key_5_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_5_up_handler))
-
[Address Reference Count : 1]
key_6_double_click_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_6_double_click_handler))
-
[Address Reference Count : 1]
key_6_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_6_long_press_hold_handler))
-
[Address Reference Count : 1]
key_6_press_down_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_6_press_down_handler))
-
[Address Reference Count : 1]
key_6_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_6_up_handler))
-
[Address Reference Count : 1]
key_auto_long_press_hold_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_auto_long_press_hold_handler))
-
[Address Reference Count : 1]
key_auto_press_down_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_auto_press_down_handler))
-
[Address Reference Count : 1]
key_auto_up_handler (Thumb, 4 bytes, Stack size 0 bytes, key.o(i.key_auto_up_handler))
-
[Address Reference Count : 1]
read_button_gpio (Thumb, 154 bytes, Stack size 8 bytes, key.o(i.read_button_gpio))
-
[Stack]
_memset (Thumb, 14 bytes, Stack size 0 bytes, params.o(i._memset))
-
[Called By]
manual_test_mode (Thumb, 26 bytes, Stack size 8 bytes, mode.o(i.manual_test_mode))
-
[Stack]
mode_params_save_cb (Thumb, 12 bytes, Stack size 0 bytes, mode.o(i.mode_params_save_cb))
-
[Stack]
online_offline_mode_adjust (Thumb, 10 bytes, Stack size 0 bytes, mode.o(i.online_offline_mode_adjust))
-
[Stack]
set_manual_test (Thumb, 6 bytes, Stack size 0 bytes, mode.o(i.set_manual_test))
-
[Called By]
travel_update_hd (Thumb, 40 bytes, Stack size 8 bytes, mode.o(i.travel_update_hd))
-
[Stack]
wait_mode_adjust (Thumb, 10 bytes, Stack size 0 bytes, mode.o(i.wait_mode_adjust))
-
[Stack]
LL_GPIO_SetPinMode (Thumb, 38 bytes, Stack size 12 bytes, pdctrl.o(i.LL_GPIO_SetPinMode))
-
[Stack]
calculate_pwm_freq (Thumb, 66 bytes, Stack size 24 bytes, pdctrl.o(i.calculate_pwm_freq))
-
[Stack]
dac_dinit (Thumb, 22 bytes, Stack size 0 bytes, pdctrl.o(i.dac_dinit))
-
[Stack]
dac_init (Thumb, 34 bytes, Stack size 8 bytes, pdctrl.o(i.dac_init))
-
[Stack]
pwm_dinit (Thumb, 30 bytes, Stack size 0 bytes, pdctrl.o(i.pwm_dinit))
-
[Stack]
pwm_init (Thumb, 50 bytes, Stack size 8 bytes, pdctrl.o(i.pwm_init))
-
[Stack]
pwmp_dinit (Thumb, 30 bytes, Stack size 0 bytes, pdctrl.o(i.pwmp_dinit))
-
[Stack]
pwmp_init (Thumb, 42 bytes, Stack size 8 bytes, pdctrl.o(i.pwmp_init))
-
[Stack]
_mstrlen (Thumb, 16 bytes, Stack size 0 bytes, at_hc24.o(i._mstrlen))
-
[Called By]
at_cmd_name (Thumb, 34 bytes, Stack size 4 bytes, at_hc24.o(i.at_cmd_name))
-
[Stack]
at_cmd_test (Thumb, 14 bytes, Stack size 0 bytes, at_hc24.o(i.at_cmd_test))
-
[Called By]
LL_GPIO_SetPinMode (Thumb, 38 bytes, Stack size 12 bytes, mode_pwm.o(i.LL_GPIO_SetPinMode))
-
[Stack]
_memset (Thumb, 14 bytes, Stack size 0 bytes, mode_pwmp.o(i._memset))
-
[Called By]
pwmp_public_params_update (Thumb, 84 bytes, Stack size 0 bytes, mode_pwmp.o(i.pwmp_public_params_update))
-
[Called By]
fal_execution_get (Thumb, 40 bytes, Stack size 0 bytes, fal_execution.o(i.fal_execution_get))
-
[Called By]
fal_execution_set_cmac (Thumb, 102 bytes, Stack size 320 bytes, fal_execution.o(i.fal_execution_set_cmac))
-
[Stack]
fal_execution_set_crc (Thumb, 20 bytes, Stack size 8 bytes, fal_execution.o(i.fal_execution_set_crc))
-
[Stack]
get_time (Thumb, 92 bytes, Stack size 24 bytes, fal_execution.o(i.get_time))
-
[Stack]
execute_dac_plan1 (Thumb, 524 bytes, Stack size 40 bytes, execute_hd.o(i.execute_dac_plan1))
-
[Stack]
execute_dac_plan2 (Thumb, 4 bytes, Stack size 0 bytes, execute_hd.o(i.execute_dac_plan2))
-
[Called By]
execute_dac_plan3 (Thumb, 4 bytes, Stack size 0 bytes, execute_hd.o(i.execute_dac_plan3))
-
[Called By]
execute_dac_plan4 (Thumb, 4 bytes, Stack size 0 bytes, execute_hd.o(i.execute_dac_plan4))
-
[Called By]
_memset (Thumb, 14 bytes, Stack size 0 bytes, autotune_hd.o(i._memset))
-
[Called By]
get_time_tangent (Thumb, 22 bytes, Stack size 8 bytes, autotune_hd.o(i.get_time_tangent))
-
[Stack]
pid_autotune_way_set (Thumb, 8 bytes, Stack size 0 bytes, autotune_hd.o(i.pid_autotune_way_set))
-
[Called By]
pwmp_adjust_PID_tuning (Thumb, 290 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_PID_tuning))
-
[Stack]
pwmp_adjust_accurate_position0 (Thumb, 202 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_accurate_position0))
-
[Stack]
pwmp_adjust_accurate_position100 (Thumb, 246 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_accurate_position100))
-
[Stack]
pwmp_adjust_bleeding (Thumb, 280 bytes, Stack size 32 bytes, autotune_hd.o(i.pwmp_adjust_bleeding))
-
[Stack]
pwmp_adjust_bleeding_position0 (Thumb, 268 bytes, Stack size 32 bytes, autotune_hd.o(i.pwmp_adjust_bleeding_position0))
-
[Stack]
pwmp_adjust_calculate (Thumb, 166 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_calculate))
-
[Stack]
pwmp_adjust_fail (Thumb, 10 bytes, Stack size 0 bytes, autotune_hd.o(i.pwmp_adjust_fail))
-
[Called By]
pwmp_adjust_idle (Thumb, 160 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_idle))
-
[Stack]
pwmp_adjust_pid_calculate (Thumb, 494 bytes, Stack size 48 bytes, autotune_hd.o(i.pwmp_adjust_pid_calculate))
-
[Stack]
pwmp_adjust_rough_position0 (Thumb, 318 bytes, Stack size 48 bytes, autotune_hd.o(i.pwmp_adjust_rough_position0))
-
[Stack]
pwmp_adjust_rough_position100 (Thumb, 174 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_rough_position100))
-
[Stack]
pwmp_adjust_save (Thumb, 28 bytes, Stack size 8 bytes, autotune_hd.o(i.pwmp_adjust_save))
-
[Stack]
pwmp_adjust_stop (Thumb, 46 bytes, Stack size 16 bytes, autotune_hd.o(i.pwmp_adjust_stop))
-
[Stack]
pwmp_adjust_valve_position_change (Thumb, 76 bytes, Stack size 24 bytes, autotune_hd.o(i.pwmp_adjust_valve_position_change))
-
[Stack]
set_step_signal (Thumb, 4 bytes, Stack size 0 bytes, autotune_hd.o(i.set_step_signal))
-
[Stack]
eeprom_m95_ready (Thumb, 48 bytes, Stack size 16 bytes, eeprom_m95.o(i.eeprom_m95_ready))
-
[Stack]
read_status (Thumb, 58 bytes, Stack size 24 bytes, eeprom_m95.o(i.read_status))
-
[Stack]
write_disable (Thumb, 46 bytes, Stack size 24 bytes, eeprom_m95.o(i.write_disable))
-
[Stack]
write_enable (Thumb, 46 bytes, Stack size 24 bytes, eeprom_m95.o(i.write_enable))
-
[Stack]
LL_GPIO_SetPinMode (Thumb, 38 bytes, Stack size 12 bytes, eeprom_fm24.o(i.LL_GPIO_SetPinMode))
-
[Stack]
eeprom_fm24_dma_rx_cb (Thumb, 80 bytes, Stack size 8 bytes, eeprom_fm24.o(i.eeprom_fm24_dma_rx_cb))
-
[Stack]
eeprom_fm24_dma_tx_cb (Thumb, 80 bytes, Stack size 8 bytes, eeprom_fm24.o(i.eeprom_fm24_dma_tx_cb))
-
[Stack]
rtc_check_vlf (Thumb, 32 bytes, Stack size 8 bytes, rtc_rx8010.o(i.rtc_check_vlf))
-
[Stack]
rtc_clock_reginit (Thumb, 70 bytes, Stack size 8 bytes, rtc_rx8010.o(i.rtc_clock_reginit))
-
[Stack]
rtc_dummy_read (Thumb, 58 bytes, Stack size 8 bytes, rtc_rx8010.o(i.rtc_dummy_read))
-
[Stack]
rtc_read_byte (Thumb, 124 bytes, Stack size 16 bytes, rtc_rx8010.o(i.rtc_read_byte))
-
[Stack]
rtc_read_bytes (Thumb, 160 bytes, Stack size 24 bytes, rtc_rx8010.o(i.rtc_read_bytes))
-
[Stack]
rtc_soft_reset (Thumb, 64 bytes, Stack size 8 bytes, rtc_rx8010.o(i.rtc_soft_reset))
-
[Stack]
rtc_wait_vlf_clear (Thumb, 42 bytes, Stack size 16 bytes, rtc_rx8010.o(i.rtc_wait_vlf_clear))
-
[Stack]
rtc_write_byte (Thumb, 124 bytes, Stack size 24 bytes, rtc_rx8010.o(i.rtc_write_byte))
-
[Stack]
rtc_write_bytes (Thumb, 138 bytes, Stack size 32 bytes, rtc_rx8010.o(i.rtc_write_bytes))
-
[Stack]
ntc_lookup (Thumb, 62 bytes, Stack size 12 bytes, ntc_3950.o(i.ntc_lookup))
-
[Stack]
LL_GPIO_SetPinMode (Thumb, 38 bytes, Stack size 12 bytes, leds.o(i.LL_GPIO_SetPinMode))
-
[Stack]
LL_ADC_DMA_GetRegAddr (Thumb, 12 bytes, Stack size 0 bytes, adcs.o(i.LL_ADC_DMA_GetRegAddr))
-
[Called By]
LL_DMA_EnableChannel (Thumb, 14 bytes, Stack size 0 bytes, adcs.o(i.LL_DMA_EnableChannel))
-
[Called By]
LL_DMA_SetDataLength (Thumb, 18 bytes, Stack size 0 bytes, adcs.o(i.LL_DMA_SetDataLength))
-
[Called By]
_read (Thumb, 26 bytes, Stack size 16 bytes, gpios.o(i._read))
-
[Stack]
_reset (Thumb, 14 bytes, Stack size 16 bytes, gpios.o(i._reset))
-
[Stack]
_set (Thumb, 14 bytes, Stack size 16 bytes, gpios.o(i._set))
-
[Stack]
_toggle (Thumb, 26 bytes, Stack size 16 bytes, gpios.o(i._toggle))
-
[Stack]
_dma_enable (Thumb, 144 bytes, Stack size 32 bytes, spis.o(i._dma_enable))
-
[Stack]
_hardware_enable (Thumb, 54 bytes, Stack size 16 bytes, spis.o(i._hardware_enable))
-
[Stack]
_read_drdy (Thumb, 36 bytes, Stack size 16 bytes, spis.o(i._read_drdy))
-
[Stack]
_read_regs (Thumb, 106 bytes, Stack size 24 bytes, spis.o(i._read_regs))
-
[Stack]
_spi_dma_callback (Thumb, 44 bytes, Stack size 8 bytes, spis.o(i._spi_dma_callback))
-
[Stack]
_spi_dma_send (Thumb, 96 bytes, Stack size 16 bytes, spis.o(i._spi_dma_send))
-
[Stack]
_spi_read_reg (Thumb, 58 bytes, Stack size 16 bytes, spis.o(i._spi_read_reg))
-
[Stack]
_spi_write_cmd (Thumb, 86 bytes, Stack size 32 bytes, spis.o(i._spi_write_cmd))
-
[Stack]
_spi_write_data (Thumb, 106 bytes, Stack size 32 bytes, spis.o(i._spi_write_data))
-
[Stack]
_spi_write_reg (Thumb, 58 bytes, Stack size 16 bytes, spis.o(i._spi_write_reg))
-
[Stack]
_write_regs (Thumb, 102 bytes, Stack size 24 bytes, spis.o(i._write_regs))
-
[Stack]
spi_cs_high (Thumb, 40 bytes, Stack size 16 bytes, spis.o(i.spi_cs_high))
-
[Stack]
spi_cs_low (Thumb, 40 bytes, Stack size 16 bytes, spis.o(i.spi_cs_low))
-
[Stack]
spi_delay (Thumb, 36 bytes, Stack size 8 bytes, spis.o(i.spi_delay))
-
[Stack]
spi_read_write_byte (Thumb, 318 bytes, Stack size 40 bytes, spis.o(i.spi_read_write_byte))
-
[Stack]
LL_DMA_DisableChannel (Thumb, 14 bytes, Stack size 0 bytes, uarts.o(i.LL_DMA_DisableChannel))
-
[Called By]
LL_DMA_EnableChannel (Thumb, 14 bytes, Stack size 0 bytes, uarts.o(i.LL_DMA_EnableChannel))
-
[Called By]
LL_DMA_EnableIT_TC (Thumb, 14 bytes, Stack size 0 bytes, uarts.o(i.LL_DMA_EnableIT_TC))
-
[Called By]
LL_DMA_SetDataLength (Thumb, 18 bytes, Stack size 0 bytes, uarts.o(i.LL_DMA_SetDataLength))
-
[Called By]
LL_USART_DMA_GetRegAddr (Thumb, 12 bytes, Stack size 0 bytes, uarts.o(i.LL_USART_DMA_GetRegAddr))
-
[Called By]
LL_DMA_ConfigAddresses (Thumb, 34 bytes, Stack size 20 bytes, i2cs.o(i.LL_DMA_ConfigAddresses))
-
[Stack]
LL_DMA_ConfigTransfer (Thumb, 20 bytes, Stack size 8 bytes, i2cs.o(i.LL_DMA_ConfigTransfer))
-
[Stack]
LL_DMA_DisableChannel (Thumb, 14 bytes, Stack size 0 bytes, i2cs.o(i.LL_DMA_DisableChannel))
-
[Called By]
LL_DMA_EnableChannel (Thumb, 14 bytes, Stack size 0 bytes, i2cs.o(i.LL_DMA_EnableChannel))
-
[Called By]
LL_DMA_EnableIT_TC (Thumb, 14 bytes, Stack size 0 bytes, i2cs.o(i.LL_DMA_EnableIT_TC))
-
[Called By]
LL_DMA_EnableIT_TE (Thumb, 14 bytes, Stack size 0 bytes, i2cs.o(i.LL_DMA_EnableIT_TE))
-
[Called By]
LL_DMA_GetDataTransferDirection (Thumb, 14 bytes, Stack size 0 bytes, i2cs.o(i.LL_DMA_GetDataTransferDirection))
-
[Called By]
LL_DMA_SetDataLength (Thumb, 18 bytes, Stack size 0 bytes, i2cs.o(i.LL_DMA_SetDataLength))
-
[Called By]
LL_DMA_SetPeriphRequest (Thumb, 30 bytes, Stack size 8 bytes, i2cs.o(i.LL_DMA_SetPeriphRequest))
-
[Stack]
LL_I2C_DMA_GetRegAddr (Thumb, 12 bytes, Stack size 0 bytes, i2cs.o(i.LL_I2C_DMA_GetRegAddr))
-
[Called By]
LL_I2C_HandleTransfer (Thumb, 46 bytes, Stack size 20 bytes, i2cs.o(i.LL_I2C_HandleTransfer))
-
[Stack]
_malloc (Thumb, 8 bytes, Stack size 0 bytes, i2cs.o(i._malloc))
-
[Stack]
_read_byte (Thumb, 324 bytes, Stack size 40 bytes, i2cs.o(i._read_byte))
-
[Stack]
_read_mem_dma (Thumb, 352 bytes, Stack size 40 bytes, i2cs.o(i._read_mem_dma))
-
[Stack]
_start (Thumb, 114 bytes, Stack size 32 bytes, i2cs.o(i._start))
-
[Stack]
_stop (Thumb, 108 bytes, Stack size 32 bytes, i2cs.o(i._stop))
-
[Stack]
_wait_ack (Thumb, 142 bytes, Stack size 32 bytes, i2cs.o(i._wait_ack))
-
[Stack]
_write_byte (Thumb, 174 bytes, Stack size 32 bytes, i2cs.o(i._write_byte))
-
[Stack]
_write_mem_dma (Thumb, 244 bytes, Stack size 40 bytes, i2cs.o(i._write_mem_dma))
-
[Stack]
_write_word (Thumb, 38 bytes, Stack size 16 bytes, i2cs.o(i._write_word))
-
[Stack]
delay (Thumb, 36 bytes, Stack size 8 bytes, i2cs.o(i.delay))
-
[Stack]
i2c_reset (Thumb, 18 bytes, Stack size 0 bytes, i2cs.o(i.i2c_reset))
-
[Called By]
memcpyL (Thumb, 18 bytes, Stack size 0 bytes, i2cs.o(i.memcpyL))
-
[Called By]
_memset (Thumb, 14 bytes, Stack size 0 bytes, lib.o(i._memset))
-
[Called By]
_memset (Thumb, 14 bytes, Stack size 0 bytes, cmac.o(i._memset))
-
[Called By]
memcpyL (Thumb, 18 bytes, Stack size 0 bytes, cmac.o(i.memcpyL))
-
[Called By]
add_round_key (Thumb, 4 bytes, Stack size 0 bytes, aes.o(i.add_round_key))
-
[Calls]
copy_and_key (Thumb, 132 bytes, Stack size 8 bytes, aes.o(i.copy_and_key))
-
[Stack]
copy_block (Thumb, 66 bytes, Stack size 0 bytes, aes.o(i.copy_block))
-
[Called By]
copy_block_nn (Thumb, 18 bytes, Stack size 0 bytes, aes.o(i.copy_block_nn))
-
[Called By]
mix_sub_columns (Thumb, 536 bytes, Stack size 32 bytes, aes.o(i.mix_sub_columns))
-
[Stack]
shift_sub_rows (Thumb, 100 bytes, Stack size 0 bytes, aes.o(i.shift_sub_rows))
-
[Called By]
xor_block (Thumb, 130 bytes, Stack size 0 bytes, aes.o(i.xor_block))
-
[Called By]
_fdb_kv_load (Thumb, 130 bytes, Stack size 152 bytes, fdb_kvdb.o(i._fdb_kv_load))
-
[Stack]
align_write (Thumb, 42 bytes, Stack size 32 bytes, fdb_kvdb.o(i.align_write))
-
[Stack]
alloc_kv (Thumb, 132 bytes, Stack size 64 bytes, fdb_kvdb.o(i.alloc_kv))
-
[Stack]
alloc_kv_cb (Thumb, 48 bytes, Stack size 0 bytes, fdb_kvdb.o(i.alloc_kv_cb))
-
[Address Reference Count : 1]
check_and_recovery_gc_cb (Thumb, 32 bytes, Stack size 8 bytes, fdb_kvdb.o(i.check_and_recovery_gc_cb))
-
[Stack]
check_and_recovery_kv_cb (Thumb, 84 bytes, Stack size 24 bytes, fdb_kvdb.o(i.check_and_recovery_kv_cb))
-
[Stack]
check_oldest_addr_cb (Thumb, 28 bytes, Stack size 0 bytes, fdb_kvdb.o(i.check_oldest_addr_cb))
-
[Address Reference Count : 1]
check_sec_hdr_cb (Thumb, 40 bytes, Stack size 8 bytes, fdb_kvdb.o(i.check_sec_hdr_cb))
-
[Stack]
create_kv_blob (Thumb, 376 bytes, Stack size 72 bytes, fdb_kvdb.o(i.create_kv_blob))
-
[Stack]
del_kv (Thumb, 242 bytes, Stack size 136 bytes, fdb_kvdb.o(i.del_kv))
-
[Stack]
do_gc (Thumb, 154 bytes, Stack size 120 bytes, fdb_kvdb.o(i.do_gc))
-
[Stack]
find_kv (Thumb, 78 bytes, Stack size 24 bytes, fdb_kvdb.o(i.find_kv))
-
[Stack]
find_kv_cb (Thumb, 60 bytes, Stack size 16 bytes, fdb_kvdb.o(i.find_kv_cb))
-
[Stack]
find_kv_no_cache (Thumb, 30 bytes, Stack size 24 bytes, fdb_kvdb.o(i.find_kv_no_cache))
-
[Stack]
find_next_kv_addr (Thumb, 154 bytes, Stack size 64 bytes, fdb_kvdb.o(i.find_next_kv_addr))
-
[Stack]
format_sector (Thumb, 136 bytes, Stack size 64 bytes, fdb_kvdb.o(i.format_sector))
-
[Stack]
gc_check_cb (Thumb, 16 bytes, Stack size 0 bytes, fdb_kvdb.o(i.gc_check_cb))
-
[Address Reference Count : 1]
gc_collect (Thumb, 6 bytes, Stack size 0 bytes, fdb_kvdb.o(i.gc_collect))
-
[Stack]
gc_collect_by_free_size (Thumb, 72 bytes, Stack size 72 bytes, fdb_kvdb.o(i.gc_collect_by_free_size))
-
[Stack]
get_kv (Thumb, 74 bytes, Stack size 112 bytes, fdb_kvdb.o(i.get_kv))
-
[Stack]
get_kv_from_cache (Thumb, 142 bytes, Stack size 104 bytes, fdb_kvdb.o(i.get_kv_from_cache))
-
[Stack]
get_next_kv_addr (Thumb, 96 bytes, Stack size 24 bytes, fdb_kvdb.o(i.get_next_kv_addr))
-
[Stack]
get_next_sector_addr (Thumb, 38 bytes, Stack size 12 bytes, fdb_kvdb.o(i.get_next_sector_addr))
-
[Stack]
get_sector_from_cache (Thumb, 42 bytes, Stack size 0 bytes, fdb_kvdb.o(i.get_sector_from_cache))
-
[Called By]
kv_auto_update (Thumb, 146 bytes, Stack size 40 bytes, fdb_kvdb.o(i.kv_auto_update))
-
[Stack]
kv_iterator (Thumb, 114 bytes, Stack size 56 bytes, fdb_kvdb.o(i.kv_iterator))
-
[Stack]
move_kv (Thumb, 282 bytes, Stack size 224 bytes, fdb_kvdb.o(i.move_kv))
-
[Stack]
new_kv (Thumb, 62 bytes, Stack size 24 bytes, fdb_kvdb.o(i.new_kv))
-
[Stack]
new_kv_ex (Thumb, 8 bytes, Stack size 0 bytes, fdb_kvdb.o(i.new_kv_ex))
-
[Stack]
read_kv (Thumb, 288 bytes, Stack size 112 bytes, fdb_kvdb.o(i.read_kv))
-
[Stack]
read_sector_info (Thumb, 346 bytes, Stack size 136 bytes, fdb_kvdb.o(i.read_sector_info))
-
[Stack]
sector_iterator (Thumb, 100 bytes, Stack size 40 bytes, fdb_kvdb.o(i.sector_iterator))
-
[Stack]
sector_statistics_cb (Thumb, 42 bytes, Stack size 8 bytes, fdb_kvdb.o(i.sector_statistics_cb))
-
[Stack]
set_kv (Thumb, 172 bytes, Stack size 40 bytes, fdb_kvdb.o(i.set_kv))
-
[Stack]
update_kv_cache (Thumb, 178 bytes, Stack size 24 bytes, fdb_kvdb.o(i.update_kv_cache))
-
[Stack]
update_sec_status (Thumb, 118 bytes, Stack size 40 bytes, fdb_kvdb.o(i.update_sec_status))
-
[Stack]
update_sector_cache (Thumb, 110 bytes, Stack size 8 bytes, fdb_kvdb.o(i.update_sector_cache))
-
[Stack]
update_sector_empty_addr_cache (Thumb, 30 bytes, Stack size 16 bytes, fdb_kvdb.o(i.update_sector_empty_addr_cache))
-
[Stack]
update_sector_status_store_cache (Thumb, 16 bytes, Stack size 8 bytes, fdb_kvdb.o(i.update_sector_status_store_cache))
-
[Stack]
write_kv_hdr (Thumb, 52 bytes, Stack size 32 bytes, fdb_kvdb.o(i.write_kv_hdr))
-
[Stack]
check_sec_hdr_cb (Thumb, 92 bytes, Stack size 8 bytes, fdb_tsdb.o(i.check_sec_hdr_cb))
-
[Stack]
format_all_cb (Thumb, 16 bytes, Stack size 8 bytes, fdb_tsdb.o(i.format_all_cb))
-
[Stack]
format_sector (Thumb, 80 bytes, Stack size 64 bytes, fdb_tsdb.o(i.format_sector))
-
[Stack]
get_next_sector_addr (Thumb, 30 bytes, Stack size 8 bytes, fdb_tsdb.o(i.get_next_sector_addr))
-
[Stack]
read_sector_info (Thumb, 252 bytes, Stack size 88 bytes, fdb_tsdb.o(i.read_sector_info))
-
[Stack]
read_tsl (Thumb, 70 bytes, Stack size 32 bytes, fdb_tsdb.o(i.read_tsl))
-
[Stack]
sector_iterator (Thumb, 100 bytes, Stack size 40 bytes, fdb_tsdb.o(i.sector_iterator))
-
[Stack]
tsl_format_all (Thumb, 54 bytes, Stack size 64 bytes, fdb_tsdb.o(i.tsl_format_all))
-
[Stack]
erase (Thumb, 6 bytes, Stack size 0 bytes, fal_eeprom95_port.o(i.erase))
-
[Address Reference Count : 1]
init (Thumb, 4 bytes, Stack size 0 bytes, fal_eeprom95_port.o(i.init))
-
[Address Reference Count : 1]
read1 (Thumb, 26 bytes, Stack size 16 bytes, fal_eeprom95_port.o(i.read1))
-
[Stack]
read2 (Thumb, 26 bytes, Stack size 16 bytes, fal_eeprom95_port.o(i.read2))
-
[Stack]
write1 (Thumb, 26 bytes, Stack size 16 bytes, fal_eeprom95_port.o(i.write1))
-
[Stack]
write2 (Thumb, 26 bytes, Stack size 16 bytes, fal_eeprom95_port.o(i.write2))
-
[Stack]
erase (Thumb, 4 bytes, Stack size 0 bytes, fal_eeprom24_port.o(i.erase))
-
[Address Reference Count : 1]
init (Thumb, 4 bytes, Stack size 0 bytes, fal_eeprom24_port.o(i.init))
-
[Address Reference Count : 1]
read (Thumb, 28 bytes, Stack size 8 bytes, fal_eeprom24_port.o(i.read))
-
[Stack]
write (Thumb, 20 bytes, Stack size 8 bytes, fal_eeprom24_port.o(i.write))
-
[Stack]
check_and_update_part_cache (Thumb, 64 bytes, Stack size 24 bytes, fal_partition.o(i.check_and_update_part_cache))
-
[Stack]
flash_device_find_by_part (Thumb, 16 bytes, Stack size 0 bytes, fal_partition.o(i.flash_device_find_by_part))
-
[Called By]
_PID_position (Thumb, 380 bytes, Stack size 40 bytes, pid_position.o(i._PID_position))
-
[Stack]
_set_ctrl_prm_position (Thumb, 58 bytes, Stack size 20 bytes, pid_position.o(i._set_ctrl_prm_position))
-
[Stack]
_set_out_prm_position (Thumb, 8 bytes, Stack size 0 bytes, pid_position.o(i._set_out_prm_position))
-
[Address Reference Count : 1]
_fp_digits (Thumb, 334 bytes, Stack size 56 bytes, printfa.o(i._fp_digits), UNUSED)
-
[Calls]
_printf_core (Thumb, 1744 bytes, Stack size 136 bytes, printfa.o(i._printf_core), UNUSED)
-
[Calls]
_printf_post_padding (Thumb, 36 bytes, Stack size 24 bytes, printfa.o(i._printf_post_padding), UNUSED)
-
[Called By]
_printf_pre_padding (Thumb, 46 bytes, Stack size 24 bytes, printfa.o(i._printf_pre_padding), UNUSED)
-
[Called By]
_sputc (Thumb, 10 bytes, Stack size 0 bytes, printfa.o(i._sputc))
-
[Called By]
-
*/
-void set_pwm_calib_current(void)
+void set_pwm_calib_current()
{
float32 mA4 = 400;
float32 mA20 = 2000;
@@ -421,7 +604,7 @@ void set_pwm_calib_current(void)
*/
void set_loop_4ma(void)
{
- board_cache[BOARD_CACHE_1] = adc_get_result_median(ADC_LOOP_CHANNEL); // 获取4mA输入时adc值
+ board_cache[BOARD_CACHE_1] = adc_result_average(ADCS_1, ADC_LOOP_CHANNEL); // 获取4mA输入时adc值
}
/**
@@ -435,7 +618,7 @@ void set_loop_20ma(void)
uint16_t ma = 0, adc = 0;
float32 f;
// 获取20mA输入时电压adc值
- board_cache[BOARD_CACHE_2] = adc_get_result_median(ADC_LOOP_CHANNEL);
+ board_cache[BOARD_CACHE_2] = adc_result_average(ADCS_1, ADC_LOOP_CHANNEL);
// 计算校准参数
ma = MA20 - MA4;
adc = board_cache[BOARD_CACHE_2] - board_cache[BOARD_CACHE_1];
@@ -452,7 +635,7 @@ void set_loop_20ma(void)
*/
void set_200kpa(void)
{
- board_cache[BOARD_CACHE_1] = adc_get_result_median(ADC_BP_CHANNEL); // 获取200kPa时adc值
+ board_cache[BOARD_CACHE_1] = adc_result_average(ADCS_1, ADC_BP_CHANNEL); // 获取200kPa时adc值
}
/**
@@ -466,21 +649,46 @@ void set_400kpa(void)
uint16_t ma = 0, adc = 0;
float32 f;
// 获取400kPa时adc值
- board_cache[BOARD_CACHE_2] = adc_get_result_median(ADC_BP_CHANNEL);
+ board_cache[BOARD_CACHE_2] = adc_result_average(ADCS_1, ADC_BP_CHANNEL);
// 计算校准参数
ma = PRESSURE_400_KPA - PRESSURE_200_KPA;
adc = board_cache[BOARD_CACHE_2] - board_cache[BOARD_CACHE_1];
f = ma;
f = f / adc;
- calib_param[CALIBPARA_BP][0] = f;
+ calib_param[CALIBPARA_PS][0] = f;
f = f * board_cache[BOARD_CACHE_2];
- calib_param[CALIBPARA_BP][1] = PRESSURE_400_KPA - f;
+ calib_param[CALIBPARA_PS][1] = PRESSURE_400_KPA - f;
- calib_param[CALIBPARA_PA][0] = calib_param[CALIBPARA_BP][0];
- calib_param[CALIBPARA_PA][1] = calib_param[CALIBPARA_BP][1];
+ calib_param[CALIBPARA_PA][0] = calib_param[CALIBPARA_PS][0];
+ calib_param[CALIBPARA_PA][1] = calib_param[CALIBPARA_PS][1];
- calib_param[CALIBPARA_PB][0] = calib_param[CALIBPARA_BP][0];
- calib_param[CALIBPARA_PB][1] = calib_param[CALIBPARA_BP][1];
+ calib_param[CALIBPARA_PB][0] = calib_param[CALIBPARA_PS][0];
+ calib_param[CALIBPARA_PB][1] = calib_param[CALIBPARA_PS][1];
+}
+
+/**
+ * @brief 记录输出4mA时的PWM值
+ * @return {*}
+ */
+void set_output_4ma_pwm(uint16_t value)
+{
+ board_cache[BOARD_CACHE_1] = value;
+}
+
+/**
+ * @brief 记录输出20mA时的PWM值
+ * @return {*}
+ */
+void set_output_20ma_pwm(uint16_t value)
+{
+ board_cache[BOARD_CACHE_2] = value;
+ // 计算校准参数
+ float32 mA4 = 400;
+ float32 mA20 = 2000;
+ float32 TDuty4 = board_cache[BOARD_CACHE_1];
+ float32 TDuty20 = board_cache[BOARD_CACHE_2];
+ calib_param[CALIBPARA_VIP][0] = (TDuty20 - TDuty4) / (mA20 - mA4);
+ calib_param[CALIBPARA_VIP][1] = TDuty20 - calib_param[CALIBPARA_VIP][0] * mA20;
}
/**
diff --git a/User/board/src/eeprom_fm24.c b/User/board/src/eeprom_fm24.c
index 67a1fb8..5d3ca8b 100644
--- a/User/board/src/eeprom_fm24.c
+++ b/User/board/src/eeprom_fm24.c
@@ -64,8 +64,6 @@ void eeprom_fm24_init(void)
void eeprom_fm24_enable(void)
{
LL_I2C_Enable(FM24_I2C);
- GPIO_SET_ANALOG(EEPROM_FM24_SDA_PORT, EEPROM_FM24_SDA_PIN);
- GPIO_SET_ANALOG(EEPROM_FM24_SCL_PORT, EEPROM_FM24_SCL_PIN);
}
/**
@@ -76,8 +74,6 @@ void eeprom_fm24_enable(void)
void eeprom_fm24_disable(void)
{
LL_I2C_Disable(FM24_I2C);
- GPIO_SET_ANALOG(EEPROM_FM24_SDA_PORT, EEPROM_FM24_SDA_PIN);
- GPIO_SET_ANALOG(EEPROM_FM24_SCL_PORT, EEPROM_FM24_SCL_PIN);
}
/**
@@ -169,11 +165,6 @@ void eeprom_fm24_test(void)
eeprom_fm24_write(test_address, buf, TEST_SIZE);
osel_memset(buf, 0, ARRAY_LEN(buf));
eeprom_fm24_read(test_address, buf, TEST_SIZE);
-
- buf[TEST_SIZE - 1] = 0xfc;
- eeprom_fm24_write(test_address, buf, TEST_SIZE);
- osel_memset(buf, 0, ARRAY_LEN(buf));
- eeprom_fm24_read(test_address, buf, TEST_SIZE);
__NOP();
}
diff --git a/User/board/src/eeprom_lc02b.c b/User/board/src/eeprom_lc02b.c
index e2a6aa7..9307b82 100644
--- a/User/board/src/eeprom_lc02b.c
+++ b/User/board/src/eeprom_lc02b.c
@@ -11,8 +11,6 @@
#define EEPROM_LC02B_SCL_PORT I2C2_SCL_GPIO_Port
#define EEPROM_LC02B_SCL_PIN I2C2_SCL_Pin
-#define LOCK __enable_irq(); ///< 系统开全局中断
-#define UNLOCK __disable_irq(); ///< 系统关全局中断
static i2c_t *eeprom_24lc028bt_i2c;
@@ -59,8 +57,6 @@ void eeprom_lc02b_init(void)
*/
void eeprom_lc02b_write(uint32_t write_addr, uint8_t *data, uint16_t length)
{
- // 解锁
- UNLOCK
// 发送开始信号
eeprom_24lc028bt_i2c->interface.start(eeprom_24lc028bt_i2c);
// 发送写入地址命令
@@ -93,8 +89,6 @@ void eeprom_lc02b_write(uint32_t write_addr, uint8_t *data, uint16_t length)
}
// 写入完成,停止I2C总线
eeprom_24lc028bt_i2c->interface.stop(eeprom_24lc028bt_i2c);
- // 解锁
- LOCK
}
/**
diff --git a/User/board/src/eeprom_m95.c b/User/board/src/eeprom_m95.c
index 6f4cdf6..9b57b0a 100644
--- a/User/board/src/eeprom_m95.c
+++ b/User/board/src/eeprom_m95.c
@@ -13,6 +13,10 @@
#include "board.h"
#define M95_SPI SPI1
+#define M95_DMA DMA1
+#define M95_DMA_RX_CHANNEL LL_DMA_CHANNEL_2
+#define M95_DMA_TX_CHANNEL LL_DMA_CHANNEL_3
+
#define EEPROM_M95_1_CS_PORT EE1_CS_GPIO_Port
#define EEPROM_M95_1_CS_PIN EE1_CS_Pin
#define EEPROM_M95_2_CS_PORT EE2_CS_GPIO_Port
@@ -26,13 +30,26 @@
#define EEPROM_M95_SCK_PORT SPI_CLK_GPIO_Port
#define EEPROM_M95_SCK_PIN SPI_CLK_Pin
-static m95_number_t eeprom_m95s[M95_MAX];
+__IO m95_number_e current_m95_number;
+m95_number_t eeprom_m95s[M95_MAX];
static void write_enable(spi_t *eeprom_m95_spi); // 写使能
static void write_disable(spi_t *eeprom_m95_spi); // 写保护
static uint8_t read_status(spi_t *eeprom_m95_spi); // 读状态
static void eeprom_m95_ready(m95_number_e num); // 等待就绪
+// DMA TX回调函数
+static void dma_tx_cb(spi_t *handle)
+{
+ DMA_ClEAR_FLAG(handle->dma, 3, handle->tx_dma_ok);
+}
+
+// DMA RX回调函数
+static void dma_rx_cb(spi_t *handle)
+{
+ DMA_ClEAR_FLAG(handle->dma, 2, handle->rx_dma_ok);
+}
+
/**
* @brief 初始化EEPROM_M95eeprom_m95s
* @param {m95_number_e} num
@@ -42,6 +59,7 @@ static void eeprom_m95_ready(m95_number_e num); // 等待就绪
void eeprom_m95_init(m95_number_e num)
{
DBG_ASSERT(num < M95_MAX __DBG_LINE);
+ current_m95_number = num;
spi_gpio_group_t gpios;
spi_t *eeprom_m95_spi;
// 128 byte
@@ -73,6 +91,9 @@ void eeprom_m95_init(m95_number_e num)
DBG_ASSERT(FALSE __DBG_LINE);
}
+ eeprom_m95s[num].rxbuf = (uint8_t *)osel_mem_alloc(eeprom_m95s[num].page_size + (eeprom_m95s[num].address_bytes + 1) * 2);
+ eeprom_m95s[num].txbuf = (uint8_t *)osel_mem_alloc(eeprom_m95s[num].page_size + eeprom_m95s[num].address_bytes + 1);
+
gpios.mosi = gpio_create(SPI_MOSI_GPIO_Port, SPI_MOSI_Pin);
gpios.sck = gpio_create(SPI_CLK_GPIO_Port, SPI_CLK_Pin);
gpios.miso = gpio_create(SPI_MISO_GPIO_Port, SPI_MISO_Pin);
@@ -85,6 +106,7 @@ void eeprom_m95_init(m95_number_e num)
// 使能SPI
eeprom_m95_spi->interface.hardware_enable(eeprom_m95_spi, M95_SPI);
+ eeprom_m95_spi->interface.dma_enable(eeprom_m95_spi, M95_DMA, M95_DMA_RX_CHANNEL, dma_rx_cb, M95_DMA_TX_CHANNEL, dma_tx_cb);
eeprom_m95s[num].num = num;
eeprom_m95s[num].spi = eeprom_m95_spi;
// 这里需要设置,否则读出的数据不对
@@ -103,12 +125,7 @@ void eeprom_m95_init(m95_number_e num)
*/
void eeprom_m95_enable(void)
{
- /*LL_SPI_Enable(M95_SPI);
- GPIO_SET_ALTERNATE(SPI_MOSI_GPIO_Port, SPI_MOSI_Pin);
- GPIO_SET_ALTERNATE(SPI_MISO_GPIO_Port, SPI_MISO_Pin);
- GPIO_SET_ALTERNATE(SPI_CLK_GPIO_Port, SPI_CLK_Pin);
- GPIO_SET_OUTPUT(EEPROM_M95_1_CS_PORT, EEPROM_M95_1_CS_PIN);
- GPIO_SET_OUTPUT(EEPROM_M95_2_CS_PORT, EEPROM_M95_2_CS_PIN);*/
+ LL_SPI_Enable(M95_SPI);
}
/**
@@ -118,12 +135,7 @@ void eeprom_m95_enable(void)
*/
void eeprom_m95_disable(void)
{
- /* LL_SPI_Disable(M95_SPI);
- GPIO_SET_ANALOG(SPI_MOSI_GPIO_Port, SPI_MOSI_Pin);
- GPIO_SET_ANALOG(SPI_MISO_GPIO_Port, SPI_MISO_Pin);
- GPIO_SET_ANALOG(SPI_CLK_GPIO_Port, SPI_CLK_Pin);
- GPIO_SET_ANALOG(EEPROM_M95_1_CS_PORT, EEPROM_M95_1_CS_PIN);
- GPIO_SET_ANALOG(EEPROM_M95_2_CS_PORT, EEPROM_M95_2_CS_PIN);*/
+ LL_SPI_Disable(M95_SPI);
}
/**
@@ -136,6 +148,7 @@ void eeprom_m95_disable(void)
*/
void eeprom_m95_read(m95_number_e num, uint32_t read_addr, uint8_t *data, uint16_t length)
{
+ current_m95_number = num;
eeprom_m95_enable();
spi_t *eeprom_m95_spi = eeprom_m95s[num].spi; // 获取EEPROM模块的SPI配置
eeprom_m95_spi->gpios.cs->reset(*eeprom_m95_spi->gpios.cs); // 设置CS引脚为低电平,准备开始SPI通信
@@ -169,6 +182,7 @@ void eeprom_m95_read(m95_number_e num, uint32_t read_addr, uint8_t *data, uint16
*/
void eeprom_m95_write(m95_number_e num, uint32_t write_addr, uint8_t *data, uint16_t length)
{
+ current_m95_number = num;
eeprom_m95_enable();
spi_t *eeprom_m95_spi = eeprom_m95s[num].spi;
uint32_t page_size = eeprom_m95s[num].page_size;
@@ -219,7 +233,6 @@ void eeprom_m95_write(m95_number_e num, uint32_t write_addr, uint8_t *data, uint
eeprom_m95_spi->gpios.cs->set(*eeprom_m95_spi->gpios.cs); // 设置CS引脚为高电平,完成SPI通信
eeprom_m95_ready(num);
write_disable(eeprom_m95_spi);
-
eeprom_m95_disable();
}
@@ -231,20 +244,21 @@ void eeprom_m95_write(m95_number_e num, uint32_t write_addr, uint8_t *data, uint
*/
void eeprom_m95_test(m95_number_e num)
{
+#define TEST_LEN 10
DBG_ASSERT(eeprom_m95s[num].spi != NULL __DBG_LINE);
uint16_t test_address = 0;
- uint8_t buf[10];
- buf[0] = 0xD5;
+ uint8_t buf[TEST_LEN];
+ buf[0] = 0xA5;
buf[1] = 0xC8;
buf[2] = 0x00;
- buf[3] = 0x01;
+ buf[3] = 0x03;
buf[4] = num;
buf[5] = 0xaa;
buf[6] = 0xbb;
- eeprom_m95_write(num, test_address, buf, 10);
- delay_ms(10);
+ buf[TEST_LEN - 1] = 0xce;
+ eeprom_m95_write(num, test_address, buf, TEST_LEN);
osel_memset(buf, 0, ARRAY_LEN(buf));
- eeprom_m95_read(num, test_address, buf, 10);
+ eeprom_m95_read(num, test_address, buf, TEST_LEN);
__NOP();
}
diff --git a/User/board/src/leds.c b/User/board/src/leds.c
index 7998678..e3c9c08 100644
--- a/User/board/src/leds.c
+++ b/User/board/src/leds.c
@@ -103,26 +103,28 @@ void leds_off(leds_e io)
{
leds[(uint8_t)io]->set(*leds[(uint8_t)io]);
}
- switch (io)
- {
- case LEDS_1_RED:
- GPIO_SET_ANALOG(LED1_GPIO_Port, LED1_Pin);
- break;
- case LEDS_1_GREEN:
- GPIO_SET_ANALOG(LED2_GPIO_Port, LED2_Pin);
- break;
- case LEDS_1_YELLOW:
- GPIO_SET_ANALOG(LED3_GPIO_Port, LED3_Pin);
- break;
- case LEDS_2_ORANGE:
- GPIO_SET_ANALOG(LED4_GPIO_Port, LED4_Pin);
- break;
- case LEDS_2_BLUE:
- GPIO_SET_ANALOG(LED5_GPIO_Port, LED5_Pin);
- break;
- default:
- break;
- }
+
+ // 反初始化其他LED,这里暂时先不做处理,如果电流不够,可以考虑关闭其他LED
+ // switch (io)
+ // {
+ // case LEDS_1_RED:
+ // GPIO_SET_ANALOG(LED1_GPIO_Port, LED1_Pin);
+ // break;
+ // case LEDS_1_GREEN:
+ // GPIO_SET_ANALOG(LED2_GPIO_Port, LED2_Pin);
+ // break;
+ // case LEDS_1_YELLOW:
+ // GPIO_SET_ANALOG(LED3_GPIO_Port, LED3_Pin);
+ // break;
+ // case LEDS_2_ORANGE:
+ // GPIO_SET_ANALOG(LED4_GPIO_Port, LED4_Pin);
+ // break;
+ // case LEDS_2_BLUE:
+ // GPIO_SET_ANALOG(LED5_GPIO_Port, LED5_Pin);
+ // break;
+ // default:
+ // break;
+ // }
}
/**
diff --git a/User/entity.h b/User/entity.h
index c45521d..e624610 100644
--- a/User/entity.h
+++ b/User/entity.h
@@ -6,7 +6,6 @@
#include "pdctrl.h"
#include "mode.h"
-
// 硬件版本号 1个字节
#ifdef V4
#define HW_VER 0x04
@@ -19,64 +18,80 @@
// 固件版本号 1个字节
#define FW_VER 0x06
-// 是否运行蓝牙输出数据到VOFA上位机
-#define H24_BLE_OUTPUT_DBG TRUE
+#define HART_VERSION HART_PROTOCOL_VERSION_7 ///< HART协议版本号
+
+#define H24_BLE_OUTPUT_DBG TRUE // 是否运行蓝牙输出数据到VOFA上位机
// CPU基准电压
#define CPU_VREF 3.0f
// 输入电流小于3.8mA
#define INPUT_CURRENT_MIN 3.8f
-#define WAIT_COUNT_MAX 10
// 蓝牙工作电流
#define BLE_CURRENT_WORK 7.9f
// 气压表最大值
-#define BAROMETER_MAX 7
+#define BAROMETER_MAX 10
// LCD最低工作稳定-20℃
#define LCD_WORK_TEMP_MIN -20
-#define LOOP_CURRENT_MIN 4.0f ///< 输入电流最小值
-#define LOOP_CURRENT_MAX 20.0f ///< 输入电流最大值
+#define LOOP_CURRENT_MIN 4.0f ///< 输入电流最小值
+#define LOOP_CURRENT_MAX 20.0f ///< 输入电流最大值
+#define LOOP_CURRENT_WORK_MAX 12.0f ///< 工作输出最大电流下限
-#define ADC_TM_CYCLE 10U ///< ADC采样周期
-#define ADJUST_TM_CYCLE 10U ///< 标定周期
#define SELF_VCHART_LEN 17 ///< 自定义阀门特性长度
#define VALVE_SERIAL_NUM_LEN 16 ///< 阀门序列号长度
#define INST_SERIAL_NUM_LEN 16 ///< 定位器序列号长度
+#define DAC_OUT_MAX 4095 ///< DAC输出最大值
-// ADC通道定义
-#define ADC_LOOP_CHANNEL IN5 ///< 输入电流ADC通道
-#define ADC_PSB_CHANNEL IN6 ///< 阀位反馈ADC通道
-#define ADC_BP_CHANNEL IN7 ///< 压力传感器ADC通道
-#define ADC_IPSB_CHANNEL IN8 ///< 内部I/P位置电压(小回路)
-#define ADC_NTC_CHANNEL IN9 ///< 温度ADC电压
-#define ADC_VIP_CHANNEL IN11 ///< I/P输出ADC电压
-#define ADC_DCDC_CHANNEL IN12 ///< DCDC检测通道
-#define ADC_BPA_CHANNEL IN13 ///< A路压力
-#define ADC_BPB_CHANNEL IN14 ///< B路压力
-#define DAC_OUT_MAX 4095 ///< DAC输出最大值
+/**
+ * ADC通道定义: 主频4、分频系数16,根据公式 TCONV(转换时间) = (采样时间 + 12.5 个周期)/(主频/ADC分频系数) 计算每个通道单个采集时间
+ * ADC_LOOP_CHANNEL: 247.5+12.5=260个周期,260/(4/16)=1040us
+ * ADC_PSB_CHANNEL: 47.5+12.5=60个周期,60/(4/16)=240us
+ * ADC_BP_CHANNEL: 47.5+12.5=60个周期,60/(4/16)=240us
+ * ADC_IPSB_CHANNEL: 640.5+12.5=653个周期,653/(4/16)=2612us
+ * ADC_NTC_CHANNEL: 640.5+12.5=653个周期,653/(4/16)=2612us
+ * ADC_VIP_CHANNEL: 640.5+12.5=653个周期,653/(4/16)=2612us
+ * ADC_DCDC_CHANNEL: 640.5+12.5=653个周期,653/(4/16)=2612us
+ * ADC_BPA_CHANNEL: 640.5+12.5=653个周期,653/(4/16)=2612us
+ * ADC_BPB_CHANNEL: 640.5+12.5=653个周期,653/(4/16)=2612us
+ */
+typedef enum
+{
+ ADC_LOOP_CHANNEL = 0, ///< IN5 输入电流ADC通道
+ ADC_PSB_CHANNEL, ///< IN6 阀位反馈ADC通道
+ ADC_BP_CHANNEL, ///< IN7 压力传感器ADC通道
+ ADC_IPSB_CHANNEL, ///< IN8 内部I/P位置电压(小回路)
+ ADC_NTC_CHANNEL, ///< IN9 温度ADC电压
+ ADC_VIP_CHANNEL, ///< IN11 I/P输出ADC电压
+ ADC_DCDC_CHANNEL, ///< IN12 DCDC检测通道
+ ADC_BPA_CHANNEL, ///< IN13 A路压力
+ ADC_BPB_CHANNEL, ///< IN14 B路压力
+ ADC_INVREF_CHANNEL, ///< 内部参考电压
+ ADC1_MAX, ///< ADC1通道最大数量
+} adc1_channel_e;
+
+/**
+ * ADC2 :快速通道单采集
+ * ADC2_PSB_CHANNEL: 2.5+12.5=15个周期,15/(4/16)=60us
+ */
+typedef enum
+{
+ ADC2_PSB_CHANNEL = 0, ///< IN6 阀位反馈ADC通道
+ ADC2_MAX, ///< ADC2通道最大数量
+} adc2_channel_e;
// 校准参数信息
-#define CALIBPARA_LOOP 0 ///< 4~20mA采集校准参数
-#define CALIBPARA_PSB 1 ///< 位置反馈校准参数
-#define CALIBPARA_BP 2 ///< 气源压力校准参数
-#define CALIBPARA_PA 3 ///< A输出压力校准参数
-#define CALIBPARA_PB 4 ///< B输出压力校准参数
-#define CALIBPARA_IPSB 5 ///< I/P内反馈校准参数
-#define CALIBPARA_NTC 6 ///< NTC温度校准参数
-#define CALIBPARA_VIP 7 ///< 4~20mA输出校准参数
-#define CALIBPARA_DC 8 ///< 电压
-// 校准参数数量
-#define CALIBPARA_NUM (CALIBPARA_DC + 1)
-
-// M95_1 EEPROM地址定义
-#define EE_INITIAL_ADDRESS 0U // 参数储存起始地址
-#define EE_CRC_ADDRESS (EE_INITIAL_ADDRESS + 128) // CRC校验地址8个CRC, 前面预留128个字节
-#define EE_CALIBPARA_ADDRESS (EE_CRC_ADDRESS + 2 * CRC_NUM) // 校准参数储存地址,8个CRC
-#define EE_DEVICE_ADDRESS (EE_CALIBPARA_ADDRESS + 8 * CALIBPARA_NUM) // 设备参数储存地址
-#define EE_CONTROLLER_ALARM_ADDR (EE_DEVICE_ADDRESS + sizeof(uDeviceTypedef)) // 定位器内部报警设置
-#define EE_HART_DEVICE_VARIABLE_ADDR (EE_CONTROLLER_ALARM_ADDR + sizeof(uControllerAlarmDef)) // HART设备属性存储地址
-#define EE_HART_DEVICE_VARIABLE_USER_ADDR (EE_HART_DEVICE_VARIABLE_ADDR + sizeof(hart_storage_variable_t)) // HART设备用户自定义属性存储地址
+typedef enum
+{
+ CALIBPARA_LOOP = 0, ///< 4~20mA采集校准参数
+ CALIBPARA_PSB = 1, ///< 位置反馈校准参数
+ CALIBPARA_PS = 2, ///< 气源压力校准参数
+ CALIBPARA_PA = 3, ///< A输出压力校准参数
+ CALIBPARA_PB = 4, ///< B输出压力校准参数
+ CALIBPARA_IPSB = 5, ///< 小回路校准参数
+ CALIBPARA_VIP = 6, ///< 4~20mA输出校准参数
+ CALIBPARA_NUM = 7, ///< 校准参数数量
+} calibration_e;
// CRC预留数量
#define CRC_NUM 8 // CRC预留数量
@@ -93,18 +108,6 @@
#pragma pack(1) // 编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式
-/// 参数类型
-typedef enum
-{
- CALIBPARA_PARAM = 0, ///< 校准参数
- DEVICE_PARAM, ///< 设备参数
- HART_DEVICE_VARIABLE_PARAM, ///< HART设备属性
- HART_DEVICE_VARIABLE_USER_PARAM, ///< HART设备用户自定义属性
- RT_PARAM, ///< 实时参数
-
- WARNING_PARAM, ///< 报警参数
-} param_type_t;
-
/// 时间结构
typedef union
{
@@ -124,123 +127,64 @@ typedef union
typedef struct
{
// 版本号
-#define eVersion_EE_ADDR EE_DEVICE_ADDRESS
uint16_t eVersion;
-
// 显示方向 0/180
-#define eDispDir_EE_ADDR eVersion_EE_ADDR + 2
uint16_t eDispDir;
-
// 主屏显示方式
-#define MainDisp_EE_ADDR eDispDir_EE_ADDR + 2
uint16_t MainDisp;
-
// 显示语言
-#define eLanguage_EE_ADDR MainDisp_EE_ADDR + 2
uint16_t eLanguage;
-
- // 定位器Hart地址(作废)
-#define DeviceAddr_EE_ADDR eLanguage_EE_ADDR + 2
+ // 定位器Hart短地址
uint16_t DeviceAddr;
-
// 定位器工作模式
-#define WorkMode_EE_ADDR DeviceAddr_EE_ADDR + 2
uint16_t WorkMode;
-
// 行程类型, 直行程/角行程
-#define eTravelType_EE_ADDR WorkMode_EE_ADDR + 2
uint16_t eTravelType;
-
// 磁条规格
-#define MagnetIndex_EE_ADDR eTravelType_EE_ADDR + 2
uint16_t MagnetIndex;
-
// 行程范围选择
-#define TravelRangeIndex_EE_ADDR MagnetIndex_EE_ADDR + 2
uint16_t TravelRangeIndex;
-
// 自定义行程范围
-#define TravelRangeSelf_EE_ADDR TravelRangeIndex_EE_ADDR + 2
uint16_t TravelRangeSelf;
-
// 行程百分比显示方式
-#define eTravelDispMode_EE_ADDR TravelRangeSelf_EE_ADDR + 2
uint16_t eTravelDispMode;
-
// 行程起点和终点反馈电压
-#define TravelVol0_EE_ADDR eTravelDispMode_EE_ADDR + 2
uint16_t TravelVol0;
-
-#define TravelVol100_EE_ADDR TravelVol0_EE_ADDR + 2
uint16_t TravelVol100;
-
// 行程显示单位
-#define eTravelUnit_EE_ADDR TravelVol100_EE_ADDR + 2
uint16_t eTravelUnit;
-
// 阀门打开(上行)变化速率 (%/秒),如需在5秒钟左右移动100%行程,请将其设置为 20 [%/sec]
-#define TravelRateOpen_EE_ADDR eTravelUnit_EE_ADDR + 2
float32 TravelRateOpen;
-
// 阀门关闭(下行)变化速率 (%/秒),如需在5秒钟左右移动100%行程,请将其设置为 20 [%/sec]
-#define TravelRateClose_EE_ADDR TravelRateOpen_EE_ADDR + 4
float32 TravelRateClose;
-
// 行程偏差报警点 ±%
-#define TravelError_EE_ADDR TravelRateClose_EE_ADDR + 4
float32 TravelError;
-
// 行程偏差报警等待时间(秒)(偏差超出范围的持续时间上限)
-#define TravelErrorWaitTime_EE_ADDR TravelError_EE_ADDR + 4
uint16_t TravelErrorWaitTime;
-
// 死区(%),表示在目标位置附近设置的可允许偏差。若阀门填料的摩擦力较大,可相应调整并设置此数值,
// 以防止因摩擦导致循环受限。若死区设置为0.5%,则其对应范围为目标的±0.5%。
-#define TravelDead_EE_ADDR TravelErrorWaitTime_EE_ADDR + 2
float32 TravelDead; // 0.1~10.0%
-
// 死区报警上限
-#define TravelDeadUpper_EE_ADDR TravelDead_EE_ADDR + 4
float32 TravelDeadUpper;
-
// 死区更新等待时间(输入信号幅度大于当前的死区值时,阀门保持不动的时间上限,超过时间上限后更新当前死区值)
-#define TravelDeadUpperWaitTime_EE_ADDR TravelDeadUpper_EE_ADDR + 4
uint16_t TravelDeadUpperWaitTime;
-
// 累计行程上限
-#define TravelSumUpper_EE_ADDR TravelDeadUpperWaitTime_EE_ADDR + 2
uint32_t TravelSumUpper;
-
// 动作次数上限
-#define ActNumberUpper_EE_ADDR TravelSumUpper_EE_ADDR + 4
uint32_t ActNumberUpper;
-
// 高低位置报警线
-#define TravelUpperAlarm_EE_ADDR ActNumberUpper_EE_ADDR + 4
float32 TravelUpperAlarm;
-
-#define TravelLowerAlarm_EE_ADDR TravelUpperAlarm_EE_ADDR + 4
float32 TravelLowerAlarm;
-
// 开关1/2闭合触发位置 ( % of 行程, -25% ~ 125%)
-#define SWTriggerValue_EE_ADDR TravelLowerAlarm_EE_ADDR + 4
float32 SWTriggerValue[2];
-
// 开关1/2闭合触发条件:高于,低于,禁用
// 阀门开关触发逻辑
-#define eSWTriggerLogic_EE_ADDR SWTriggerValue_EE_ADDR + 8
uint16_t eSWTriggerLogic[2];
-
// 输入范围低4-19mA (2位小数,如 4mA = 400,20mA = 2000)
-#define InputIL_EE_ADDR eSWTriggerLogic_EE_ADDR + 4
float32 InputIL;
-
// 输入范围高5-20mA (2位小数,如 4mA = 400,20mA = 2000)
-#define InputIH_EE_ADDR InputIL_EE_ADDR + 4
float32 InputIH;
-
// 输入电流报警下限
-#define InputILA_EE_ADDR InputIH_EE_ADDR + 4
float32 InputILowAlarm;
/***************************************************************************************/
@@ -251,285 +195,152 @@ typedef struct
Mpa--0.XXXX Mpa, 1Kpa = 0.001Mpa
*/
// 压力单位
-#define ePressUnit_EE_ADDR InputILA_EE_ADDR + 4
uint16_t ePressUnit;
-
// 输入的额定气源压力
-#define SupplyPressure_EE_ADDR ePressUnit_EE_ADDR + 2
float32 SupplyPressure;
-
// 气源偏差范围±%
-#define SupplyPressureError_EE_ADDR SupplyPressure_EE_ADDR + 4
float32 SupplyPressureError;
-
// 报警等待时间(秒)(偏差超出范围的持续时间上限)
-#define SupplyPressureErrorWaitTime_EE_ADDR SupplyPressureError_EE_ADDR + 4
uint16_t SupplyPressureErrorWaitTime;
-
// 整定时,阀门0%--100%位置的气压值
-#define TravelPressureA0_EE_ADDR SupplyPressureErrorWaitTime_EE_ADDR + 2
float32 TravelPressureA0;
-#define TravelPressureA100_EE_ADDR TravelPressureA0_EE_ADDR + 4
float32 TravelPressureA100;
-#define TravelPressureB0_EE_ADDR TravelPressureA100_EE_ADDR + 4
float32 TravelPressureB0;
-#define TravelPressureB100_EE_ADDR TravelPressureB0_EE_ADDR + 4
float32 TravelPressureB100;
/***************************************************************************************/
// 阀门特性
-#define eValveCharacteristics_EE_ADDR TravelPressureB100_EE_ADDR + 4
uint16_t eValveCharacteristics;
-
// 自定义阀门特性
-#define SelfVChart_EE_ADDR eValveCharacteristics_EE_ADDR + 2
uint16_t SelfVChart[SELF_VCHART_LEN];
-
// 小信号切除
-#define SmallSignalCutEnable_EE_ADDR SelfVChart_EE_ADDR + 2 * 17
uint16_t SmallSignalCutEnable;
-
// 小信号上限
-#define SmallSignalUpper_EE_ADDR SmallSignalCutEnable_EE_ADDR + 2
float32 SmallSignalUpper;
-
// 小信号下限
-#define SmallSignalLower_EE_ADDR SmallSignalUpper_EE_ADDR + 4
float32 SmallSignalLower;
-
// 执行机构单/双作用
-#define eActuator_EE_ADDR SmallSignalLower_EE_ADDR + 4
uint16_t eActuator;
-
// 定位器(控制器)正/反作用
-#define eControllerAction_EE_ADDR eActuator_EE_ADDR + 2
uint16_t eControllerAction;
-
// 气开/气关设置(零控信号阀门状态, 0-关闭,其它打开)
-#define eAirAction_EE_ADDR eControllerAction_EE_ADDR + 2
uint16_t eAirAction;
-
// 增速器
-#define SpeedIncreaserEnable_EE_ADDR eAirAction_EE_ADDR + 2
uint16_t SpeedIncreaserEnable;
-
// 快排阀
-#define QuickExhaustValveEnable_EE_ADDR SpeedIncreaserEnable_EE_ADDR + 2
uint16_t QuickExhaustValveEnable;
-
// 整定时,阀门动作的所需要的上下限值
-#define DAC_Max_EE_ADDR QuickExhaustValveEnable_EE_ADDR + 2
uint16_t DAC_Max;
-
-#define DAC_Min_EE_ADDR DAC_Max_EE_ADDR + 2
uint16_t DAC_Min;
-
// 放大器报警设置:驱动信号下限,报警等待时间(控制UP或IP的驱动信号大于下限时,放大器输出压力保持不变的时间上限)
-#define DAC_AlarmWaitTimer_EE_ADDR DAC_Min_EE_ADDR + 2
uint16_t DAC_AlarmWaitTime;
-
// 阀门全开/全关时间
-#define AllOpenTime_EE_ADDR DAC_AlarmWaitTimer_EE_ADDR + 2
uint16_t AllOpenTime;
-
-#define AllCloseTime_EE_ADDR AllOpenTime_EE_ADDR + 2
uint16_t AllCloseTime;
// PID参数选择,1:自适应/2:自定义
-#define PIDIndex_EE_ADDR AllCloseTime_EE_ADDR + 2
uint16_t PIDIndex;
-
// 自适应PID参数
-#define APID_KP_EE_ADDR PIDIndex_EE_ADDR + 2
float32 APID_KP;
-
-#define APID_TI_EE_ADDR APID_KP_EE_ADDR + 4
float32 APID_TI;
-
-#define APID_TD_EE_ADDR APID_TI_EE_ADDR + 4
float32 APID_TD;
// 自定义PID参数
-#define SPID_KP_EE_ADDR APID_TD_EE_ADDR + 4
float32 SPID_KP;
-
-#define SPID_TI_EE_ADDR SPID_KP_EE_ADDR + 4
float32 SPID_TI;
-
-#define SPID_TD_EE_ADDR SPID_TI_EE_ADDR + 4
float32 SPID_TD;
// 积分使能
-#define IntegralEnable_EE_ADDR SPID_TD_EE_ADDR + 4
uint16_t IntegralEnable;
-
// 积分初始值
-#define IniIntegral_EE_ADDR IntegralEnable_EE_ADDR + 2
float32 IniIntegral;
-
// 积分工作区域(%)
-#define IntegralZone_EE_ADDR IniIntegral_EE_ADDR + 4
float32 IntegralZone; // 0.1~20.0%
-
// 报警处理方式
-#define eAlarmHandleMode_EE_ADDR IntegralZone_EE_ADDR + 4
uint16_t eAlarmHandleMode;
-
// 温度报警上限
-#define TemperatureUpperAlarm_EE_ADDR eAlarmHandleMode_EE_ADDR + 2
float32 TemperatureUpperAlarm;
-
// 温度报警下限
-#define TemperatureLowerAlarm_EE_ADDR TemperatureUpperAlarm_EE_ADDR + 4
float32 TemperatureLowerAlarm;
-
// 摩擦力
-#define Friction_EE_ADDR TemperatureLowerAlarm_EE_ADDR + 4
float32 Friction;
-
// 允许的摩擦力上限
-#define FrictionUpper_EE_ADDR Friction_EE_ADDR + 4
float32 FrictionUpper;
-
// 允许的摩擦力下限
-#define FrictionLower_EE_ADDR FrictionUpper_EE_ADDR + 4
float32 FrictionLower;
-
// 弹簧故障报警
// 标准弹性系数范围、弹簧提供的压力上下限允许的变化范围(根据始终点的输出气压判断)
-#define Elasticity_EE_ADDR FrictionLower_EE_ADDR + 4
float32 Elasticity;
-
// 允许的弹力范围上限
-#define ElasticityUpper_EE_ADDR Elasticity_EE_ADDR + 4
float32 ElasticityUpper;
-
// 允许的弹力范围下限
-#define ElasticityLower_EE_ADDR ElasticityUpper_EE_ADDR + 4
float32 ElasticityLower;
-
// 是否整定过 1:整定过 0:未整定
-#define TunedFlag_EE_ADDR ElasticityLower_EE_ADDR + 4
uint16_t TunedFlag;
-
// 记录存储间隔时间(秒)
-#define SaveRecordInterval_EE_ADDR TunedFlag_EE_ADDR + 2
uint16_t SaveRecordInterval;
-
// 开机控制方式
-#define ControlMode_EE_ADDR SaveRecordInterval_EE_ADDR + 2
uint16_t ControlMode;
-
// PWM电流标定4ma值
-#define CurrentCalibrationA_EE_ADDR ControlMode_EE_ADDR + 2
uint16_t CurrentCalibrationA;
-
// PWM电流标定20ma值
-#define CurrentCalibrationB_EE_ADDR CurrentCalibrationA_EE_ADDR + 2
uint16_t CurrentCalibrationB;
-
// 磁条接收的反馈电压由大变小 0 由小变大 1
-#define ProcessChange_Flag_EE_ADDR CurrentCalibrationB_EE_ADDR + 2
uint16_t ProcessChange_Flag;
-
// DAC中间值 用于刹车
-#define PosMidDac_Val_EE_ADDR ProcessChange_Flag_EE_ADDR + 2
uint16_t PosMidDac_Val;
-
// 小回路最小值
-#define MinorLoop0_Val_EE_ADDR PosMidDac_Val_EE_ADDR + 2
uint16_t MinorLoopVol0_Val;
-
// 小回路最大值
-#define MinorLoop100_Val_EE_ADDR MinorLoop0_Val_EE_ADDR + 2
uint16_t MinorLoopVol100_Val;
-
// 部分行程使能
-#define PartTravelEnable_EE_ADDR MinorLoop100_Val_EE_ADDR + 2
uint16_t PartTravelEnable;
-
-#define PartTravelMin_EE_ADDR PartTravelEnable_EE_ADDR + 2
float32 PartTravelMin;
-
-#define PartTravelMax_EE_ADDR PartTravelMin_EE_ADDR + 4
float32 PartTravelMax;
-
// 无线通讯使能
-#define WirelessComm_EE_ADDR PartTravelMax_EE_ADDR + 4
uint16_t WirelessCommEnable;
-
// PWM 4-20mA使能
-#define mAOutput_EE_ADDR WirelessComm_EE_ADDR + 2
uint16_t mAOutputEnable;
-
// 压力偏移量
-#define PressureOffset_EE_ADDR mAOutput_EE_ADDR + 2
float32 PressureOffset;
-
// 间隙控制范围 (%),当阀门的当前位置在基于最终目标位置的 GAP 参数设置范围(目标位置 ± GAP)内时,使用GAP PID参数
-#define TravelGap_EE_ADDR PressureOffset_EE_ADDR + 4
uint16_t TravelGap; // 0.1~20.0%
-
// TravelDAC_KVal 相差值
-#define TravelDAC_MaxKu_EE_ADDR TravelGap_EE_ADDR + 2
float32 TravelDAC_KVal_Up;
-
-#define TravelDAC_MaxKd_EE_ADDR TravelDAC_MaxKu_EE_ADDR + 4
float32 TravelDAC_KVal_Dn;
-
// 开机通电时间
-#define uAccumulatedTime_EE_ADDR TravelDAC_MaxKd_EE_ADDR + 4
uDateTime_TypeDef uAccumulatedTime;
-#define FM24WriteADDR_EE_ADDR uAccumulatedTime_EE_ADDR + 6
- uint32_t fm24BaseAddr;
-
-// 阀门序列号
-#define ValveSerialNum_EE_ADDR FM24WriteADDR_EE_ADDR + 4
+ // 阀门序列号
uint8_t ValveSerialNum[VALVE_SERIAL_NUM_LEN];
-
-// 仪器序列号
-#define InstSerialNum_EE_ADDR ValveSerialNum_EE_ADDR + VALVE_SERIAL_NUM_LEN
+ // 仪器序列号
uint8_t InstSerialNum[INST_SERIAL_NUM_LEN];
-
// 阀门类型
-#define ValveStyle_EE_ADDR InstSerialNum_EE_ADDR + INST_SERIAL_NUM_LEN
uint16_t ValveStyle;
-
// 阀门尺寸
-#define ValveSize_EE_ADDR ValveStyle_EE_ADDR + 2
uint16_t SpecValveSize;
-
// 阀门等级
-#define ValveClass_EE_ADDR ValveSize_EE_ADDR + 2
uint16_t SpecValveClass;
-
// 阀杆直径
-#define ValveStemDiameter_EE_ADDR ValveClass_EE_ADDR + 2
float32 SpecValveStemDiameter;
-
// 包装类型
-#define ValvePackingType_EE_ADDR ValveStemDiameter_EE_ADDR + 4
uint16_t SpecValvePackingType;
-
- // 控制输出模式 1:DAC 2:PWM
-#define ControlOutputMode_EE_ADDR ValvePackingType_EE_ADDR + 2
+ // 控制输出模式 1:DAC 2:PWM 3:PWMP
uint16_t SpecControlOutputMode;
-
+ // 整定结果 1:成功 0:失败
+ uint16_t TunedFlagResult;
} uDeviceTypedef;
/// 实时参数
typedef struct
{
- // 头部信息:
- uint16_t crc; ///< CRC校验值
-
// 动态数据:
- uDateTime_TypeDef timestamp; ///< 时间戳
- uint64_t write_cnt; ///< FM24写入次数
+ uDateTime_TypeDef timestamp; ///< 时间戳
+ // uint64_t write_cnt; ///< FM24写入次数
+
float32 travel_target; ///< 行程目标
uint32_t travel_cnt; ///< 行程累计
uint32_t action_cnt; ///< 动作次数
@@ -563,41 +374,46 @@ typedef union
uint64_t dev;
struct
{
- uint64_t hart : 1; // hart模块
- uint64_t bluetooth : 1; // 蓝牙模块
- uint64_t work_mode : 3; // 工作模式
- uint64_t lock : 1; // 锁模块
+ uint64_t hart : 1; // hart模块
+ uint64_t bluetooth : 1; // 蓝牙模块
+ uint64_t work_mode : 3; // 工作模式
+ uint64_t write_protect : 1; // 写保护
+ uint64_t lock : 1; // 锁模块
} Bits;
} driver_icon_enable_u;
#pragma pack() // 编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式
-extern uint16_t crc_param[CRC_NUM]; ///< CRC参数
-extern float32 calib_param[CALIBPARA_NUM][2]; ///< 校准参数
-extern mode_params_t mode_params; ///< 模式参数
-extern uDeviceTypedef uDevice; ///< 设备参数
-extern uRealTimeDef uRtData; ///< 实时参数
-extern uint8_t cpu_percent; ///< CPU使用率
+extern volatile float32 calib_param[CALIBPARA_NUM][2]; ///< 校准参数
+extern uDeviceTypedef uDevice; ///< 设备参数
+extern mode_params_t mode_params; ///< 模式参数
+extern uRealTimeDef uRtData; ///< 实时参数
+extern uint8_t cpu_percent; ///< CPU使用率
+extern uint8_t mem_percent; ///< 内存使用率
// 模拟量
-extern uint16_t adc_raw[INMAX]; ///< ADC原始值
-extern __IO uint16_t ip_out; ///< DAC输出值
+extern volatile uint16_t adc_raw[ADC1_MAX]; ///< ADC原始值
+extern volatile uint16_t ip_out; ///< DAC输出值
// 数字量
-extern __IO float32 loop_current; ///< 输入电流mA
-extern float32 actual_travel; ///< 实际阀门位置 % (1位小数,如 0~100%, 100% = 1000)
-extern float32 target_travel; ///< 目标阀门位置 % (1位小数,如 0~100%, 100% = 1000)
-extern float32 pid_target; ///< pid控制目标
-extern float32 show_target; ///< lcd显示目标
-extern float32 pid_actual; ///< pid控制实际
-extern float32 show_actual; ///< lcd显示实际
-extern float32 target_actual_diff; ///< 目标位置与实际位置的差值
-extern uint8_t target_direction; ///< 目标方向,0:向下,1:向上
-extern float32 temperature; ///< 温度
-extern float32 pressure; ///< 气源压力
-extern float32 pressureA; ///< A路压力
-extern float32 pressureB; ///< B路压力
-extern float32 range_percentage; ///< 量程百分比
+extern volatile float32 loop_current; ///< 输入电流mA
+extern volatile float32 actual_travel; ///< 实际阀门位置 % (1位小数,如 0~100%, 100% = 1000)
+extern volatile float32 target_travel; ///< 目标阀门位置 % (1位小数,如 0~100%, 100% = 1000)
+extern volatile float32 pid_target; ///< pid控制目标
+extern volatile float32 show_target; ///< 显示目标
+extern volatile float32 pid_actual; ///< pid控制实际
+extern volatile float32 show_loop; ///< 显示电流
+extern volatile float32 show_actual; ///< 显示实际
+extern volatile float32 show_target; ///< lcd显示目标
+extern volatile float32 show_actual; ///< lcd显示实际
+extern volatile float32 target_actual_diff; ///< 目标位置与实际位置的差值
+extern volatile uint8_t target_direction; ///< 目标方向,0:向下,1:向上
+extern volatile float32 temperature; ///< 温度
+extern volatile float32 pressure; ///< 气源压力
+extern volatile float32 pressureA; ///< A路压力
+extern volatile float32 pressureB; ///< B路压力
+extern volatile float32 range_percentage; ///< 量程百分比
extern driver_icon_enable_u driver_icon_enable; ///< 驱动使能图标
+extern uint32_t mode_default_autoload; ///< 默认自动加载
extern void h24_bluetooth_output_dbg(uint8_t *data, uint16_t len);
#endif // __ENTITY_H__
diff --git a/User/lib/control/custom/pid_c.c b/User/lib/control/custom/pid_c.c
new file mode 100644
index 0000000..4354fbc
--- /dev/null
+++ b/User/lib/control/custom/pid_c.c
@@ -0,0 +1,38 @@
+#include "pid_c.h"
+
+/**
+ * @brief 设置PID控制器参数
+ * @param {PID_C} *self - PID控制器结构体指针
+ * @param {float32} kp - 比例系数
+ * @param {float32} ki - 积分系数
+ * @param {float32} kd - 微分系数
+ * @param {float32} out_min - 最小输出
+ * @param {float32} out_max - 最大输出
+ * @return {*} - 空
+ */
+static void _set_ctrl_prm(struct PID_C *self, float32 kp, float32 ki, float32 kd, float32 out_min, float32 out_max)
+{
+ self->pri.kp = kp; /*比例系数*/
+ self->pri.ki = ki; /*积分系数*/
+ self->pri.kd = kd; /*微分系数*/
+
+ self->pri.deadband = 0.5; /*死区*/
+ self->pri.maximum = out_max; /*最大输出*/
+ self->pri.minimum = out_min; /*最小输出*/
+ self->pri.last_error = 0; /*上一次误差*/
+ self->pri.prev_error = 0; /*上上次误差*/
+}
+
+static float32 _PID(struct PID_C *self, float32 target, float32 feedback)
+{
+ /**
+ * 实现PID算法
+ */
+ return 0;
+}
+
+void pid_c_constructor(struct PID_C *self)
+{
+ self->set_ctrl_prm = _set_ctrl_prm;
+ self->PID = _PID;
+}
diff --git a/User/lib/control/custom/pid_c.h b/User/lib/control/custom/pid_c.h
new file mode 100644
index 0000000..ccc7e86
--- /dev/null
+++ b/User/lib/control/custom/pid_c.h
@@ -0,0 +1,34 @@
+#ifndef __PID_C_H__
+#define __PID_C_H__
+#include "lib.h"
+
+typedef struct PID_C
+{
+ /* 设置PID三个参数 */
+ void (*set_ctrl_prm)(struct PID_C *self, float32 kp, float32 ki, float32 kd, float32 out_min, float32 out_max);
+ /* 控制接口 */
+ float32 (*PID)(struct PID_C *self, float32 target, float32 feedback);
+
+ // 自定义参数
+ /* 实际值与目标值之间的误差 */
+ float32 err;
+ /* 输出值 */
+ float32 out;
+ /* private */
+ struct
+ {
+ float32 kp; /*比例学习速度*/
+ float32 ki; /*积分学习速度*/
+ float32 kd; /*微分学习速度*/
+ float32 ki_error; /*积分误差*/
+ float32 last_error; /*前一拍偏差*/
+ float32 prev_error; /*前两拍偏差*/
+ float32 deadband; /*死区*/
+ float32 maximum; /*输出值的上限*/
+ float32 minimum; /*输出值的下限*/
+ } pri;
+} pid_c_t;
+
+extern void pid_c_constructor(struct PID_C *self);
+
+#endif // __PID_C_H__
diff --git a/User/lib/control/custom/pid_g.c b/User/lib/control/custom/pid_g.c
new file mode 100644
index 0000000..d65c605
--- /dev/null
+++ b/User/lib/control/custom/pid_g.c
@@ -0,0 +1,38 @@
+#include "pid_g.h"
+
+/**
+ * @brief 设置PID控制器参数
+ * @param {PID_G} *self - PID控制器结构体指针
+ * @param {float32} kp - 比例系数
+ * @param {float32} ki - 积分系数
+ * @param {float32} kd - 微分系数
+ * @param {float32} out_min - 最小输出
+ * @param {float32} out_max - 最大输出
+ * @return {*} - 空
+ */
+static void _set_ctrl_prm(struct PID_G *self, float32 kp, float32 ki, float32 kd, float32 out_min, float32 out_max)
+{
+ self->pri.kp = kp; /*比例系数*/
+ self->pri.ki = ki; /*积分系数*/
+ self->pri.kd = kd; /*微分系数*/
+
+ self->pri.deadband = 0.5; /*死区*/
+ self->pri.maximum = out_max; /*最大输出*/
+ self->pri.minimum = out_min; /*最小输出*/
+ self->pri.last_error = 0; /*上一次误差*/
+ self->pri.prev_error = 0; /*上上次误差*/
+}
+
+static float32 _PID(struct PID_G *self, float32 target, float32 feedback)
+{
+ /**
+ * 实现PID算法
+ */
+ return 0;
+}
+
+void pid_g_constructor(struct PID_G *self)
+{
+ self->set_ctrl_prm = _set_ctrl_prm;
+ self->PID = _PID;
+}
diff --git a/User/lib/control/custom/pid_g.h b/User/lib/control/custom/pid_g.h
new file mode 100644
index 0000000..62e4eaa
--- /dev/null
+++ b/User/lib/control/custom/pid_g.h
@@ -0,0 +1,33 @@
+#ifndef __PID_G_H__
+#define __PID_G_H__
+#include "lib.h"
+
+typedef struct PID_G
+{
+ /* 设置PID三个参数 */
+ void (*set_ctrl_prm)(struct PID_G *self, float32 kp, float32 ki, float32 kd, float32 out_min, float32 out_max);
+ /* 控制接口 */
+ float32 (*PID)(struct PID_G *self, float32 target, float32 feedback);
+
+ // 自定义参数
+ /* 实际值与目标值之间的误差 */
+ float32 err;
+ /* 输出值 */
+ float32 out;
+ /* private */
+ struct
+ {
+ float32 kp; /*比例学习速度*/
+ float32 ki; /*积分学习速度*/
+ float32 kd; /*微分学习速度*/
+ float32 ki_error; /*积分误差*/
+ float32 last_error; /*前一拍偏差*/
+ float32 prev_error; /*前两拍偏差*/
+ float32 deadband; /*死区*/
+ float32 maximum; /*输出值的上限*/
+ float32 minimum; /*输出值的下限*/
+ } pri;
+} pid_g_t;
+
+extern void pid_g_constructor(struct PID_G *self);
+#endif // __PID_G_H__
diff --git a/User/lib/control/custom/pid_x.c b/User/lib/control/custom/pid_x.c
new file mode 100644
index 0000000..177d563
--- /dev/null
+++ b/User/lib/control/custom/pid_x.c
@@ -0,0 +1,481 @@
+#include "pid_x.h"
+#include "math.h"
+#define LAG_PHASE (6) // 迟滞相位,单位:拍
+
+#ifndef PI
+#define PI 3.14159265358979f
+#endif
+// 注1:自适应模糊pid最重要的就是论域的选择,要和你应该控制的对象相切合
+// 注2:以下各阀值、限幅值、输出值均需要根据具体的使用情况进行更改
+// 注3:因为我的控制对象惯性比较大,所以以下各部分取值较小
+// 论域e:[-5,5] ec:[-0.5,0.5]
+
+// 误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡
+#define Emin 0.3f
+#define Emid 1.0f
+#define Emax 5.0f
+// 调整值限幅,防止积分饱和
+#define Umax 1
+#define Umin -1
+
+#define NB 0
+#define NM 1
+#define NS 2
+#define ZO 3
+#define PS 4
+#define PM 5
+#define PB 6
+
+int32_t kp[7][7] = {{PB, PB, PM, PM, PS, ZO, ZO},
+ {PB, PB, PM, PS, PS, ZO, ZO},
+ {PM, PM, PM, PS, ZO, NS, NS},
+ {PM, PM, PS, ZO, NS, NM, NM},
+ {PS, PS, ZO, NS, NS, NM, NM},
+ {PS, ZO, NS, NM, NM, NM, NB},
+ {ZO, ZO, NM, NM, NM, NB, NB}};
+
+int32_t kd[7][7] = {{PS, NS, NB, NB, NB, NM, PS},
+ {PS, NS, NB, NM, NM, NS, ZO},
+ {ZO, NS, NM, NM, NS, NS, ZO},
+ {ZO, NS, NS, NS, NS, NS, ZO},
+ {ZO, ZO, ZO, ZO, ZO, ZO, ZO},
+ {PB, NS, PS, PS, PS, PS, PB},
+ {PB, PM, PM, PM, PS, PS, PB}};
+
+int32_t ki[7][7] = {{NB, NB, NM, NM, NS, ZO, ZO},
+ {NB, NB, NM, NS, NS, ZO, ZO},
+ {NB, NM, NS, NS, ZO, PS, PS},
+ {NM, NM, NS, ZO, PS, PM, PM},
+ {NM, NS, ZO, PS, PS, PM, PB},
+ {ZO, ZO, PS, PS, PM, PB, PB},
+ {ZO, ZO, PS, PM, PM, PB, PB}};
+
+static float32 ec; // 误差变化率
+/**************求隶属度(三角形)***************/
+float32 FTri(float32 x, float32 a, float32 b, float32 c) // FuzzyTriangle
+{
+ if (x <= a)
+ return 0;
+ else if ((a < x) && (x <= b))
+ return (x - a) / (b - a);
+ else if ((b < x) && (x <= c))
+ return (c - x) / (c - b);
+ else if (x > c)
+ return 0;
+ else
+ return 0;
+}
+/*****************求隶属度(梯形左)*******************/
+float32 FTraL(float32 x, float32 a, float32 b) // FuzzyTrapezoidLeft
+{
+ if (x <= a)
+ return 1;
+ else if ((a < x) && (x <= b))
+ return (b - x) / (b - a);
+ else if (x > b)
+ return 0;
+ else
+ return 0;
+}
+/*****************求隶属度(梯形右)*******************/
+float32 FTraR(float32 x, float32 a, float32 b) // FuzzyTrapezoidRight
+{
+ if (x <= a)
+ return 0;
+ if ((a < x) && (x < b))
+ return (x - a) / (b - a);
+ if (x >= b)
+ return 1;
+ else
+ return 1;
+}
+/****************三角形反模糊化处理**********************/
+float32 uFTri(float32 x, float32 a, float32 b, float32 c)
+{
+ float32 y, z;
+ z = (b - a) * x + a;
+ y = c - (c - b) * x;
+ return (y + z) / 2;
+}
+/*******************梯形(左)反模糊化***********************/
+float32 uFTraL(float32 x, float32 a, float32 b)
+{
+ return b - (b - a) * x;
+}
+/*******************梯形(右)反模糊化***********************/
+float32 uFTraR(float32 x, float32 a, float32 b)
+{
+ return (b - a) * x + a;
+}
+/**************************求交集****************************/
+float32 fand(float32 a, float32 b)
+{
+ return (a < b) ? a : b;
+}
+/**************************求并集****************************/
+float32 forr(float32 a, float32 b)
+{
+ return (a < b) ? b : a;
+}
+
+static float32 _PID(struct PID_X *self, float32 target, float32 feedback)
+{
+ float32 pwm_var; // pwm调整量
+ float32 iError; // 当前误差
+ float32 set, input;
+ CLASSICPID *pri = &self->pri;
+ // 计算隶属度表
+ float32 es[7], ecs[7], e;
+ float32 form[7][7];
+ int i = 0, j = 0;
+ int MaxX = 0, MaxY = 0;
+
+ // 记录隶属度最大项及相应推理表的p、i、d值
+ float32 lsd;
+ int temp_p, temp_d, temp_i;
+ float32 detkp, detkd, detki; // 推理后的结果
+
+ // 输入格式的转化及偏差计算
+ set = target;
+ input = feedback;
+ iError = set - input; // 偏差
+
+ e = iError;
+ ec = iError - pri->lasterror;
+
+ // 当温度差的绝对值小于Emax时,对pid的参数进行调整
+ if (fabs(iError) <= Emax)
+ {
+ // 计算iError在es与ecs中各项的隶属度
+ es[NB] = FTraL(e * 5, -3, -1); // e
+ es[NM] = FTri(e * 5, -3, -2, 0);
+ es[NS] = FTri(e * 5, -3, -1, 1);
+ es[ZO] = FTri(e * 5, -2, 0, 2);
+ es[PS] = FTri(e * 5, -1, 1, 3);
+ es[PM] = FTri(e * 5, 0, 2, 3);
+ es[PB] = FTraR(e * 5, 1, 3);
+
+ ecs[NB] = FTraL(ec * 30, -3, -1); // ec
+ ecs[NM] = FTri(ec * 30, -3, -2, 0);
+ ecs[NS] = FTri(ec * 30, -3, -1, 1);
+ ecs[ZO] = FTri(ec * 30, -2, 0, 2);
+ ecs[PS] = FTri(ec * 30, -1, 1, 3);
+ ecs[PM] = FTri(ec * 30, 0, 2, 3);
+ ecs[PB] = FTraR(ec * 30, 1, 3);
+
+ // 计算隶属度表,确定e和ec相关联后表格各项隶属度的值
+ for (i = 0; i < 7; i++)
+ {
+ for (j = 0; j < 7; j++)
+ {
+ form[i][j] = fand(es[i], ecs[j]);
+ }
+ }
+
+ // 取出具有最大隶属度的那一项
+ for (i = 0; i < 7; i++)
+ {
+ for (j = 0; j < 7; j++)
+ {
+ if (form[MaxX][MaxY] < form[i][j])
+ {
+ MaxX = i;
+ MaxY = j;
+ }
+ }
+ }
+ // 进行模糊推理,并去模糊
+ lsd = form[MaxX][MaxY];
+ temp_p = kp[MaxX][MaxY];
+ temp_d = kd[MaxX][MaxY];
+ temp_i = ki[MaxX][MaxY];
+
+ if (temp_p == NB)
+ detkp = uFTraL(lsd, -0.3, -0.1);
+ else if (temp_p == NM)
+ detkp = uFTri(lsd, -0.3, -0.2, 0);
+ else if (temp_p == NS)
+ detkp = uFTri(lsd, -0.3, -0.1, 0.1);
+ else if (temp_p == ZO)
+ detkp = uFTri(lsd, -0.2, 0, 0.2);
+ else if (temp_p == PS)
+ detkp = uFTri(lsd, -0.1, 0.1, 0.3);
+ else if (temp_p == PM)
+ detkp = uFTri(lsd, 0, 0.2, 0.3);
+ else if (temp_p == PB)
+ detkp = uFTraR(lsd, 0.1, 0.3);
+
+ if (temp_d == NB)
+ detkd = uFTraL(lsd, -3, -1);
+ else if (temp_d == NM)
+ detkd = uFTri(lsd, -3, -2, 0);
+ else if (temp_d == NS)
+ detkd = uFTri(lsd, -3, 1, 1);
+ else if (temp_d == ZO)
+ detkd = uFTri(lsd, -2, 0, 2);
+ else if (temp_d == PS)
+ detkd = uFTri(lsd, -1, 1, 3);
+ else if (temp_d == PM)
+ detkd = uFTri(lsd, 0, 2, 3);
+ else if (temp_d == PB)
+ detkd = uFTraR(lsd, 1, 3);
+
+ if (temp_i == NB)
+ detki = uFTraL(lsd, -0.06, -0.02);
+ else if (temp_i == NM)
+ detki = uFTri(lsd, -0.06, -0.04, 0);
+ else if (temp_i == NS)
+ detki = uFTri(lsd, -0.06, -0.02, 0.02);
+ else if (temp_i == ZO)
+ detki = uFTri(lsd, -0.04, 0, 0.04);
+ else if (temp_i == PS)
+ detki = uFTri(lsd, -0.02, 0.02, 0.06);
+ else if (temp_i == PM)
+ detki = uFTri(lsd, 0, 0.04, 0.06);
+ else if (temp_i == PB)
+ detki = uFTraR(lsd, 0.02, 0.06);
+
+ // pid三项系数的修改
+ pri->pKp += detkp;
+ pri->pKi += detki;
+ if (pri->kd_e)
+ {
+ pri->pKd += detkd;
+ }
+ else
+ {
+ pri->pKd = 0; // 取消微分作用
+ }
+
+ // 对Kp,Ki进行限幅
+ if (pri->pKp < 0)
+ {
+ pri->pKp = 0;
+ }
+ if (pri->pKi < 0)
+ {
+ pri->pKi = 0;
+ }
+
+ // 计算新的K1,nKi,nKd
+ pri->nKp = pri->pKp + pri->pKi + pri->pKd;
+ pri->nKi = -(pri->pKp + 2 * pri->pKd);
+ pri->nKd = pri->pKd;
+ }
+
+ if (iError > Emax)
+ {
+ pri->out = pri->max;
+ pwm_var = 0;
+ pri->flag = 1; // 设定标志位,如果误差超过了门限值,则认为当控制量第一次到达给定值时,应该采取下面的 抑制超调 的措施
+ }
+ else if (iError < -Emax)
+ {
+ pri->out = pri->min;
+ pwm_var = 0;
+ }
+ else if (fabsf(iError) <= Emin)
+ {
+ pwm_var = 0;
+ }
+ else
+ {
+ if (iError < Emid && pri->flag == 1) // 第一次超过(设定值-Emid(-0.08)摄氏度),是输出为零,防止超调,也可以输出其他值,不至于太小而引起震荡
+ {
+ pri->out = 0;
+ pri->flag = 0;
+ }
+ else if (-iError > Emid) // 超过(设定+Emid(+0.08)摄氏度)
+ {
+ pwm_var = -1;
+ }
+ else
+ {
+ // 增量计算
+ pwm_var = (pri->nKp * iError // e[k]
+ + pri->nKi * pri->lasterror // e[k-1]
+ + pri->nKd * pri->preverror); // e[k-2]
+ }
+ if (pwm_var >= Umax)
+ pwm_var = Umax; // 调整值限幅,防止积分饱和
+ if (pwm_var <= Umin)
+ pwm_var = Umin; // 调整值限幅,防止积分饱和
+ }
+ pri->preverror = pri->lasterror;
+ pri->lasterror = iError;
+
+ pri->out += pwm_var; // 调整PWM输出
+
+ if (pri->out > pri->max)
+ pri->out = pri->max; // 输出值限幅
+ if (pri->out < pri->min)
+ pri->out = pri->min; // 输出值限幅
+
+ return pri->out;
+}
+
+/*整定开始前的预处理,判断状态及初始化变量*/
+static void tune_pretreatment(struct PID_X *self)
+{
+ CLASSIC_AUTOTUNE *tune = &self->tune;
+ CLASSICPID *vPID = &self->pri;
+
+ tune->tuneTimer = 0;
+ tune->startTime = 0;
+ tune->endTime = 0;
+ tune->outputStep = 100;
+
+ if (*vPID->pSV >= *vPID->pPV)
+ {
+ tune->initialStatus = 1;
+ tune->outputStatus = 0;
+ }
+ else
+ {
+ tune->initialStatus = 0;
+ tune->outputStatus = 1;
+ }
+ tune->tuneEnable = 1;
+ tune->preEnable = 0;
+ tune->zeroAcrossCounter = 0;
+ tune->riseLagCounter = 0;
+ tune->fallLagCounter = 0;
+}
+
+/*计算PID参数值*/
+static void calculation_parameters(struct PID_X *self)
+{
+ CLASSIC_AUTOTUNE *tune = &self->tune;
+ CLASSICPID *vPID = &self->pri;
+ float32 kc = 0.0;
+ float32 tc = 0.0;
+ float32 zn[3][3] = {{0.5, 100000.0, 0.0}, {0.45, 0.8, 0.0}, {0.6, 0.5, 0.125}};
+
+ tc = (tune->endTime - tune->startTime) * tune->tunePeriod / 1000.0;
+ kc = (8.0 * tune->outputStep) / (PI * (tune->maxPV - tune->minPV));
+
+ vPID->pKp = zn[tune->controllerType][0] * kc; // 比例系数
+ vPID->pKi = vPID->pKp * tune->tunePeriod / (zn[tune->controllerType][1] * tc); // 积分系数
+ vPID->pKd = vPID->pKp * zn[tune->controllerType][2] * tc / tune->tunePeriod; // 微分系数
+}
+
+/**
+ * @brief 自整定函数
+ * @param {PID_X} *self
+ * @return {*}
+ * @note 成员变量tuneEnable、preEnable和controllerType需要提前赋值。tuneEnable变量值为0时是使用PID控制器,而tuneEnable变量值为1时是开启整定过程,当tuneEnable变量值为2时是指示整定失败。preEnable变量在整定前赋值为1,表示先做预处理。而controllerType则根据所整定的控制器的类型来定,主要用于参数的计算。
+ */
+static uint8_t _auto_tune(struct PID_X *self)
+{
+ CLASSIC_AUTOTUNE *tune = &self->tune;
+ CLASSICPID *vPID = &self->pri;
+ /*整定开始前的预处理,只执行一次*/
+ if (tune->preEnable == 1)
+ {
+ tune_pretreatment(self);
+ }
+
+ uint32_t tuneDuration = 0;
+ tune->tuneTimer++;
+ tuneDuration = (tune->tuneTimer * tune->tunePeriod) / 1000;
+ if (tuneDuration > (10 * 60)) // 整定过程持续超过10分钟,未能形成有效振荡,整定失败
+ {
+ tune->tuneEnable = 2;
+ tune->preEnable = 1;
+ return tune->tuneEnable;
+ }
+
+ if (*vPID->pSV >= *vPID->pPV) // 设定值大于测量值,则开执行单元
+ {
+ tune->riseLagCounter++;
+ tune->fallLagCounter = 0;
+
+ if (tune->riseLagCounter > LAG_PHASE)
+ {
+ *vPID->pMV = vPID->max;
+ if (tune->outputStatus == 0)
+ {
+ tune->outputStatus = 1;
+ tune->zeroAcrossCounter++;
+
+ if (tune->zeroAcrossCounter == 3)
+ {
+ tune->startTime = tune->tuneTimer;
+ }
+ }
+ }
+ }
+ else
+ {
+ tune->riseLagCounter = 0;
+ tune->fallLagCounter++;
+
+ if (tune->fallLagCounter > LAG_PHASE)
+ {
+ *vPID->pMV = vPID->min;
+ if (tune->outputStatus == 1)
+ {
+ tune->outputStatus = 0;
+ tune->zeroAcrossCounter++;
+
+ if (tune->zeroAcrossCounter == 3)
+ {
+ tune->startTime = tune->tuneTimer;
+ }
+ }
+ }
+ }
+
+ if (tune->zeroAcrossCounter == 3) // 已经两次过零,可以记录波形数据
+ {
+ if (tune->initialStatus == 1) // 初始设定值大于测量值,则区域3出现最小值
+ {
+ if (*vPID->pPV < tune->minPV)
+ {
+ tune->minPV = *vPID->pPV;
+ }
+ }
+ else if (tune->initialStatus == 0) // 初始设定值小于测量值,则区域3出现最大值
+ {
+ if (*vPID->pPV > tune->maxPV)
+ {
+ tune->maxPV = *vPID->pPV;
+ }
+ }
+ }
+ else if (tune->zeroAcrossCounter == 4) // 已经三次过零,记录另半波的数据
+ {
+ if (tune->initialStatus == 1) // 初始设定值大于测量值,则区域4出现最大值
+ {
+ if (*vPID->pPV > tune->maxPV)
+ {
+ tune->maxPV = *vPID->pPV;
+ }
+ }
+ else if (tune->initialStatus == 0) // 初始设定值小于测量值,则区域4出现最小值
+ {
+ if (*vPID->pPV < tune->minPV)
+ {
+ tune->minPV = *vPID->pPV;
+ }
+ }
+ }
+ else if (tune->zeroAcrossCounter == 5) // 已经四次过零,振荡已形成可以整定参数
+ {
+ calculation_parameters(self);
+
+ tune->tuneEnable = 0;
+ tune->preEnable = 1;
+ }
+
+ return tune->tuneEnable;
+}
+
+void pid_x_constructor(struct PID_X *self)
+{
+ self->PID = _PID;
+ self->AUTO_TUNE = _auto_tune;
+ self->pri.flag = 0;
+ self->pri.out = 0;
+ self->tune.preEnable = 1;
+}
diff --git a/User/lib/control/custom/pid_x.h b/User/lib/control/custom/pid_x.h
new file mode 100644
index 0000000..2be7c04
--- /dev/null
+++ b/User/lib/control/custom/pid_x.h
@@ -0,0 +1,71 @@
+#ifndef __PID_X_H__
+#define __PID_X_H__
+#include "lib.h"
+
+/*定义PID对象类型*/
+typedef struct CLASSIC
+{
+ float32 *pPV; // 测量值指针
+ float32 *pSV; // 设定值指针
+ float32 *pMV; // 输出值指针
+ BOOL *pMA; // 手自动操作指针
+
+ float32 out; // 输出值
+ float32 setpoint; // 设定值
+ float32 lasterror; // 前一拍偏差
+ float32 preverror; // 前两拍偏差
+ float32 max; // 输出值上限
+ float32 min; // 输出值下限
+
+ uint16_t flag; // 状态标志位
+
+ float32 pKp; // 比例系数
+ float32 pKi; // 积分系数
+ float32 pKd; // 微分系数
+
+ float32 nKp; // 比例系数
+ float32 nKi; // 积分系数
+ float32 nKd; // 微分系数
+
+ BOOL direct; // 正反作用
+ BOOL sm; // 设定值平滑
+ BOOL cas; // 串级设定
+ BOOL pac; // 输出防陡变
+ BOOL kd_e; // 微分使能
+} CLASSICPID;
+
+// 定义整定参数
+typedef struct
+{
+ uint8_t tuneEnable : 2; // 整定与PID控制开关,0:PID控制;1:参数整定;2:整定失败
+ uint8_t preEnable : 2; // 预处理使能,在开始整定前置位
+ uint8_t initialStatus : 1; // 记录开始整定前偏差的初始状态
+ uint8_t outputStatus : 1; // 记录输出的初始状态,0允许上升过零计数;1允许下降过零计数
+ uint8_t controllerType : 2; // 控制器类型:0,P控制器;1,PI控制器;2,PID控制器
+
+ uint8_t zeroAcrossCounter; // 过零点计数器,每次输出改变加1,比实际过零次数多1
+ uint8_t riseLagCounter; // 上升迟滞时间计数器
+ uint8_t fallLagCounter; // 下降迟滞时间计数器
+
+ uint16_t tunePeriod; // 整定采样周期
+ uint32_t tuneTimer; // 整定计时器
+ uint32_t startTime; // 记录波形周期起始时间
+ uint32_t endTime; // 记录波形周期结束时间
+
+ float32 outputStep; // 输出阶跃d
+ float32 maxPV; // 振荡波形中测量值的最大值
+ float32 minPV; // 振荡波形中测量值的最小值
+} CLASSIC_AUTOTUNE;
+
+typedef struct PID_X
+{
+ /* 控制接口 */
+ float32 (*PID)(struct PID_X *self, float32 target, float32 feedback);
+ uint8_t (*AUTO_TUNE)(struct PID_X *self);
+ /* private */
+ CLASSICPID pri;
+ CLASSIC_AUTOTUNE tune;
+} pid_x_t;
+
+extern void pid_x_constructor(struct PID_X *self);
+#endif // __PID_X_H__
diff --git a/User/lib/control/custom/pid_zh.c b/User/lib/control/custom/pid_zh.c
new file mode 100644
index 0000000..37f8e16
--- /dev/null
+++ b/User/lib/control/custom/pid_zh.c
@@ -0,0 +1,435 @@
+#include "pid_zh.h"
+#include "sys.h"
+#include