C
Language
C Language Advanced
Lection 21
Содержание
• Декомпозиция программы на несколько
файлов
• Структура компонента
• Библиотека
• Сборка программы
• Условная компиляция
• Header Include Guard
23.05.2019 0:36 Advanced 2
Декомпозиция программы
3
Структура компонента
4
Структура компонента
#******************************************************************************
#***** (C) COPYRIGHT - All Rights Reserved *****
#******************************************************************************
# Set Project name for output file reference
set(publicHeader
${CMAKE_CURRENT_SOURCE_DIR}/api/Dio.h
)
set(inFiles
${publicHeader}
${CMAKE_CURRENT_SOURCE_DIR}/src/Dio_Prv_Reg.h
${CMAKE_CURRENT_SOURCE_DIR}/src/Dio.c
)
add_library( MCAL_DIO STATIC ${inFiles} )
#provide include search path
target_include_directories( MCAL_DIO PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/api/ )
target_include_directories( MCAL_DIO PUBLIC ${MCAL_ROOT}/mcal_rh850_cfg/Dio/cfg )
# "PUBLIC" path is only provided to this library.
#target_include_directories( MCAL_DIO PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/ )
#provide dependency information
# This software components needs public header from MCAL_DIO
#target_link_libraries( MCAL_SPI PUBLIC MCAL_DIO )
target_link_libraries( MCAL_DIO PRIVATE StandardCore)
5
Библиотека
6
Public Header
Public Types Header
Init
Run
Action1
Action2
Done
NewType1
NewType2
Library object file
MyUnit.lib (*.obj)
Сборка программы
7
Компиляция программы
F (../Core/Src/stm32f4xx_it.c)(0x5FB2ABBA)(--c99 -c --cpu Cortex-M4.fp -D__EVAL -D__MICROLIB -g -O3 --apcs=interwork --
split_sections -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I
../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include
-I.RTE_Pr06
-IC:Keil_v5ARMPACKARMCMSIS5.0.1CMSISInclude
-IC:Keil_v5ARMPACKKeilSTM32F4xx_DFP2.14.0DriversCMSISDeviceSTSTM32F4xxInclude
-D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx
-o pr06stm32f4xx_it.o --omf_browse pr06stm32f4xx_it.crf --depend pr06stm32f4xx_it.d)
I (../Core/Inc/main.h)(0x5FB2ABBB)
I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h)(0x5FB26D57)
I (../Core/Inc/stm32f4xx_hal_conf.h)(0x5FB2ABBB)
I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h)(0x5FB26D57)
I (../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h)(0x5FB26D57)
I (../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h)(0x5FB26CCC)
….
8
Линковка программы
--cpu=Cortex-M4.fp
"pr06startup_stm32f407xx.o"
"pr06main.o"
"pr06stm32f4xx_it.o"
"pr06stm32f4xx_hal_msp.o"
"pr06stm32f4xx_hal_i2c.o"
"pr06stm32f4xx_hal_i2c_ex.o"
"pr06stm32f4xx_hal_rcc.o"
"pr06stm32f4xx_hal_rcc_ex.o"
"pr06stm32f4xx_hal_flash.o"
"pr06stm32f4xx_hal_flash_ex.o"
"pr06stm32f4xx_hal_flash_ramfunc.o"
"pr06stm32f4xx_hal_gpio.o"
"pr06stm32f4xx_hal_dma_ex.o"
"pr06stm32f4xx_hal_dma.o"
"pr06stm32f4xx_hal_pwr.o"
"pr06stm32f4xx_hal_pwr_ex.o"
"pr06stm32f4xx_hal_cortex.o"
"pr06stm32f4xx_hal.o"
"pr06stm32f4xx_hal_exti.o"
"pr06stm32f4xx_hal_tim.o"
"pr06stm32f4xx_hal_tim_ex.o"
"pr06system_stm32f4xx.o"
--library_type=microlib --strict --scatter "Pr06Pr06.sct"
--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols
--info sizes --info totals --info unused --info veneers
--list "Pr06.map" -o Pr06Pr06.axf
9
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x10000000 0x00010000 {
.ANY (+RW +ZI)
}
}
Условная компиляция
10
Условная компиляция
11
Header Include Guard
12
#define ABC 10
#include MyTypes.h #include MyHeader.h
#include MyTypes.h
#define ABC 10
#define ABC 10
Header Include Guard
13

C language lect_21_advanced