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.

 

Uji blinking led MSP432 (MSP-EXP432P401R) di GNU Linux dengan Energia dan CCS Cloud [teaser]

Ini adalah catatan uji coba pertama dari Launchpad  produksi Texas Instruments yaitu MSP-EXP432P401R. Ini papan ketiga yang saya miliki dari TI yang sekalipun terdapat beberapa kesamaan dengan dua papan sistem sebelumnya tetapi juga memiliki perbedaan yang sekilas akan membingungkan saat perkenalan untuk pertama kali. Papan MSP-EXP432P401R ini berasal dari rumpun keluarga MSP432, jadi berdasarkan “silsilah” keluarga, papan ini lebih dekat pada papan MSP-EXP430G2 yang berasal dari keluarga MSP430. Tetapi berbeda dengan MSP430 yang merupakan keluarga mikrokontroler 16-bit, MSP432 adalah keluarga mikrokontroler 32-bit. Selain itu jika MSP430 dibangun berdasarkan pada arsitektur asli rancangan TI sendiri, MSP432 dibangun berdasarkan arsitektur ARM.

Papan Launchpad MSP-EXP432P401R berintikan mirkokontroler MSP432P401R. Menurut TI prosesor inti dari mikrokontroler ini berdasar pada arsitektur ARM;

ARM 32-Bit Cortex-M4F CPU With Floating-Point Unit and Memory Protection Unit<span class="su-quote-cite"><a href="http://www.ti.com/product/MSP432P401R" target="_blank">Texas Instruments</a></span>

Jadi perihal prosesor inti, papan launchpad ini sebenarnya lebih dekat kepada Tiva C, yaitu papan  EK-TM4C123GXL . Mikrokontroler pada kedua papan itu berbasis pada arsitektur ARM Cortex-M4F. Tambahan huruf F menandakan adanya fasilitas Floating-Point unit. Situs letsmakerobots.com memuat artikel tentang perbandingan antara dua mikrokontroler ini:

MSP432 processor main features diagram

TM4C123x processor main features diagram

 

Berbeda dengan catatan sebelumnya saat uji coba led blinking untuk sistem MSP430 dan Tiva C, pada catatan ini pengungkapan akan mendekati urutan kronologis.

 

Catatan sistem GNU/Linux:

$ uname -a
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

Sebagian dari $ lsusb
Bus 003 Device 027: ID 0451:bef3 Texas Instruments, Inc.

Sebagian dari $ dmesg
[37080.370024] usb 3-1: new full-speed USB device number 27 using xhci_hcd
[37080.499458] usb 3-1: New USB device found, idVendor=0451, idProduct=bef3
[37080.499466] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[37080.499470] usb 3-1: Product: XDS110 (02.03.00.00) with CMSIS-DAP
[37080.499474] usb 3-1: Manufacturer: Texas Instruments
[37080.499477] usb 3-1: SerialNumber: 00000000
[37080.500199] cdc_acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
[37080.500230] cdc_acm 3-1:1.0: ttyACM0: USB ACM device
[37080.500924] cdc_acm 3-1:1.3: This device cannot do calls on its own. It is not a modem.
[37080.500955] cdc_acm 3-1:1.3: ttyACM1: USB ACM device
[37080.502418] hid-generic 0003:0451:BEF3.0014: hiddev0,hidraw1: USB HID v1.11 Device [Texas Instruments XDS110 (02.03.00.00) with CMSIS-DAP] on usb-0000:00:14.0-1/input5

 

Potensi masalah (tantangan):

Pertama kali saya mencoba untuk menguji papan sistem ini dengan menggunakan Energia 0101E0017, tetapi gagal dan mendapatkan pesan kesalahan sebagai berikut:
[intense_emphasis tag=”span”]

Connecting…
fatal: CS_DAP_0: Error connecting to the target: (Error -260 @ 0x0) An attempt to connect to the XDS110 failed. The cause may be one or more of: invalid firmware update, invalid XDS110 serial number, or faulty USB connection. The firmware and serial number may be updated using the xdsdfu utility found in the …/ccs_base/common/uscif/xds110 directory of your installation. View the ReadMe.txt file there for instructions. (Emulation package 6.0.14.5)
Failed: Operation was aborted

[/intense_emphasis]

 

Kemudian saya mencoba peruntungan dengan mempergunakan CCS Cloud dari Texas Instruments. Selain dengan menggunakan Energia, pengguna (programmer) dapat melakukan pemrograman dengan CCS (Code Composer Studio). TI (Texas Instruments) menyediakan dua pilihan penggunaan CCS; CCS berbasis web (CCS Cloud) dan CCS pada desktop.

http://www.ti.com/ww/en/launchpad/img/launchpad_software_bubbles.png

image credit: ti.com

 

Sayangnya sekalipun saya berhasil melakukan instalasi plug-in untuk browser Firefox, saya mengalami masalah saat perlu melakukan instalasi TI Cloud Agent. Aplikasi tersebut memerlukan libusb-1.0.so. Seperti pada panduan, permasalah seperti ini bisa dicoba diselesaikan dengan melakukan instalasi:

[intense_emphasis tag=”span”]

sudo apt-get install lib32stdc++6 libc6-i386 libusb-1.0-0-dev:i386

[/intense_emphasis]

Jika saat instalasi terjadi pesan kesalahan berikut:

Reading package lists… Error!

E: Encountered a section with no Package: header

maka dapat diperbaiki dengan perintah:

sudo rm /var/lib/apt/lists/* -vf

sudo apt-get update

Cara lain untuk mendapatkan file libusb-1.0.so adalah dengan mencari file tersebut di dalam sistem. Karena mungkin saja file tersebut sebenarnya sudah ada di dalam sistem. Misalnya untuk sistem saya:

[intense_emphasis tag=”span”]

$ locate libusb-1.0.so

/home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so

/home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so.0

/home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so.0.1.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.10.0.201607251855/tools/openocd/lib/libusb-1.0.so

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.10.0.201607251855/tools/openocd/lib/libusb-1.0.so.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.10.0.201607251855/tools/openocd/lib/libusb-1.0.so.0.1.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.8.0.201603291120/tools/openocd/lib/libusb-1.0.so

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.8.0.201603291120/tools/openocd/lib/libusb-1.0.so.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.8.0.201603291120/tools/openocd/lib/libusb-1.0.so.0.1.0

/home/sunuXx/eclipseArduino/arduinoPlugin/tools/arduino/avrdude/6.0.1-arduino5/lib/libusb-1.0.so

/home/sunuXx/eclipseArduino/arduinoPlugin/tools/arduino/avrdude/6.0.1-arduino5/lib/libusb-1.0.so.0

/home/sunuXx/eclipseArduino/arduinoPlugin/tools/arduino/avrdude/6.0.1-arduino5/lib/libusb-1.0.so.0.1.0

/lib/i386-linux-gnu/libusb-1.0.so.0

/lib/i386-linux-gnu/libusb-1.0.so.0.1.0

/lib/x86_64-linux-gnu/libusb-1.0.so.0

/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0

/usr/lib/x86_64-linux-gnu/libusb-1.0.so

[/intense_emphasis]

 

Jika file tersedia maka bisa diberikan perintah berikut untuk soft link;

[intense_emphasis tag=”span”]

$ cd /usr/lib

/usr/lib $ sudo ln /home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so libusb-1.0.so

[/intense_emphasis]

 

Kembali ke permasalahan dengan Energia, tampaknya saya sedang beruntung. Energia telah merilis Energia 18 aka Energia 1.6.10E18 yang merupakan pembaharuan yang membawa perbedaan yang cukup signifikan dari versi terdahulu. Versi terbaru ini telah mendekati versi IDE yang baru dari Arduino. Misalnya sudah terdapat fasilitas line numbers dan code folding. Pengaturan pustaka dan pengaturan papan (board management) juga berubah. Sayangnya saya mendapatkan pesan adanya invalid library pada versi ini. Sebagai solusinya untuk sementara maka pustaka SPI dan WIRE saya hapus dari  .energia15/packages/energia/hardware/msp432/1.0.15/libraries/. Keduanya masih saya biarkan di folder Energia 17.

Kemudian setelah membaca beberapa pengalaman orang lain sepertinya masalah yang pertama kali saya temui sebagaimana yang telah saya ungkapkan di awal catatan ini adalah masalah yang berkaitan dengan DSlite. Pengalaman para pendahulu dapat dibaca dan dipelajari di sumber-sumber berikut:

 

Upaya penyelesaian masalah yang saya tempuh adalah dengan melakukan copy DSlite dari Energia 18 ke Energia 17.

~/energia18 $ reset;find . -iname “*DSl*”

./hardware/tools/DSLite
./hardware/tools/DSLite/DebugServer/bin/DSLite
./hardware/tools/DSLite/DebugServer/scripts/readAtBp.dsls
./hardware/tools/DSLite/DebugServer/scripts/load.dsls
./hardware/tools/DSLite/DebugServer/scripts/flash.dsls
./hardware/tools/DSLite/DebugServer/scripts/help.dsls
./hardware/tools/DSLite/DebugServer/scripts/runWithCIO.dsls
./hardware/tools/DSLite/common/uscif/libxdslocal.so

Sedangkan pada Energia 17

~/energia0101E0017 $ reset;find . -iname “*DSlite*”

./tools/common/DSLite
./tools/common/DSLite/DebugServer/bin/DSLite

 

Pada Energia 18, file DSlite akan memberikan keterangan sebagai berikut:

~/energia18 $ ./hardware/tools/DSLite/DebugServer/bin/DSLite help

DSLite version 6.2.1.1595
DSLite [operation] [Args…]

load
Loads the specified file and exits, leaving the
target running

runWithCIO
Loads the specified file and runs the target,
printing stdout to the console. Exits when the
application returns from main

flash
Performs multiple flash-based operations as
specified on the command line including
erasing, loading, verifying, and device-
specific flash operations

readAtBp
Loads the specified file and runs the target to
a specified location. Variables can be written
before the run, and others echoed to the
console after

help
Prints this message

 

wp-1471014060962.jpegGambar 1. Uji pemgrograman dengan menggunakan Energia

wp-1471012462589.jpegGambar 2. Uji pemrograman online dengan CCS Cloud di Firefox

wp-1471013479603.jpegGambar 3.  Uji online debuging (stepping) menggunakan CCS Cloud

wp-1471016447336.jpegGambar 4. Uji pengaturan (penggantian) warna LED secara online

Demikianlah catatan tinkering kali ini. Di lain kesempatan saya upayakan catatan untuk compiler, juga IDE lain. Juga uji coba pada sistem Microsoft Windows.