現在、Cortex-M0+ マイクロコントローラーである LPC810 にコードをアップロードしようとしています。私が使用しようとしている単純なプログラムがあります。これは、LED を点滅させるだけです。
typedef unsigned int volatile * vp;
int main()
{
*(vp) 0x4000C1C0 = 0xFFFFFFBFUL;
*(vp) 0xA0002000 |= 1 << 2;
for(;;) {
*(vp) 0xA0002300 |= 1 << 2;
volatile long wait = 240000;
while (wait > 0) --wait;
}
return 0;
}
編集:このファイルはmain.c
.
私はこのコードを書いていませんが、動作することは知っています。問題は、これをバイナリ ファイルにコンパイルしてアップロードすると、75 kiB 程度になることです。私のマイクロコントローラには大きすぎます。
elf ファイルで実行size
した後、余分な関数とデータがリンクされているようです。私は newlib を使用しています。
以下は私のMakefileです。おそらくコンパイル/リンクフラグに関係していると確信していますが、それを理解することができませんでした。
PROGRAM=hello
ARCH=arm-none-eabi
CC=$(ARCH)-gcc
CXX=$(ARCH)-g++
OBJCOPY=$(ARCH)-objcopy
OBJDUMP=$(ARCH)-objdump
NM=$(ARCH)-nm
SIZE=$(ARCH)-size
FLAGS=-pedantic-errors -Wall -Wextra -Werror -Wfatal-errors -O3 \
-fdiagnostics-color -mcpu=cortex-m0plus -mthumb
CFLAGS=-std=c11 $(FLAGS)
CXXFLAGS=-std=c++14 $(FLAGS)
LDFLAGS=
OBJECTS=./obj/main.o
all: ./$(PROGRAM).hex
run: ./$(PROGRAM).hex
sudo lpc21isp -wipe -verify -bin ./$(PROGRAM).hex /dev/ttyUSB0 115200 12000
make clean
./$(PROGRAM).hex: ./$(PROGRAM).elf
$(OBJCOPY) ./$(PROGRAM).elf -O binary ./$(PROGRAM).hex
$(OBJDUMP) -D $< > $(PROGRAM).disasm
$(NM) -n $(PROGRAM).elf > $(PROGRAM).sym
$(SIZE) $(PROGRAM).elf
./$(PROGRAM).elf: $(OBJECTS)
$(CC) $(FLAGS) $(LDFLAGS) $^ -o $@
./obj/%.o: ./src/%.s
$(CC) $(FLAGS) -c $^ -o $@
./obj/%.o: ./src/%.c
$(CC) $(CFLAGS) -c $^ -o $@
./obj/%.o: ./src/%.cpp
$(CXX) $(CXXFLAGS) -c $^ -o $@
clean:
rm $(OBJECTS) ./$(PROGRAM)*
これで16進拡張子のバイナリファイルを生成しているので、混乱してすみません。
これを修正する方法について何か考えはありますか?助けてくれてありがとう!