回答編集履歴
1
追試等
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超ってのはちょっとなぁ)
|