1

Ceedling (= Unity と Cmock) でテストしている組み込みシステム プロジェクトがあります。

1 つのテスト ケースでは、テスト対象のコードは非常に単純です。

uint32_t zero = eeprom_read_dword((uint32_t*)&non_volatile_zero);
sprintf(output, "%lu", zero);

組み込みシステムは 8 ビット アーキテクチャで%luあるため、印刷用に 32 ビットの unsigned int をフォーマットするために sprintf で使用する必要があります。ただし、テスト ビルドとテストの実行にはデスクトップ環境 (GCC) が使用されます (テストに組み込みビルドを使用するオプションはありません)。これにより、次の警告が発生します。

warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
   62          sprintf(output, "%lu", zero);
                                ~~^   ~~~~
                                  |   |
                                  |   uint32_t {aka unsigned int}
                                  long unsigned int
                                %u

警告自体はデスクトップ環境では正しいですが、組み込みシステムの観点からは誤検知です。

私の質問は、デフォルトの GCC が使用されているため、project.yml で tools-section をまったく定義していないため、テスト ビルドに -Wno-format コンパイラ フラグを設定する方法です。それとも、ターゲット システムが 8 ビット アーキテクチャを使用していることを ceedling に伝える方法さえあるのでしょうか?

4

2 に答える 2