Pengaturan Visual Studio Code untuk GCC C

Pada catatan sebelumnya, sudah diungkapkan tentang Visual Studio Code (vscode atau vs code) sebagai code editor/text editor yang secara legal gratis dan handal. Juga dipaparkan bagaimana penggunaannya untuk Node.js (sekadara sebagai contoh).  Artikel ini akan dipakai untuk menunjukkan bagaimana vscode bisa dipakai untuk melakukan pemrograman dalam bahasa C (menggunakan GCC untuk PC bukan untuk Atmel AVR). Sistem yang dipakai adalah sistem yang juga benar-benar bebas pakai alias gratis, GNU/Linux. Meskipun tentu saja prinsip yang sama dapat dipakai untuk sistem dengan OS Microsoft Windows–tentu saja karena vscode adalah produk dari Microsoft.

Pertama-tama kita perlu memastikan extension utama untuk pemgrograman bahasa C sudah ter-install dengan baik.

Gambar 1. C/C++ for Visual Studio Code (cpptools)

Keterangan lebih lanjut untuk C/C++ for Visual Studio Code (cpptools) beserta cara untuk melakukan instalasi dapat dibaca pada halaman ini. Sebagai keterangan singkat berikut saya kutipkan sebagian informasi mengenai fungsinya sebagai berikut:

This preview release of the extension adds language support for C/C++ to Visual Studio Code including:

  • Language service
    • Code Formatting (clang-format)
    • Auto-Completion (experimental)
    • Symbol Searching
    • Go to Definition/Declaration
    • Peek Definition/Declaration
    • Class/Method Navigation
    • Signature Help
    • Quick Info (Hover)
    • Error Squiggles
  • Debugging
    • Support for debugging Windows (PDB, Mingw/Cygwin), Linux and OS X applications
    • Line by line code stepping
    • Breakpoints (including conditional and function breakpoints)
    • Variable inspection
    • Multi-threaded debugging support
    • Core dump debugging support
    • Executing GDB or MI commands directly when using ‘C++ (GDB/LLDB)’ debugging environment
    • For help configuring the debugger see Configuring launch.json for C/C++ debugging
      on our GitHub page.

You can find more detailed information about C/C++ support on Visual Studio Code at our documentation page.

Sebagai code editor, VScode ini memang menarik antara lain karena menurut pembuatnya dikembangkan berdasarkan pengalaman dari program-program serupa terdahulu, terutama Sublime Text. Tidak aneh kemudia kalau bisa ditemui bahwa filosofi dan bahkan kombinasi kunci untuk perintahnya memiliki kesamaan. Keterangan lebih lanjut tentang fasilitas yang diperoleh dari cpptools dapat dibaca di sini (C/C++ extension for Visual Studio Code). Beberapa gambar yang paling menarik saya kutip ulang di sini. Klik pada gambar untuk memperbesar tampilan.

Symbol@Gambar 2. Navigate to a particular symbol within the same source file (Ctrl + P, @Symbol Name)

peekGambar 3. Peek definition (Alt + F12)

Demikian Gambar 2 dan Gambar 3 saya kutipkan sebagai teaser fasilitas vscode yang menarik untuk dipelajari. Berikutnya untuk dapat mempergunakan vscode dengan baik sebagai editor kode untuk program dalam bahasa C, kita bisa mengikuti tutorial yang sudah disusun secara sistematis berikut ini: C/C++ for VS Code (Preview).

Supaya singkat beberapa bagian akan saya sajikan ulang di sini.

To install the Microsoft C/C++ extension:

  • Open VS Code.
  • Click the Extensions View icon on the Sidebar.
  • Search for cpptools.
  • Click Install, then click Reload.
  • Open a folder that contains your C/C++ code.

Jika langkah ini berhasil maka seperti terlihat pada Gambar 1, di bagian kiri (extensions) akan nampak keterangan ekstensi yang terinstal. Berikutnya untuk dapat menggunakan fasilitas code completion lakukan sebagai berikut:

To enable code completion and navigation, you will need to generate a c_cpp_properties.json file:

  • Hover over any green squiggle in a source file (e.g. a #include statement).
  • Click the lightbulb that appears underneath the mouse cursor.
  • Click Add include path to settings.

This will generate a c_cpp_properties.json file that allows you to add additional include paths to properly enable code navigation and auto-completion.

 Note: You can also generate or edit a c_cpp_properties.json file with the C/Cpp: Edit Configurations command from the Command Palette (Ctrl+Shift+P). 

Berdasarkan pengalaman saya, cara yang paling mudah justru adalah cara pada baris terakhir di atas.

Selanjutnya adalah tahapan pengaturan agar kita bisa melakukan build untuk dapat menghasilkan program yang bisa dieksekusi.

If you want to build your application from VS Code, you will need to generate a tasks.json file:

  • Open the Command Palette (Ctrl+Shift+P).
  • Select the Tasks: Configure Task Runner command and you will see a list of task runner templates.
  • Select Others to create a task which runs an external command.
  • Change the command to the command line expression you use to build your application (e.g. g++ -g main.cpp).
  • Add any required args (e.g. -g to build for debugging).
  • You can now build your application with (Ctrl+Shift+B)

You should now see a tasks.json file in your workspace .vscode folder that looks something like:

For more information on tasks, see Integrate with External Tools via Tasks.

Isi dari file tasks.json pada sistem saya adalah sebagai berikut (perhatikan gcc dan main.c):

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "gcc",
    "isShellCommand": true,
    "showOutput": "always",
    "args": ["-g", "main.c"]
}

To enable debugging, you will need to generate a launch.json file:

  • Navigate to the Debug view by clicking the Debug icon in the Sidebar.
  • In the Debug view, click the Configure icon.
  • Select C++ (GDB/LLDB) (to use GDB or LLDB) or C++ (Windows) (to use the Visual Studio Windows Debugger) from the Select Environment dropdown. This creates a launch.json file for editing with two configurations:
    • C++ Launch defines the properties for launching your application when you start debugging.
    • C++ Attach defines the properties for attaching to a process that’s already running.
  • Update the program property with the path to the program you are debugging.
  • If you want your application to build when you start debugging, add a preLaunchTask property with the name of the build task you created in tasks.json (“g++” in the example above).

To learn more, see Configuring launch.json for C/C++ debugging.

Di sistem saya file launch.json berisi sebagai berikut:

{
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

Jika berhasil baik maka hasilnya akan seperti pada Gambar 4 berikut.

Gambar 4.

Pada Gambar 4, terlihat pada folder yang saya beri nama VSC001 terdapat beberapa file yang diperlukan untuk pemrograman. File kode utama adalah main.c, sedangkan semua file json dihasilkan dari proses yang telah disebutkan sebelumnya. Untuk melakukan build apkilasi berikan perintah dengan kombinasi kunci Ctrl+Shift+B, proses ini akan menghasilkan file a.out.

Gambar 5. Proses debug

Gambar 6. Pilihan perintah dan shortcuts untuk proses debug

Gambar 5 menunjukkan jika konfigurasi benar dan proses debug dapat dimulai. Gambar 6 menunjukkan perintah apa saja yang bisa dipakai dalam proses debugging dan kombinasi kunci untuk shortcut keys.

Gambar 7. Menjalankan program dengan memanggil file keluaran proses build

Sebagaimana terlihat pada Gambar 7, program hasil kompilasi dijalankan dengan cara manual yaitu memanggil file hasil dari proses build di terminal yang telah disediakan. Tampaknya dalam mengerjakan sebuah proyek, vscode berdasarkan pada direktori/folder. Ini mirip dengan Eclipse yang menggunakan direktori workspace.

Bagian kedua ini akan mengungkapkan pilihan cara yang lebih mudah. Pengguna tidak perlu membuat atau mengatur beberapa file konfigurasi seperti pada bagian pertama (yang menggunakan ekstensi dari Microsoft). Cara kedua ini alkan menggunakan ekstensi Code Runner oleh Jun Han.

Run code snippet or code file for multiple languages: C, C++, Java, JavaScript, PHP, Python, Perl, Ruby, Go, Lua, Groovy, PowerShell, BAT/CMD, BASH/SH, F# Script, C# Script, VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml Script, R, AppleScript, Elixir, Visual Basic .NET, Clojure, Haxe, Objective-C, Rust, Racket, AutoHotkey, AutoIt, Kotlin, Dart, Free Pascal, Haskell, D, and custom command

Gambar 8.

Gambar 9.

Setelah ekstensi terinstal baik seperti pada Gambar 8 dan kode program sudah diketik dengan benar maka pengguna bisa memilih cara menglakukan eksekusi seperti terlihat pada Gambar 9. Pilihan pertama dengan melakukan klik kanan di bidang kerja lalu memilih Run Code (atau dengan shortcut key Alt+Ctrl+N). Pilihan kedua adalah dengan melakukan klik pada icon play yang berwarna hijau di kanan atas bidang kerja.

Gambar 10.

Hasil eksekusi tampak seperti pada Gambar 10. Kita hanya perlu menyimpan file dengan ekstensi .c saja, tidak perlu membuatkan direktori/folder khusus seperti pada cara jika menggunakan cpptools.

Metode ketiga atau yang terakhir adalah dengan menggunakan ekstensi C Compiler oleh brapifra.

Compile and execute C files from VSCode
 
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
ext install c-compiler
 

Gambar 11.

Gambar 12. Pilihan proses kompilasi

Gambar 13. Hasil proses kompilasi

Jika menggunakan C Compiler ini pengguna bisa memilih salah satu dari pilihan kompilasi yang sesuai seperti terlihat pada Gambar 12. Jika memilih Compile and Execute C File, maka hasilnya akan tampil seperti pada Gambar 13.

 

Sublime Text GCC C

[intense_panel shadow=”5″ border=”1px solid #a8a5a5″ margin_top=”1″]

Pada beberapa post sebelumnya telah saya perkenalkan Sublime Text, dengan contoh untuk pemrograman Arduino dan Atmel AVR, bahasa Python, maupun bahasa Lua. Untuk kali ini saya hanya akan pasting catatan mengenai konfigurasi Sublime Text (baik Sublime Text 2 maupun Sublime Text 3) untuk kode program dalam bahasa C. Tepatnya dengan GCC non AVR (misalnya untuk PC berbasis Intel).

Yang saya temukan konfigurasi untuk ST 2 agak berbeda dengan konfigurasi ST 3 (yang sampai saat saya tulis ini masih dalam tahap beta).

[/intense_panel]

Pertama dimulai dari konfigurasi untuk Sublime Text 2 (yang kadang-kadang disebut sebagai ST2 atau ST 2). Terlebih dahulu pengguna perlu membuat Build System yang baru. Caranya adalah dengan memilih Tools > Build System > New Build System… . Lihat Gambar 1 berikut.

Gambar 1.

Dalam Gambar 1 terlihat file  yang disediakan masih dalam bentuk dasar dan harus diisi oleh pengguna sesuai keperluan. Untuk pengaturan kali ini hasilnya nanti akan seperti pada Gambar 2. File itu bisa disimpan dengan diberi nama yang berarti, misalnya saja saya pilih kata gcc sehingga nama file  yang tadinya untitled.sublime-build menjadi gcc.sublime-build.

Gambar 2. Teks yang perlu diisi untuk konfigurasi gcc

Teks yang perlu diisikan di file seperti pada Gambar 2 dapat disalin sebagai berikut:

{
  "cmd": ["gcc", "${file}", "-o", "${file_path}/${file_base_name}"],
  "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
  "working_dir": "${file_path}",
  "selector": "source.c",

  "variants":
  [
    {
      "name": "Run",
      "cmd": ["bash", "-c", "gcc '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
    }
  ]
}

Setelah konfigurasi disimpan seperti pada Gambar 2, kemudian akan tersedia pilihan untuk Build System gcc seperti terlihat pada Gambar 1.

Gambar 3. Hasil uji coba

Kode untuk uji coba pada Gambar 3 adalah sebagai berikut:

#include <stdio.h>
#include <stdint.h>
// #include <cstdint.h>

// int i;
uint8_t i;

int main(void)
{
	/* code */
	printf("Uji untuk GCC C\n");
	for(i=0; i<10; i++)
	{
		
		printf("%d ",i);


	}
	printf("\n");

	return (0);
}

Untuk melakukan Build, tekan tahan kombinasi kunci Ctrl+B.  Untuk melakukan Run, tekan tahan kombinasi kunci Crtl+Shift+B.  

Sumber rujukan:

Berikutnya adalah konfigurasi untuk Sublime Text 3 (yang kdang disingkat ST3 atau atau ST 3). Urutan langkahnya hampir persis sama dengan pengaturan untuk ST2, letak perbedaan yang saya temukan ada pada isi konfigurasinya. Pertama pilih Tools > Build System > New Build System…, seperti pada Gambar 1 atau bisa juga dengan cara manual yaitu membuat file  baru di:

~/.config/sublime-text-3/Packages/User/gcc.sublime-build.

Perlu  diingat folder  .config dalam kondisi hidden  tersembunyi, gunakan Ctrl+H untuk menampilkannya. Penamaan file  masih tetap sama seperti pada ST 2, file itu bisa disimpan dengan diberi nama yang berarti, misalnya saja saya pilih kata gcc sehingga nama file  yang tadinya untitled.sublime-build menjadi gcc.sublime-build. Isi file konfigurasi sebagai berikut:

{
"shell_cmd" : "gcc $file_name -o ${file_base_name}",
"working_dir" : "$file_path",
"variants":
  [
    {
      "name": "Run",
      "shell_cmd": "gcc $file_name -o ${file_base_name} && ${file_path}/${file_base_name}"
    }
  ]
}

Cara penggunaan, build dan run sama seperti pada ST2.

Sumber rujukan:

Sebagai catatan akhir, dalam post  ini dapat terlihat bahwa untuk cukup banyak hal, informasi yang kita perlukan sebenarnya sudah tersedia di Internet. Tinggal bagaimana kita mencarinya, kita pelajari, kita pahami dan kita perbandingkan. Terutama sekali untuk hal-hal yang berkenaan engineering dan technology, ada banyak hal yang sudah pernah dipikirkan, dilakukan/dicoba oleh orang-orang di tempat/negara yang lebih maju. Pada cukup banyak hal, yang sering kurang adalah ketersediaan waktu atau bahkan sekadar kemauan kita untuk berusaha menemukannya.

 

Makefile untuk kompilasi kode C MSP430 dengan Netbeans

Catatan konfigurasi Makefile untuk IDE Netbeans.  Artikel mengenai penggunaan Netbeans akan dibuat terpisah [link].

nbeans01Gambar 1.

 

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
  }
 
}

 

nbeans02Gambar 2.

 

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.

nbeans03Gambar 3.

 

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.

  1. UNIX2DOS (http://www.virtualhelp.me/linux/164-dos2unix-missing-ubuntu-1004) [sudo aptitude install tofrodos]
  2. 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:

 

[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]

 

Uji coba kompilasi program MSP430G2553 dengan Codelite

Untuk melakukan pemrograman pada mikrokontroler MSP430G2553, ada beberapa cara yang bisa dipakai. Misalnya dengan menggunakan Energia, seperti yang sudah pernah ditunjukkan sebelumnya. Cara lain yang disarankan oleh TI (Texas Instruments) adalah dengan menggunakan CCS (Code Composer Studio), baik versi desktop maupun versi cloud (web). Tetapi selain itu, sebenarnya ada banyak aplikasi yang bisa dipakai untuk melakukan pemrograman, selama terdapat akses yang baik ke compiler dan toolchain lainnya.

Dengan akses ke compiler, seorang programer dapat memilih text editor yang hendak dipakainya. Bisa berupa software klasik seperti Vim atau Emacs, bisa juga yang relatif modern seperti nano atau gedit. Programer juga bisa memilih IDE yang lebih kompleks untuk proyeknya seperti Geany, CodeLite, Code::Blocks, atau bahkan yang berbasis Eclipse.

TI telah menyediakan dua versi desktop IDE yang normalnya masing-masing bekerja di sistem Windows dan GNU/Linux. Sayangnya baik CCSv6 maupun CCSv5 belum dapat berfungsi dengan baik di laptop saya. Pemrograman tentu masih bisa dilakukan dengan text editor yang sederhana, tetapi untuk memudahkan pengerjaan maka saya coba mempergunakan IDE. Kali ini saya mencoba menggunakan Codelite. Bila dibandingkan dengan IDE berbasis Eclipse atau bahkan Code::Blocks, menurut saya Codelite lebih ringan dan mempercepat kerja. Sebelum menggunakan Sublime Text, saya senang mempergunakan IDE ini. IDE Geany sebenarnya lebih terasa ringan, tetapi untuk proyek dengan compiler dan toolchain yang berbeda-beda, Codelite lebih memudahkan pekerjaan.

Sampai saat saya menulis catatan ini untuk pemrograman Launchpad MSP430 (MSP-EXP430G2) dengan CodeLite masih perlu saya bagi ke dalam dua tahapan yang berbeda. Pekerjaan coding, compiling, building, sudah bisa saya lakukan dari dalam CodeLite. Sedangkan untuk uploading ke launchpad masih saya lakukan di terminal dengan mspdebug.

Instalasi CodeLite di sistem GNU/Linux Ubuntu dan variannya dapat diakukan dengan perintah sudo apt-get install codelite. Untuk lebih mengenal CodeLite, berikut beberapa sumber bacaan yang baik;

[intense_emphasis color=”#FFB157″ tag=”span”] [/intense_emphasis]

 

Berikutnya untuk menguji apakah sistem IDE dan toolchain sudah berfungsi dengan baik diperlukan kode untuk uji coba. Template dasar kode kadang-kadang dapat berfungsi baik sebagai kode uji dasar. Tetapi sering juga terjadi, terutama pada embedded system,  diperlukan kode yang sedikit lebih lengkap. Jika di PC dikenal kode program “Hello World“, maka di embedded systems dikenal kode “Blinking Led” yang berfungsi utama sama yaitu untuk memastikan sistem kompilasi dan pendukungnya bekerja dengan baik. Sebagai bonus, kode led berkedip juga membantu untuk memeriksa kondisi peripheral. Beberapa sumber untuk contoh kode dasar yang dapat dipakai;

Pada dasarnya semua kode pada sumber-sumber acuan di atas adalah serupa. Ini adalah salah satu bukti bahwa sepanjang berkenaan dengan sumber belajar untuk electronics engineering technology, jauh lebih sering daripada tidak sumbernya sudah cukup banyak. Tergantung kemauan dan kesempatan untuk mempelajarinya. Dari contoh-contoh itu, salah satu yang bisa dipakai untuk pengujian adalah kode berikut:

//Demo app to blink the red LED (LED1) on the TI Launchpad
//which is attached to P1.0
//The green LED(LED2) is connected to P1.6

#include <msp430g2553.h>
 
int main(void) {
  volatile int i;
 
  // stop watchdog timer
  WDTCTL = WDTPW | WDTHOLD;
  // set up bit 0 of P1 as output
  P1DIR = 0x01;
  // intialize bit 0 of P1 to 0
  P1OUT = 0x00;
 
  // loop forever
  for (;;) {
    // toggle bit 0 of P1
    P1OUT ^= 0x01;
    // delay for a while
    for (i = 0; i < 0x6000; i++);
  }
}

 

Selain contoh kode sederhana (yang diharapkan sudah tidak mengandung kesalahan yang signifikan), pengguna juga perlu mempelajari bagaimana melakukan instalasi toolchain (termasuk compiler). Beberapa sumber belajar singkat yang bagus untuk dibaca mengenai hal ini:

Hasil instalasi toolchain dari satu atau lebih cara dapat kemudian diperiksa, di sistem saya hasilnya:

[intense_emphasis color=”#25a89f” tag=”span”]
$ msp430
msp430-addr2line  msp430-g++        msp430-ld.bfd     msp430-run
msp430-ar         msp430-gcc        msp430mcu-config  msp430-size
msp430-as         msp430-gcc-4.6.3  msp430-nm         msp430-strings
msp430-c++        msp430-gcov       msp430-objcopy    msp430-strip
msp430-c++filt    msp430-gdb        msp430-objdump
msp430-cpp        msp430-gprof      msp430-ranlib
msp430-elfedit    msp430-ld         msp430-readelf

$ locate msp430-gcc
/home/rumahku/energia0101E0017/hardware/tools/msp430/bin/msp430-gcc
/home/rumahku/energia0101E0017/hardware/tools/msp430/bin/msp430-gcc-4.6.3
/home/rumahku/energia0101E0017/hardware/tools/msp430/share/man/man1/msp430-gcc.1
/home/rumahku/energia18/hardware/tools/msp430/bin/msp430-gcc
/home/rumahku/energia18/hardware/tools/msp430/bin/msp430-gcc-4.6.3
/home/rumahku/energia18/hardware/tools/msp430/share/man/man1/msp430-gcc.1
/home/rumahku/msp430toolChain/bin/msp430-gcc
/home/rumahku/msp430toolChain/bin/msp430-gcc-4.7.0
/home/rumahku/msp430toolChain/bin/msp430-gcc-ar
/home/rumahku/msp430toolChain/bin/msp430-gcc-nm
/home/rumahku/msp430toolChain/bin/msp430-gcc-ranlib
/home/rumahku/msp430toolChain/bin/msp430-gcc-wrapper
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-ar
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-nm
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-ranlib
/home/rumahku/msp430toolChain/share/man/man1/msp430-gcc.1
/usr/bin/msp430-gcc
/usr/bin/msp430-gcc-4.6.3
/usr/share/codeblocks/compilers/compiler_msp430-gcc.xml
/usr/share/codeblocks/compilers/options_msp430-gcc.xml

$ msp430-gcc -v
Using built-in specs.
Reading specs from /usr/lib/gcc/msp430/4.6.3/../../../../msp430/lib/msp430mcu.spec
COLLECT_GCC=msp430-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/msp430/4.6.3/lto-wrapper
Target: msp430
Configured with: '/build/buildd/gcc-msp430-4.6.3~mspgcc-20120406/./gcc-4.6.3/configure' -v --enable-languages=c,c++ --prefix=/usr --with-system-zlib --infodir='/usr/share/info' --mandir='/usr/share/man' --bindir='/usr/bin' --libexecdir='/usr/lib' --libdir='/usr/lib' --build=x86_64-linux-gnu --host=x86_64-linux-gnu MAKEINFO=missing --target=msp430
Thread model: single
gcc version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (GCC)
[/intense_emphasis]

Sistem GNU/Linux;

[intense_emphasis color=”#AAB1BE” tag=”span”]

Linux XXX 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

[/intense_emphasis]

 

Perbandingan antar compiler menurut TI GCC User’s Guide [pdf file]

evd8

codelite002Gambar 1.

codelite001Gambar 2.

codelite003Gambar 3.

codelite004Gambar 4.

codelite005Gambar 5.

codelite006Gambar 6.

codelite007Gambar 7.

codelite008Gambar 8.

codelite009Gambar 9.

codelite010Gambar 10.

codelite011

Gambar 11.

codelite012Gambar 12.

codelite013Gambar 13.