Catatan konfigurasi Makefile untuk IDE Netbeans. Artikel mengenai penggunaan Netbeans akan dibuat terpisah [link].
Sebelum sampai ke bagian contoh beberapa modifikasi konfigurasi file makefile, berikut contoh kode yang dipakai untuk menguji toolchain, makefile, dan IDE Netbeans.
Modifikasi dari sumber aslinya untuk IDE Netbeans.
//#include <io.h> #include <msp430.h> #include <stdint.h> void wait(void) //delay function { volatile uint32_t i; //declare i as volatile unsigned int 32 for(i=0;i<12000;i++); //repeat n times } int main(void) { WDTCTL = WDTPW | WDTHOLD; P1DIR=0xFF; //port 1 = output P1OUT=0x01; //set bit 0 in port 1 for(;;) { //infinite loop P1OUT=~P1OUT; //invert port 1 wait(); //call delay function } }
Konfigurasi yang pertama adalah yang paling singkat dimodifikasi dari sumber ini untuk IDE Netbeans (μC MSP430G2553).
TARGET=main MCU=msp430g2553 CC=msp430-gcc CFLAGS=-Os -Wall -Wno-main -g -mmcu=$(MCU) all: $(TARGET).elf %.elf: %.c $(CC) $(CFLAGS) -o $@ $< /usr/bin/mspdebug -n rf2500 "prog $(TARGET).elf" "exit" flash: $(TARGET).elf /usr/bin/mspdebug rf2500 "prog $(TARGET).elf" erase: $(TARGET).elf /usr/bin/mspdebug rf2500 "erase" clean: rm -fr *.o *.elf
Sumber contoh lain yang serupa dapat diakses lewat link ini.
Makefile kedua merupakan modifikasi dari sumber ini untuk IDE Netbeans.
# Generic MSP430 Makefile # ####################################### # user configuration: ####################################### # TARGET: name of the output file TARGET = main # MCU: part number to build for MCU = msp430g2553 # SOURCES: list of input source files SOURCES = main.c # INCLUDES: list of includes, by default, use Includes directory INCLUDES = -IInclude # OUTDIR: directory to use for output OUTDIR = buildc # define flags CFLAGS = -mmcu=$(MCU) -g -Os -Wall -Wunused $(INCLUDES) ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs LDFLAGS = -mmcu=$(MCU) -Wl,-Map=$(OUTDIR)/$(TARGET).map ####################################### # end of user configuration ####################################### # ####################################### # binaries ####################################### CC = msp430-gcc LD = msp430-ld AR = msp430-ar AS = msp430-gcc GASP = msp430-gasp NM = msp430-nm OBJCOPY = msp430-objcopy MAKETXT = srec_cat RM = rm -f MKDIR = mkdir -p ####################################### # file that includes all dependancies DEPEND = $(SOURCES:.c=.d) # list all object files OBJECTS = $(addprefix $(OUTDIR)/,$(SOURCES:.c=.o)) # default: build all all: $(OUTDIR)/$(TARGET).elf $(OUTDIR)/$(TARGET).hex $(OUTDIR)/$(TARGET).txt $(OUTDIR)/$(TARGET).elf: $(OBJECTS) $(CC) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $@ $(OUTDIR)/%.hex: $(OUTDIR)/%.elf $(OBJCOPY) -O ihex $< $@ $(OUTDIR)/%.txt: $(OUTDIR)/%.hex $(MAKETXT) -O $@ -TITXT $< -I unix2dos $(OUTDIR)/$(TARGET).txt $(OUTDIR)/%.o: %.c | $(OUTDIR) $(CC) -c $(CFLAGS) -o $@ $< /usr/bin/mspdebug rf2500 "prog $(OUTDIR)/$(TARGET).elf" %.lst: %.c $(CC) -c $(ASFLAGS) -Wa,-anlhd $< > $@ # create the output directory $(OUTDIR): $(MKDIR) $(OUTDIR) clean: -$(RM) $(OUTDIR) /usr/bin/mspdebug rf2500 "prog $(OUTDIR)/$(TARGET).elf"
Agar makefile di atas dapat bekerja dengan baik diperlukan beberapa program yang harus diinstalasi jika belum ada.
- UNIX2DOS (http://www.virtualhelp.me/linux/164-dos2unix-missing-ubuntu-1004) [sudo aptitude install tofrodos]
- srec_cat (srecord) (https://www.howtoinstall.co/en/ubuntu/utopic/srecord) [“sudo apt-get install srecord”]
Setidaknya ada dua contoh makefile yang hampir serupa dengan contoh di atas, bisa dilihat di daftar berikut:
[intense_emphasis color=”#223d57″ tag=”span”]
[/intense_emphasis]
Makefile ketiga lebih panjang daripada yang sebelumnya. Dimodifikasi dari sumber pada link ini.
# # Makefile for msp430 # # 'make' builds TARGET # 'make clean' deletes everything except source files and Makefile # 'make program' programs flash on msp430 with TARGET, then resets it. # 'make reset' resets the msp430 # You need to set TARGET, MCU and SOURCES for your project. # TARGET is the name of the executable file to be produced (.elf) # eg if TARGET is foo.elf, then foo.elf will be produced, which can be programmed # into the msp430 flash by typing 'make program' # # If you want to see the assembler source from file foo.c, then use make foo.lst TARGET = main.elf MCU = msp430g2553 # List all the source files here # eg if you have a source file foo.c then list it here SOURCES = main.c # Use lines like those below to include your own libraries, include files (if you have any). # Changing a library won't cause a rebuild - use make clean then make. # this will link libboard430.a (use LIBPATH to say where it is, and take care of the order): #LIBS = -lcc2420 -lboard430 # paths to extra libraries and extra standard includes #ROOTPATH = ../.. #LIBPATH = -L$(ROOTPATH)/lib #INCLUDES = -I$(ROOTPATH)/include # You probably don't need to change anything below this line. ####################################################################################### CFLAGS = -mmcu=$(MCU) -g -O3 -Wall -Wcast-align -Wcast-qual -Wimplicit \ -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \ -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow \ -Wstrict-prototypes -Wswitch -Wunused $(INCLUDES) ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs LDFLAGS = -mmcu=$(MCU) -Wl $(LIBPATH) ######################################################################################## CC = msp430-gcc LD = msp430-ld AR = msp430-ar AS = msp430-gcc GASP = msp430-gasp NM = msp430-nm OBJCOPY = msp430-objcopy RANLIB = msp430-ranlib STRIP = msp430-strip SIZE = msp430-size READELF = msp430-readelf CP = cp -p RM = rm -f MV = mv #Linux jtag program JTAGPROG = jtag.py #Windows jtag program #JTAGPROG = msp430-jtag PROGRAM = $(JTAGPROG) -mEpv RESET = $(JTAGPROG) -r ######################################################################################## # the file which will include dependencies DEPEND = $(TARGET:.elf=.d) # all the object files OBJECTS = $(SOURCES:.c=.o) $(TARGET): $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $@ /usr/bin/mspdebug -n rf2500 "prog $(TARGET)" # rule for making assembler source listing, to see the code %.lst : %.c $(CC) -c $(CFLAGS) -Wa,-anlhd $< > $@ # include the dependencies -include $(DEPEND) # dependencies file # includes also considered, since some of these are our own # (otherwise use -MM instead of -M) $(DEPEND): $(SOURCES) Makefile $(CC) -M ${CFLAGS} $(SOURCES) >$@ .PHONY: clean clean: -$(RM) $(OBJECTS) -$(RM) $(TARGET) -$(RM) $(SOURCES:.c=.lst) -$(RM) $(DEPEND) .PHONY: program program: $(TARGET) $(PROGRAM) $(TARGET) .PHONY: reset reset: $(RESET)
Beberapa makefile serupa yang dapat dijadikan perbandingan:
- https://bitbucket.org/snippets/nielsenb/6Lrqx
- http://svn.nebarnix.com/sub/msp430/z-stack%20STK/makefile.uniarch
- https://github.com/zehortigoza/msp430-quadcopter/blob/master/Makefile
- http://thedestitutedeveloper.blogspot.co.id/2014/02/msp430f5529-launchpad-project0-on.html
- http://thedestitutedeveloper.blogspot.co.id/2014/07/msp430f5529-launchpad-project01.html
[intense_emphasis color=”#a8931c”]
Mencoba mempelajari makefile bukanlah hal yang sangat mudah. Ada beberapa sumber yang bisa dicoba untuk dipakai sebagai awalan untuk mempelajari make dan makefile, jika diperlukan. Saya urutkan sebagai berikut:
[/intense_emphasis]- Make and Makefiles
- Makefiles For Everyone
- http://www.linuxtopia.org/online_books/an_introduction_to_gcc/gccintro_16.html
- GNU Make in Detail for Beginners
- A Simple Makefile Tutorial
- http://www.cprogramming.com/tutorial/makefiles.html
- Guide: Makefiles
- Using make and writing Makefiles
- https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
- http://www.gribblelab.org/CBootcamp/12_Compiling_linking_Makefile_header_files.html
- Makefile for Embedded Programming
- Arduino and GCC, compiling and uploading programs using only makefiles
- http://arduino.stackexchange.com/questions/12114/basic-makefile-for-avr-gcc
- https://gist.github.com/zh/3972399
- http://hardwarefun.com/tutorials/compiling-arduino-sketches-using-makefile