Я пытаюсь разработать новую функцию для встроенного приложения, и я хотел бы сделать это, используя подход, основанный на проверке.Как настроить Ceedling для проекта IAR Embedded Workbench?
Проект написан в чистом виде C и разрабатывается с использованием встроенного инструментария IAR 6.60.1.5104. Я нацелен на LPC1788, который является устройством Cortex-M3, и вся разработка выполняется на 64-битной машине Windows 7. Сейчас я больше склоняюсь к тому, чтобы тестировать модульные тесты на ПК, а не на целевое оборудование (оперативная память довольно ограничена).
Я столкнулся с полезной книгой по теме Test Driven Development for Embedded C, и это указывало на инструменты вроде Unity, CppUTest, Ceedling и т. Д. После изучения этого материала, я думаю, что мой лучший выбор - настроить Ceedling (который использует Unity) для моего проекта. Тем не менее, я не совсем уверен, какие шаги мне нужно предпринять, чтобы настроить Ceedling на работу с моей текущей инструментальной привязкой IAR.
Я установил Ceedling и создал проект «blinky», и я пытаюсь его построить и протестировать с помощью инструментальной привязки IAR. Я добавил iccarm.exe
на моем пути и редактируются blinky/project.yml
, как указано ниже:
---
# Notes:
# This is a fully tested project that demonstrates the use
# of a timer ISR to blink the on board LED of an Arduino UNO
:project:
:use_exceptions: FALSE
:use_test_preprocessor: TRUE
:use_auxiliary_dependencies: TRUE
:build_root: build
:release_build: TRUE
:test_file_prefix: test_
#You'll have to specify these
:environment:
- :mcu: atmega328p
- :f_cpu: 16000000UL
- :serial_port: COM8 #change this to the serial port you are using!!!
- :objcopy: avr-objcopy
# Uncomment these lines if you are using windows and don't have these tools in your path
# - :path:
# - C:\mingw\bin
# - C:\WinAVR-20100110\bin
# - C:\WinAVR-20100110\utils\bin
# - #{ENV['PATH']}
:extension:
:executable: .bin
:release_build:
:output: blinky
:paths:
:test:
- +:test/**
- -:test/support
:source:
- src/**
:support:
- test/support
: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)
:commmon: &common_defines []
:test:
- *common_defines
- TEST
:test_preprocess:
- *common_defines
- TEST
:tools:
:release_compiler:
:executable: avr-gcc
:arguments:
- ${1}
- -DTARGET
- -DF_CPU=#{ENV['F_CPU']}
- -mmcu=#{ENV['MCU']}
- -Iinclude/
- -Wall
- -Os
- -c
- -o ${2}
:release_linker:
:executable: avr-gcc
:arguments:
- -mmcu=#{ENV['MCU']}
- ${1}
- -o ${2}.bin
:cmock:
:mock_prefix: mock_
:when_no_prototypes: :warn
:enforce_strict_ordering: TRUE
:plugins:
- :ignore
:treat_as:
uint8: HEX8
uint16: HEX16
uint32: UINT32
int8: INT8
bool: UINT8
:tools:
:test_file_preprocessor:
:executable: iccarm
:name: 'IAR test file preprocessor'
:test_includes_preprocessor:
:executable: iccarm
:name: 'IAR test includes preprocessor'
:test_compiler:
:executable: iccarm
:name: 'IAR test compiler'
:test_linker:
:executable: iccarm
:name: 'IAR test linker'
:release_compiler:
:executable: iccarm
:name: 'IAR release compiler'
:release_linker:
:executable: iccarm
:name: 'IAR release linker'
:plugins:
:load_paths:
- vendor/ceedling/plugins
:enabled:
- stdout_pretty_tests_report
- module_generator
...
Единственное различие между этим и значение по умолчанию project.yml
является содержание под второй :tools
разделе.
Я предполагаю, что я направляюсь в правильном направлении, но я не уверен, является ли iccarm.exe
правильным исполняемым файлом для использования для всех этих частей инструментальной цепочки и какие аргументы мне нужно передать.
Если я могу настроить Ceedling для сборки и тестирования моргнутого проекта с помощью инструментальной привязки IAR, я надеюсь, что смогу применить такую же конфигурацию для своего фактического проекта. Если я пытаюсь работаю rake
сейчас, я получаю следующий результат:
$ rake
Test 'test_BlinkTask.c'
-----------------------
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - build/test/preprocess/files/test_BlinkTask.c
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb:18:in `readlines'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb:18:in `extract_base_file_from_preprocessed_expansion'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb:14:in `preprocess_file'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator.rb:40:in `preprocess_file'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator.rb:12:in `block in setup'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator_helper.rb:33:in `preprocess_test_file'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/preprocessinator.rb:25:in `preprocess_test_and_invoke_test_mocks'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/test_invoker.rb:42:in `block in setup_and_invoke'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `setup_and_invoke'
C:/Users/davidfallah/Documents/IAR Projects/blinky/vendor/ceedling/lib/ceedling/tasks_tests.rake:11:in `block (2 levels) in <top (required)>'
Tasks: TOP => default => test:all
(See full trace by running task with --trace)
--------------------
OVERALL TEST SUMMARY
--------------------
No tests executed.
я предполагаю, что это потому, что файл препроцессор теста должен быть копирование тестовых файлов под build/test/preprocess/files
каталогом, который в настоящее время не происходит.
После небольшого поиска я нашел это example configuration file for Unity, который выглядит как может быть полезно. Он ориентирован на среду IAR EW/Cortex M3, такую как я использую. Это может дать некоторое представление о том, что варианты конфигурации мне нужно указать в моем Ceedling project.yml
:
Если я могу получить Ceedling построить и протестировать blinky
проект с использованием набора инструментов IAR, я надеюсь, что я могу адаптировать его для работы с мой фактический проект. Любая помощь будет оценена по достоинству.
Насколько Я знаю, что IAR linker является 'ilinkarm',' iccarm' является только компилятором. В руководстве по компиляции вы должны указать, как их использовать. Кроме того, workbench имеет возможность отображать полные команды сборки на компиляции, которые вы можете проверить для справки. – user694733
@ user694733 Спасибо, я сделал это изменение. Вам неизвестно, подходит ли 'iccarm' для ролей' test_file_preprocessor' и 'test_includes_preprocessor'? – Tagc
Я не очень много компилировал из командной строки, поэтому не могу сказать точно. И вы должны проверить мой предыдущий комментарий из руководства для компилятора: моя версия IAR немного старше вашей, поэтому она может быть изменена. – user694733