我正试图为我的STM32CubeIDE项目创建Ceedling/Unity/CMoke的第一个单元测试。
项目已经开始构建,但是出现错误:
'链接test_functions_STM32G474RB.out……/应用程序/意法半导体/STM32CubeIDE.app/内容/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.macos64_1.0.0.202111181127/工具/bin/. ./lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: warning:无法找到Reset_Handler;默认值为0000000008000000运行test_functions_STM32G474RB.out…
错误:test_functions_STM32G474RB.out"失败了。
没有在$stdout中产生最终测试结果承宪:构建/测试//test_functions_STM32G474RB。out:没有这样的文件或目录并以状态:[0]退出(失败测试的计数)。这通常是源代码或测试代码中内存访问不良的症状。
耙流产!'
这就是项目。yml文件:
---
# Notes:
# Sample project C code is not presently written to produce a release artifact.
# As such, release build options are disabled.
# This sample, therefore, only demonstrates running a collection of unit tests.
:project:
:use_exceptions: FALSE
:use_test_preprocessor: TRUE
:use_auxiliary_dependencies: TRUE
:build_root: build
# :release_build: TRUE
:test_file_prefix: test_
:which_ceedling: gem
:ceedling_version: 0.31.1
:default_tasks:
- test:all
#:test_build:
# :use_assembly: TRUE
#:release_build:
# :output: MyApp.out
# :use_assembly: FALSE
:environment:
:extension:
:executable: .out
:paths:
:test:
- +:test/**
- -:test/support
:source:
- Core/Inc/**
- Core/Src/**
- Core/**
- Drivers/CMSIS/Device/ST/STM32G4xx/Include/**
- Drivers/CMSIS/Include/**
- Drivers/STM32G4xx_HAL_Driver/Inc/**
- Drivers/STM32G4xx_HAL_Driver/Inc/Legacy/**
:support:
- test/support
:libraries: []
:defines:
# in order to add common defines:
# 1) remove the trailing [] from the :common: section
# 2) add entries to the :common: section (e.g. :test: has TEST defined)
:common: &common_defines []
:test:
- *common_defines
- TEST
:test_preprocess:
- *common_defines
- TEST
:cmock:
:mock_prefix: mock_
:when_no_prototypes: :warn
:enforce_strict_ordering: TRUE
:plugins:
- :ignore
- :callback
:treat_as:
uint8: HEX8
uint16: HEX16
uint32: UINT32
int8: INT8
bool: UINT8
:includes:
- <stdbool.h>
- <stdint.h>
:treat_externs: :include
# Add -gcov to the plugins list to make sure of the gcov plugin
# You will need to have gcov and gcovr both installed to make it work.
# For more information on these options, see docs in plugins/gcov
:gcov:
:reports:
- HtmlDetailed
:gcovr:
:html_medium_threshold: 75
:html_high_threshold: 90
#:tools:
# Ceedling defaults to using gcc for compiling, linking, etc.
# As [:tools] is blank, gcc will be used (so long as it's in your system path)
# See documentation to configure a given toolchain for use
:tools:
:test_compiler:
:executable: arm-none-eabi-gcc
:arguments:
- '${1}'
- '-mcpu=cortex-m4'
- '-std=gnu11'
- '-g3'
- '-DDEBUG'
- '-DUSE_HAL_DRIVER'
- '-DSTM32G474xx'
- '-c'
- '-I Core/Inc'
- '-I Core/Startup'
- '-I Drivers/STM32G4xx_HAL_Driver/Inc'
- '-I Drivers/STM32G4xx_HAL_Driver/Inc/Legacy'
- '-I Drivers/CMSIS/Device/ST/STM32G4xx/Include'
- '-I Drivers/CMSIS/Include'
- '-I #{Ceedling.load_path}/../vendor/unity/src'
- '-I Core/Startup'
- '-O0'
- '-ffunction-sections'
- '-fdata-sections'
- '-Wall'
- '-fstack-usage'
- '--specs=nano.specs'
- '-mfpu=fpv4-sp-d16'
- '-mfloat-abi=hard'
- '-mthumb'
:test_linker:
:executable: arm-none-eabi-gcc
:arguments:
- '-o "STM32G474RB - PLATFORM.elf"'
- '-mcpu=cortex-m4'
- '-T"/Users/raul/Documents/repository/platform-firmware-c/STM32G474RB - PLATFORM/STM32G474RBTX_FLASH.ld"'
- '--specs=nosys.specs'
- '-Wl,-Map="${BuildArtifactFileBaseName}.map"'
- '-Wl,--gc-sections'
- '-static'
- '--specs=nano.specs'
- '-mfpu=fpv4-sp-d16'
- '-mfloat-abi=hard'
- '-mthumb'
- '-Wl,--start-group'
- '-lc'
- '-lm'
- '-Wl,--end-group'
# LIBRARIES
# These libraries are automatically injected into the build process. Those specified as
# common will be used in all types of builds. Otherwise, libraries can be injected in just
# tests or releases. These options are MERGED with the options in supplemental yaml files.
:libraries:
:placement: :end
:flag: "-l${1}"
:path_flag: "-L ${1}"
:system: [] # for example, you might list 'm' to grab the math library
:test: []
:release: []
:plugins:
:load_paths:
- "#{Ceedling.load_path}"
:enabled:
- stdout_pretty_tests_report
- module_generator
...
我已经尝试在编译器/链接器标志上添加. s文件。但是,要么我做错了,要么它不起作用。
如果有比我更有经验的人指出我做错了什么,我会很感激的。
提前感谢。
您没有组装启动文件startup_stm32。S中可能定义了向量表和复位处理程序。
有时候,我不知道为什么,在windows上它不会被编译,因为扩展S有一个"不正确的";的情况。试着把它换成小写或大写,可能会有帮助。
对于将来的访问者,这可能会有任何帮助…
我最终使用了gcc编译器而不是arm编译器。我从:source: include中删除了HAL驱动程序和其余的源文件。然后,我用我想要测试的代码创建了一个单独的。h和。c。然后,我必须用最少的函数和变量来模拟一些包含的头文件,以便能够构建测试代码。在某些情况下,函数和变量被调整/模拟以使其工作。
好运……