組み込みアプリケーションの新機能を開発しようとしていますが、テスト駆動型のアプローチを使用して開発したいと考えています。
このプロジェクトはピュア C で書かれており、IAR Embedded Workbench 6.60.1.5104 を使用して開発されています。Cortex-M3 デバイスである LPC1788 をターゲットにしており、すべての開発は 64 ビット Windows 7 マシンで行われています。現時点では、単体テストをターゲット ハードウェアではなく PC で実行することに賛成です (RAM はかなり限られています)。
私は組み込み C のテスト駆動開発と呼ばれる主題に関する有用な本に出くわし、Unity、CppUTest、Cedling などのツールについて教えてくれました。 ) 私のプロジェクトのために。ただし、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
は、2 番目の:tools
セクションの内容です。
私は正しい方向に向かっていると思いiccarm.exe
ますが、ツールチェーンのこれらすべての部分に使用する正しい実行可能ファイルであるかどうか、およびどの引数を渡す必要があるかはわかりません。
IAR ツールチェーンを使用してブリンキー プロジェクトをビルドおよびテストするように Ceedling を構成できれば、実際のプロジェクトに同じ構成を適用できるはずです。ここで実行してみると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
ディレクトリの下にテスト ファイルをコピーする必要があるためだと思いますが、現在は発生していません。
少し調べてみたところ、参考になりそうなUnity の設定ファイルの例を見つけました。私が使用しているような IAR EW/Cortex M3 環境向けです。これにより、 Ceedling で指定する必要がある構成オプションが示される場合がありますproject.yml
。
Ceedling にblinky
IAR ツールチェーンを使用してプロジェクトをビルドおよびテストしてもらうことができれば、実際のプロジェクトで動作するように調整できることを願っています。どんな助けでも大歓迎です。