回答編集履歴

1

追試等

2021/12/11 00:10

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -1 +1,77 @@
1
1
  Mbed studioは入れていないのでわかりませんが、どこかにFPUを使うON/OFFのチェックボックスとかありませんか? あるいは、コンパイルオプションに-msoft-floatあるいは-mfloat-abi=softが入っていないあるいは、-mfloat-abi=softfpまたは-mfloat-abi=hardが追加されているとか。
2
+
3
+
4
+
5
+ ---
6
+
7
+ どうせ入れようと思ってはいたのでこの機にMbed Studioを入れて少しだけ追ってみました。
8
+
9
+
10
+
11
+ "Compiler generates"でプロジェクト内検索をかけると結構ヒットしますが、嗅覚で(笑)
12
+
13
+ サンプルプロジェクトのディレクトリ以下mbed-os/cmsis/CMSIS_5/CMSIS/TARGET_CORTEX_M/Include/core_cm3.h
14
+
15
+ を覗いてみました。
16
+
17
+ ```C
18
+
19
+ #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
20
+
21
+ #if defined __ARM_FP
22
+
23
+ #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
24
+
25
+ #endif
26
+
27
+ ```
28
+
29
+ ここのメッセージを"ModA Compiler generate <以下略>"と変えてみると、
30
+
31
+ main.cppで`#include "mbed.h"`にホバーで出るメッセージも"ModA ..."になることから、ここがエラー表示の源だということがわかります。
32
+
33
+
34
+
35
+ しかし、ここがコンパイル時にはエラーにならないことから、コンパイラに対しては何らかのルートで(多分)適切にマクロが設定されるものと考えられます。
36
+
37
+
38
+
39
+ つまり、質問の件は「IDEのマクロ解析が不完全で、IDE上でのみ出るエラー"もどき"」である、と結論付けてよさそうに思います。
40
+
41
+
42
+
43
+ ---
44
+
45
+ 以下実験。
46
+
47
+
48
+
49
+ main.cppに以下を付け加えると
50
+
51
+ ```C
52
+
53
+ #ifdef AAA
54
+
55
+ #error "AAA"
56
+
57
+ #else
58
+
59
+ #error "BBB"
60
+
61
+ #endif
62
+
63
+ ```
64
+
65
+ `#error "BBB"`のところに赤波線が引かれます(これは期待通り)
66
+
67
+ ここで、サンプルプロジェクトのディレクトリ以下mbed-os/tools/profiles/develop.jsonをコピーしてユーザーカスタムのBuild Profileとして、ARMC6のオプションに"-DAAA"を付け加えたとき、
68
+
69
+ IDE上では相変わらず#error "BBB"に赤線ですが、コンパイル時のエラーは"AAA"の方になります。
70
+
71
+ つまり、Build Profile中でコンパイルオプションとして与えられるマクロの反映はできていない、ということのようです。
72
+
73
+
74
+
75
+
76
+
77
+ (しかし、OS全部をプロジェクトにコピー指定するとLチカだけでプロジェクトが1GB超ってのはちょっとなぁ)