マイクロチップ用のソースを修正する作業が生じた為、Windows で、環境構築をしてみた。
遠い昔に、マイクロチップが出始めた時に、自分でアセンブラを実装して開発した覚えが
あるが、最近は、AVRやルネサスがメインとなり、使わなくなった。
開発環境が有料な事や、プログラマーが高いのも敬遠する理由ではある。
・プログラマーを自分で作る事もできそうだが、種類が多いので大変そうだ・・・
・60日を過ぎると、無料版は、最適化が「-O1」のみとなる。
※一応ソースコードが入手できるので、パッチを当てて、制限を回避する事も出来るよう
だが・・・
・現状で、C++14 のコードをコンパイル出来ないのは、まともなコンパイラとは思えない。
PICの良い面は、デバイスの入手性、バリエーションの多さ、「コスパ」なのだと思うが
自分はメリットを感じない。
今回使うチップは、「PIC24EP256GU810」で、「MPLAB C30」をインストールした。
※コンパイラは魔改造された gcc のようだ。
例によって、IDEを使わず、コマンドラインで開発したいので、Windows、MSYS2 で動作
させてみた。
以前から少しづつアップデートしている独自の「Makefile」を PIC30 用に修正しておこなった。
※この「Makefile」は、非常に柔軟性が高い!
従属規則の生成も全く問題無く、正常に生成された。
そして、暫く格闘したが、コンパイルしてリンクできるようになった。
・MPLAB C30 にパスを通す。(PATH=$PATH:/c/'Program Files (x86)'/Microchip/'MPLAB C30'/bin)
・デバイスを指定する。(-mpu=24EP256GU810)
・適切なコンパイルオプションを選ぶ。(-mlarge-code -mlarge-data -mlarge-scalar -mconst-in-data)
・適切なリンクオプションを選ぶ。(-T p24EP256GU810.gld --heap=1024 --stack=1024)
これだけ行って、コンパイル、リンクが通った。
#=======================================================#
# #
# PIC C30 Makfile #
# #
#=======================================================#
TARGET = farm
DEVICE = 24EP256GU810
BUILD = release
VPATH =
ASOURCES =
CSOURCES = ここにソースファイルを列挙する~
PSOURCES =
USER_LIBS =
LDSCRIPT =
USER_DEFS =
INC_SYS =
INC_APP =
OPTIMIZE = -O1 -mlarge-code -mlarge-data -mlarge-scalar -mconst-in-data
MCU_TARGET = -mcpu=$(DEVICE)
CP_OPT = -Wall -Werror \
-Wno-unused-variable \
-Wno-unused-function \
-fno-exceptions
#CC_OPT = -Wall -Werror \
# -Wno-unused-variable \
# -fno-exceptions
#CC_OPT = -x c
CC_OPT =
SYSINCS = $(addprefix -I, $(INC_SYS))
APPINCS = $(addprefix -I, $(INC_APP))
AINCS = $(SYSINCS) $(APPINCS)
CINCS = $(SYSINCS) $(APPINCS)
PINCS = $(SYSINCS) $(APPINCS)
LIBINCS = $(addprefix -L, $(LIB_ROOT))
DEFS = $(addprefix -D, $(USER_DEFS))
LIBS = $(addprefix -l, $(USER_LIBS))
# You should not have to change anything below here.
AS = pic30-as
CC = pic30-gcc
CP =
AR = pic30-ar
LD = pic30-ld
OBJCOPY =
OBJDUMP = pic30-objdump
SIZE =
HEX = pic30-bin2hex
# AFLAGS = -Wa,-adhlns=$(<:.s=.lst),-gstabs
# AFLAGS = -Wa,-adhlns=$(<:.s=.lst)
# ALL_ASFLAGS = -x assembler-with-cpp $(ASFLAGS) $(DEFS)
ALL_ASFLAGS = $(AFLAGS) $(MCU_TARGET) $(DEFS)
# Override is only needed by avr-lib build system.
CFLAGS = $(CC_OPT) $(OPTIMIZE) $(MCU_TARGET) $(DEFS)
PFLAGS = -std=c++14 $(CP_OPT) $(OPTIMIZE) $(MCU_TARGET) $(DEFS)
# override LDFLAGS = $(MCU_TARGET) -nostartfiles -Wl,-Map,$(TARGET).map -T $(LDSCRIPT)
# override LDFLAGS = $(MCU_TARGET) -T$(DEVICE).gld,--defsym=__MPLAB_BUILD=1,--defsym=__MPLAB_DEBUG=1,--heap=1024,--stack=1024,-Map="VTS-10a.map"
override LDFLAGS = $(MCU_TARGET) -T p$(DEVICE).gld --heap=1024 --stack=1024
OBJCOPY_OPT = --srec-forceS3 --srec-len 32
OBJECTS = $(addprefix $(BUILD)/,$(patsubst %.s,%.o,$(ASOURCES))) \
$(addprefix $(BUILD)/,$(patsubst %.c,%.o,$(CSOURCES))) \
$(addprefix $(BUILD)/,$(patsubst %.cpp,%.o,$(PSOURCES)))
DOBJECTS = $(addprefix $(BUILD)/,$(patsubst %.c,%.o,$(CSOURCES))) \
$(addprefix $(BUILD)/,$(patsubst %.cpp,%.o,$(PSOURCES)))
DEPENDS = $(patsubst %.o,%.d, $(DOBJECTS))
.PHONY: all clean
.SUFFIXES :
.SUFFIXES : .rc .hpp .s .h .c .cpp .d .o
all: $(BUILD) $(TARGET).elf
$(TARGET).elf: $(OBJECTS) Makefile
$(CC) $(LDFLAGS) $(LIBINCS) -o $@ $(OBJECTS) $(LIBS)
$(HEX) $@ $(TARGET).hex
$(BUILD)/%.o: %.s
mkdir -p $(dir $@); \
$(AS) -c $(AOPT) $(AFLAGS) $(AINCS) -o $@ $<
$(BUILD)/%.o : %.c
mkdir -p $(dir $@); \
$(CC) -c $(COPT) $(CFLAGS) $(CINCS) $(CCWARN) -o $@ $<
$(BUILD)/%.o : %.cpp
mkdir -p $(dir $@); \
$(CP) -c $(POPT) $(PFLAGS) $(PINCS) $(CPWARN) -o $@ $<
$(BUILD)/%.d: %.c
mkdir -p $(dir $@); \
$(CC) -MM -DDEPEND_ESCAPE $(COPT) $(CFLAGS) $(APPINCS) $< \
| sed 's/$(notdir $*)\.o:/$(subst /,\/,$(patsubst %.d,%.o,$@) $@):/' > $@ ; \
[ -s $@ ] || rm -f $@
$(BUILD)/%.d: %.cpp
mkdir -p $(dir $@); \
$(CP) -MM -DDEPEND_ESCAPE $(POPT) $(PFLAGS) $(APPINCS) $< \
| sed 's/$(notdir $*)\.o:/$(subst /,\/,$(patsubst %.d,%.o,$@) $@):/' > $@ ; \
[ -s $@ ] || rm -f $@
clean:
rm -rf $(BUILD) $(TARGET).elf $(TARGET).mot $(TARGET).lst $(TARGET).map
clean_depend:
rm -f $(DEPENDS)
後は、書き込んでテストとなるが、ライターは自作する時間も惜しいので、仕方なく
「PICkit3」を買う(5700円)事にする。(自分のお金じゃ無いけど・・)
※自分は、デバッグ機能(トレース、実行など)が必要になった事が少ないので、
フラッシュ書き込みさえ出来れば、満足なのだけど・・・
やはり、コンパイラが有償(無償版は60日過ぎると、最適化できなくなる)なのは、最
悪だと思う、自分的には、仕事以外では絶対に使わないデバイスだと思う。
追記:
Windows10 のノートにもPICの開発環境をインストールしたが、コンパイラを走らせる
と「ライセンスがどうの」と言ってきてエラーになる・・・
調べると、「mplabc30-v3_31-windows-installer.exe」のバージョンに起因する、
license-lm 関係のバグのようだ、そこで、「v3_30」を取ってきてインストールした。
-----
やっぱり、ルネサス系、R8C、RL78、RXマイコンが最高だと、再認識する。
※コストでは、PICに武がある事は認めるのだけど・・・