Debugging STM32F103C8T6 menggunakan SW4STM32 + OpenOCD + STLINK

Ini adalah bagian keempat mengenai penggunaan SW4STM32. Bagian sebelumnya telah disebutkan di tulisan ini. Setelah sebelumnya berhasil melakukan instalasi SW4STM32, di sini akan diungkapkan catatan mengenai bagaimana mempergunakannya untuk proses debugging.

Untuk kelancaran proses berikutnya; lakukan terlebih dahulu instalasi ST-Link V2 dan OpenOCD. Instalasi perangkat lunak untuk ST-LinkV2 sudah dibahas di tulisan sebelumnya [link].  Untuk OpenOCD pun proses instalasinya umumnya tidak terlalu sulit, terutama untuk sistem berbasis Microsoft Windows. Untuk sistem GNU/Linux setelah mengunduh file instalasinya di link ini, maka lakukan proses berikut:

cd ~/openocd-0.9.0
sudo ./configure
sudo make
sudo make install

Kembali ke SW4STM32:

OCDdebug001Gambar 1. Awal pengaturan untuk debugging.

OCDdebug002Gambar 2.

Jika cara seperti pada Gambar 1 dan Gambar 2 menghasilkan pesan keesalahan, maka cobalah cara seperti Gambar 3.

OCDdebug003Gambar 3.

OCDdebug004Gambar 4. Pada proses debugging untuk pertama kali, diperlukan pengaturan seperti ini.

OCDdebug005Gambar 5.

OCDdebug006Gambar 6.

OCDdebug007Gambar 7. Scroll ke bawah hingga seperti pada Gambar 8.

OCDdebug008Gambar 8.

OCDdebug009Gambar 9.

Selain mempergunakan konfigurasi Ac6, pengguna bisa juga mempergunakan cara debugging lain seperti pada Gambar 10.

OCDdebug010Gambar 10.

OCDdebug011Gambar 11.

OCDdebug012Gambar 12.

OCDdebug013Gambar 13.

OCDdebug014Gambar 14.

OCDdebug015Gambar 15.

Nah sekarang pengguna sudah memilki dua konfigurasi debugging yang siap dipergunakan. Tetapi sebelum melakukan mencoba upaya debugging dengan bantuan OpenOCD + STLINK, perlu dilakukan perubahan kode uji. Gambahkan di bagian endless loop dengan kode uji coba blinking led:

  while (1)
    {
//      HAL_GPIO_TogglePin (LedMerah_GPIO_Port, LedMerah_Pin);
      HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
      HAL_Delay (100);
      /* USER CODE END WHILE */
      /* USER CODE BEGIN 3 */
    }

Hubungkan dongle ST-LINK V2 ke port USB di komputer.

wp-1472023019498.jpegGambar 16.

Lalu aktifkan OpenOCD dengan baris perintah berikut (sesuaikan letak file dengan konfigurasi di komputer pengguna):

$ reset; openocd -f ~/openocd-0.9.0/tcl/interface/stlink-v2.cfg -f ~/openocd-0.9.0/tcl/target/stm32f1x.cfg

Saat aktif OpenOCD pada terminal seperti pada Gambar 17.

OCDdebug016Gambar 17. OpenOCD menunggu koneksi.

Jika nanti dengan konfigurasi standard yang diatur oleh SW4STM32 gagal berfungsi dengan baik, salah satu upaya solusi adalah dengan membuat file konfigurasi baru yang akan diacu oleh setting dalam SW4STM32. Konfigurasi dalam file STM32F103SW.cfg yang perlu diganti (di dalam file lain) adalah: reset_config srst_nogate.

# This is an STM32F103SW board with a single STM32F103C8Tx chip.
# Generated by System Workbench for STM32

source [find interface/stlink-v2.cfg]

set WORKAREASIZE 0x5000
transport select "hla_swd"


source [find target/stm32f1x_stlink.cfg]

# use hardware reset, connect under reset
#reset_config srst_only srst_nogate
reset_config srst_nogate

Jika papan mikrokontroler STM32F103C8T6 tidak dapat diprogram atau di-debug, salah satu cara adalah dengan melakukan erase. Ubah posisi jumper seperti pada Gambar 18.

wp-1472127176031.jpegGambar 18.

Lalu seperti pada Gambar 19 perintah erase dapat dilakukan setelah tombol reset pada papan ditekan dalam keadaan konfigurasi jumper seperti pada Gambar 18.

OCDdebug017Gambar 19. st-flash erase

Ok, sekarang kembali ke Gambar 16, diasumsikan semua kondisi normal dan posisi jumper sudah kembali ke posisi seperti pada gambar. Dilanjutkan pada posisi monitoring seperti pada Gambar 17. Maka proses debugging siap dilakukan dari dalam SW4STM32.

OCDdebug018Gambar 20.

Pada pilihan konfigurasi seperti pada Gambar 20, debugging terkadang dapat saya lakukan tanpa perlu melakukan aktifasi OpenOCD eksternal. Tetapi untuk amannya maka tetap pergunakan OpenOCD eksternal.

OCDdebug019Gambar 21. [Klik gambar untuk memperbesar tampilan]

Hal  yang sama juga diperoleh jika mempergunakan konfigurasi GDB Hardware Debugging.

Berikut adalah video singkat proses uji debugging.

[intense_video video_type=”youtube” video_url=”https://www.youtube.com/watch?v=6MtAfxhhEsE”]

Instalasi AC6 SW4STM32 untuk pemrograman ARM Cortex-M3 STM32F103

Catatan ini adalah bagian ketiga dari catatan rangkaian proses penyusunan program untuk mikrokontroler keluarga STM32: STM32F103C8T6. Mikrokontroler ini dibangun berdasar arsitektur prosesor 32-bit ARM Cortex-M3, yang lebih komplex daripada kelompok 8-bit (MCS51, Armel AVR) dan 16-bit (MSP430). Karena kompleksitas itulah proses pengerjaannya pun berbeda dari keluarga mikrokontroler lainnya.

Pada bagian pertama dari rangkaian tulisan ini, telah diperkenalkan aplikasi/program komputer yang dibuat oleh STMicroelectronics, yaitu STM32CubeMX. Dalam catatan itu juga telah diungkapkan cara membaca arti dari penamaan mikrokontroler STM32. Dengan cara itu telah bisa didapatkan kode awal (initialization code) yang bisa dipergunakan untuk melakukan pemrograman pada (misalnya), seri STM32F103. Kode yang dikembangkan dapat berfungsi baik jika dimuat ke dalam mikrokontroler. Tetapi jika programmer perlu untuk melakukan debugging maka pengaturan itu belum lah cukup. Jika dipaksakan untuk dipergunakan maka akan menghasilkan kesalahan.

Diperlukan perbaikan pada konfigurasi dengan SW4STM32. Saya sendiri perlu waktu untuk menemukan akar masalah, penyebab kesalahan pada saat debugging. Perlu uji coba berulang kali sendiri dan penelusuran pengalaman oleh orang lain yang sudah pernah mencoba. Suatu saat akan coba saya ungkapkan sebagai bagian dari pelajaran bersama. Catatan konfigurasi yang sukses dipakai untuk keperluan debugging itu sudah saya ungkap melalui tulisan di ini, yang merupakan bagian kedua dari rangkaian tulisan.

Untuk bagian ketiga ini saya akan coba mengungkap catatan tentang penggunaan SW4STM32 untuk pemrograman dan debugging.

sw4stm32f001Gambar 1.

SW4STM32 adalah singkatan dari System Workbench for STM32, seperti yang diperlihatkan pada Gambar 1. Pada dasarnya SW4STM32 adalah sebuah IDE (Integrated Development Environment) yang dibangun di atas IDE Eclipse. Ini hampir mirip dengan salah satu implementasi PlatormIO yang dibangun dengan menggunakan text editor Atom. Dari menu Help dapat terlihat versi Eclipse yang dipergunakan, seperti pada Gambar 2. Dengan catatan tentu setiap pembaruan versi SW2STM32 akan ada kemungkinan bahwa versi Eclipse IDE juga akan berubah.

sw4stm32f002Gambar 2. Versi Eclipse IDE yang dipergunakan sebagai dasar dari SW4STM32

sw4stm32f003Gambar 3. Versi SW4STM32 yang saat ini saya pergunakan.

Saya dapat memberikan langsung tautan ke halaman untuk melakukan pengunduhan progaram SW4STM32, tetapi akan lebih bagus jika prosesnya dimundurkan sedikit lebih jauh. Bagaimana mencari melalui kata kunci di layanan mesin pencari Google.

sw4stm32f004Gambar 4.

Dari situs STMicroelectronics, dapat ditemukan keterangan singkat yang baik mengenai SW4STM32. Intinya program SW4STM32 tidak dibuat oleh STMicroelectronics, melainkan oleh pihak ketiga yaitu AC6. Sedangkan software dan layanan yang berikaitan dengannya di www.openstm32.org. Untuk mendapatkan akses ke layanan download maupun panduan instalasi, pengguna perlu terlebih dahulu melakukan registrasi di situs openstm32, sebagaimana terlihat di Gambar 6.

sw4stm32f005Gambar 5.

sw4stm32f006Gambar 6.

Di halaman http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer dapat ditemui pilihan instalasi untuk sistem Windows / Mac OS/X / GNU/Linux. Ada beberapa informasi yang cukup penting di halaman tersebut, berkenaan dengan proses instalasi, misalnya konsisi saat perlu dilakukan perintah:

sudo apt-get install libc6:i386 lib32ncurses5

SW4STM32 juga membutuhkan tersedianya Java, pada saat saya menulis ini yang diperlukan adalah minimal JavaRE 7. Panduan instalasi Java bisa dicari di sini.

sw4stm32f007Gambar 7.

Gambar 7, hasil screenshot halaman panduan instalasi memberikan keterangan yang penting mengenai instalasi pada Ubuntu 12.04. Pada sistem saya, SW4STM32 masih dapat berfungsi dengan baik:

Linux pengguna 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

Kadang-kadang akses ke Properties >> C/C++ Build >> Settings memerlukan waktu yang sangat lama. Di sistem GNU/Linux Ubuntu atau turunannya salah satu solusi yang saya coba dan berhasil dipergunakan adalah yang berasal dari tutorial ini >> [link]. Untuk konfigurasi desktop entry (icons) /home/rumahku/Desktop/sw4stm32_shortcut.desktop.

env UBUNTU_MENUPROXY=0 SWT_GTK3=0

[Desktop Entry]
Name=System Workbench for STM32
Comment=System Workbench for STM32 IDE
Exec=env UBUNTU_MENUPROXY=0 SWT_GTK3=0 /home/sunu/AC6SyWbSTM32/eclipse
Icon=/home/sunu/AC6SyWbSTM32/logo_openstm32.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true

 

Gambar 8. SW4STM32 saat pertama kali dipergunakan

Untuk melakukan progrograman atau debugging pada hasil konfigurasi awal yang diperoleh sebelumnya dari kegiatan yang telah saya catatkan di halaman ini dan halaman ini, pengguna perlu melakukan impor seperti terlihat pada Gambar 9.

sw4stm32f009Gambar 9.

sw4stm32f010Gambar 10.

sw4stm32f011Gambar 11. Melakukan import kode dasar yang dihasilkan oleh STM32CubeMX

sw4stm32f012Gambar 12. Pengujian pertama kali kode dasar (tanpa perubahan kode)

sw4stm32f013Gambar 13. Hasil dari perintah build.

Penggunaan SW4STM32 untuk kegiatan debugging dan pemrograman pada hardware mikrokontroler, akan dibahas di lain catatan.

Mempersiapkan program STM32F103C8T6 dengan mempergunakan STM32CubeMX

ztm32N01image credit: http://www.st.com/resource/en/data_brief/stm32cubemx.pdf

Sebagaimana telah diperkenalkan pada artikel yang lalu, STM32CubeMX memang terbukti benar-benar mempermudah pekerjaan para professional embedded developer maupun upaya belajar bagi yang baru memulai. Ada beberapa pengaturan yang diperlukan yang akan ditemui sepanjang proses belajar untuk memaksimalkan penggunaan STM32CubeMX. Salah satu contohnya adalah pengaruh konfigurasi yang dihasilkan (generated) oleh STM32CubeMX pada proses debugging dengan menggunakan OpenOCD. Secara default STM32CubeMX akan mematikan (disable) kemampuan debugging pada mikrokontroler STM32F103C8T6 yang sedanga dikonfigurasi. Jika ini tidak diubah maka proses debugging  mikrokontroler STM32F103C8T6 dengan OpenOCD melalui ST-Link V2 (clone) akan terganggu dan menimbulkan kesalahan.

ztm32N03Gambar 1.

Gambar 1 menampilkan konfigurasi awal dan tanda panah merah menunjukkan peripheral SYS  yang perlu diatur ulang dari nilai asalnya. Nilai yang perlu diubah ditampilkan pada Gambar 2.

ztm32N04Gambar 2.

ztm32N05Gambar 3.

Agar proses debugging mikrokontroler STM32F103C8T6 dengan OpenOCD dan ST-Link V2 dapat berjalan lancar, pengguna bisa memilih mode debug Serial Wire pada peripheral SYS, sebagaimana pada {1} di Gambar 3.

ztm32N06Gambar 4.

Setelah melakukan konfigurasi untuk proses debug pada seperti pada Gambar 3, proses dapat dilanjutkan dengan melakkan konfigurasi pada semua bagian lain yang diperlukan. Misalnya dalam mempelajari STM32 menggunakan papan μC STM32F103C8T6 yang murah meriah, pengguna perlu melakukan konfigurasi ulang pada pin PC13. Pin tersebut terhubung dengan satu led berwarna merah yang sangat mudah dijadikan bahan awal belajar maupun sebagai salah satu penanda proses (termasuk untuk debugging). Hasilnya seperti yang terlihat di Gambar 4, sedangkan untuk proses pengerjaannya dapat dibaca pada post sebelumnya di sini.

wp-1472023019498.jpegGambar 5. Papan sistem μC STM32F103C8T6 yang relatif murah sebagai sarana belajar.

Hasil konfigurasi STM32CubeMX yang berhubungan dengan debugging  yang telah diungkapkan dapat dilihat di dalam file stm32f1xx_hal_msp.c seperti yang terlihat di Gambar 6.

ztm32N07Gambar 6.

Baris kode yang benar yang memungkinkan dilakukannya proses debugging yang telah diatur dengan STM32CubeMX, yang teradapat di file stm32f1xx_hal_msp.c adalah:

__HAL_AFIO_REMAP_SWJ_NOJTAG();

Atau seperti bisa dilihat pada Gambar 7 pada baris ke 75. Baris ke 73 adalah kode yang dihasilkan secara default oleh CubeMX, kode ini akan menghasilkan kesalahan dalam proses debugging dengan menggunakan OpenOCD+ST-Link V2(+GDB). Kode pada baris ke 74 adalah untuk konfigurasi dengan JTAG 4 pin.

ztm32N08Gambar 7.

//  __HAL_AFIO_REMAP_SWJ_DISABLE(); //Kalau JTAG disabled pada STM32CubeMX akan error
//  __HAL_AFIO_REMAP_SWJ_NONJTRST(); //JTAG 4
  __HAL_AFIO_REMAP_SWJ_NOJTAG(); // Serial Wire debug

ztm32N09Gambar 8. [Klik pada gambar untuk memperbesar tampilan]

Gambar 8 menampilkan proses debugging yang benar dengan mempergunakan konfigurasi seperti yang terlihat pada Gambar 7 (debug enabled). Sedangkan pada Gambar 9, terlihat kesalahan yang terjadi jika masih menggunakan kode default: __HAL_AFIO_REMAP_SWJ_DISABLE. Pesan kesalahan dari OpenOCD:

Error: jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect

ztm32N10Gambar 9. Bukti tampilan kesalahan debugging STM32F103C8 sebagai akibat dari salah konfigurasi pada STM32CubeMX

Video singkat cuplikan contoh stepping pada proses debugging.

[intense_video video_type=”youtube” video_url=”https://www.youtube.com/watch?v=6MtAfxhhEsE”]

Mendapatkan hasil kompilasi dengan debug symbols di Atom+PlatformIO

PlatformIO pada text editor Atom dapat dipergunakan untuk menghasilkan kode program yang bisa di-debug. Tetapi tanpa pengaturan yang tepat akan muncul kesalahan sebagaimana yang terlihat di Gambar 1 (no debugging symbols found).

xpiodbg003Gambar 1.

Untuk mengatasi masalah ini solusinya adalah dengan memberikan keterangan tambahan pada file platformio.ini .

xpiodbg001Gambar 2.

Untuk lebih mempermudah bisa disalin dari bagian berikut ini:

#
# PlatformIO Project Configuration File
#
# Please make sure to read documentation with examples first
# http://docs.platformio.org/en/stable/projectconf.html
#
[env:nucleo_f103rb]
platform = ststm32
framework = mbed
#build_flags = -g
board = nucleo_f103rb
upload_protocol = stlink

Keterangan lengkap mengenai penggunaan building options  di PlatformIO bisa dibaca di link ini. Untuk opsi debugging dengan compiler GCC bisa dibaca di sini.

-g

Produce debugging information in the operating system’s native format (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging information.

On most systems that use stabs format, -g enables use of extra debugging information that only GDB can use; this extra information makes debugging work better in GDB but probably makes other debuggers crash or refuse to read the program. If you want to control for certain whether to generate the extra information, use -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).

 

xpiodbg002Gambar 3. Hasil kompilasi yang berhasil di-debug  dengan DDD dan gdb.

 

 Command  Explanation
bp <address> [<asid>]<length> [‘hw’|’hw_ctx’]

list or set hardware or software breakpoint

exit exit telnet session
halt [milliseconds]

request target to halt, then wait up to the specifiednumber of milliseconds (default 5000) for it to complete

init Initializes configured targets and servers. Changes command mode from CONFIG to EXEC.  Unless ‘noinit’ is called, this command is called automatically at the end of startup. (command valid any time)
load_image filename address [ ‘bin’ | ‘ihex’ | ‘elf’ | ‘s19’ ] [min_address] [max_length]
reg [(register_number|register_name) [(value|’force’)]]

display (reread from target with “force”) or set a register; with no arguments, displays all registers and their values

reset [ run | halt | init ]

Reset all targets into the specified mode.Default reset mode is run, if not given.

resume [address]

resume target execution from current PC or address

step  [address]

step one instruction from current PC or address

Cmd
  • openocd -f ~/openocd-0.9.0/tcl/interface/stlink-v2.cfg -f ~/openocd-0.9.0/tcl/target/stm32f1x.cfg
  • telnet localhost 4444
    • help
    • halt
  • arm-none-eabi-gdb ––eval-command=”target remote localhost:3333″ firmware.elf
  • ddd ––eval-command=”target remote localhost:3333″ ––debugger arm-none-eabi-gdb firmware.elf

 

Mengenal PlatformIO

Pada kesempatan ini saya akan memuat catatan mengenai PlatformIO. Sebelumnya saya sudah membuat catatan penggunaan text editor maupun IDE seperti Energia, Codelite, Netbeans maupun Arduino IDE. Masing-masing IDE tentu memiliki keunggulan dan kekurangan dan masing-masing programer akan memilki kebutuhan dan selera yang berbeda-beda. Nah PlatformIO ini cukup unik, di satu sisi cukup lengkap dan mampu dipergunakan untuk mengerjakan kode untuk berbagai arsitektur mikrokontroler. Di sisi lain tampilannya menyerupai Sublime Text yang ringan dan sederhana.

pio001Gambar 1.

Di Gambar 1 dapat dilihat beberapa contoh default dan proyek yang dibuat manual. Yang sudah saya coba ada beberapa mikrokontroler, yang juga sudah pernah saya uji dengan IDE atau cara lain. Berikut beberapa arsitektur mikrokontroler yang sudah saya coba di PlatformIO (atau Atom);

Sebagai catatan untuk melakukan pemrograman pada STM8 (STM8S103F3); sekalipun PlatformIO tidak mendukung secara langsung toolchain STM8 tetapi editornya masih dapat dimanfaatkan dan mampu membantu keberhasilan pemrograman. Dapat dilihat pada Gambar 2.

pio002Gambar 2. [Klik gambar untuk memperbesar tampilan]

PlatformIO bukanlah text editor dalam pemahaman yang biasa dipergunakan. Pengungkapan yang lebih baik bisa diperoleh dari situs PlatformIO sendiri.

pio003Gambar 3. Apakah PlatformIO itu?

“Different microcontrollers normally have different developing tools . For instance Arduino rely on Arduino IDE. Few more advanced users set up different graphical interfaces like Eclipse for better project management. Sometimes it may be hard to keep up with different microcontrollers and tools. You probably thought that single unified development tool could be great. Well this is what PlatformIO open source ecosystem is for.

This is cross platform code builder and library manager with platforms like Arduino or MBED support. They took care of toolchains, debuggers, frameworks that work on most popular platforms like Windows, Mac and Linux. It supports more than 200 development boards along with more than 15 development platforms and 10 frameworks. So most of popular boards are covered. They’ve done hard work in organizing and managing hundreds of libraries that can be included in to your project. Also lots of examples allow you to start developing quickly. PlatformIO initially was developed with Command line philosophy. It’s been successfully used with other IDE’s like Eclipse or Visual Studio. Recently they’ve released a version with built in IDE based on Atom text editor”, – [Embedds].

 

PlatformIO dapat diintegrasikan ke dalam beberapa IDE di antaranya NetBeans, Codeblocks, dan Visual Studio. Meski begitu tampaknya yang terkenal adalah implementasinya ke dalam text editor Atom.io.

Atom is a text editor that’s modern, approachable, yet hackable to the core—a tool you can customize to do anything but also use productively without ever touching a config file.

Mungkin karena itu kadang-kadang PlatformIO dicampuradukkan dengan Atom. Keduanya jelas berbeda meski untuk banyak keperluan praktis merujuk pada hal yang sama. Perbedaan baru akan terlihat jika menemui kasus seperti contoh pada pemrograman STM8S103F3 di bagian atas tulisan ini. Untuk pemrograman contoh led berkedip itu, PlatformIO belum bisa mendukung platform maupun board sistem STM8. Karena itu yang bisa dimanfaatkan “hanya” text editor Atom saja. Tetapi dapat dilihat, dalam kondisi seperti itu pun terbukti masih bisa membantu menyelesaikan pemrograman dengan baik.

PlatformIO IDE yang dibangun berdasar text editor Atom dapat diunduh (download) di link ini. Saya sudah berhasil mencoba instalasi di sistem GNU/Linux, tetapi gagal mencoba di sistem tua saya, IBM Thinkpad T43 yang masih menggunakan Microsoft Windows XP SP3. PlatformIO mensyaratkan OS yang lebih baru dari XP.

Linux pengguna-laptop 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

 

Ada beberapa pengaturan yang perlu dilakukan agar manfaat yang bisa diberikan platform ini dapat dipergunakan secara maksimal. Salah satu pengaturan yang memerlukan perhatian adalah mengenai clang. Sekilas mengenai Clang dapat dipelajari di sini, begitu pula perbandingannya dengan GCC dapat dibaca di sini.

pio004Gambar 4

Ada dua paket yang perlu menjadi perhatian; autocomplete-clang dan clang-format package. Jika belum terinstalasi dengan baik maka keduanya sebaiknya diinstal terlebih dahulu. Paket yang pertama (autocomplete-clang) sangat membantu proses coding , fungsi dan cara kerjanya dapat lebih mudah dipahami melalui gambar gif berikut:

autocomplete-clangGambar 5. Fasilitas autocomplete [image credit: autocomplete-clang package]

pio006Gambar 6. Melihat paket clang di Settings.

Paket yang kedua (clang-format package) juga sangat membantu pengerjaan kode program. Tetapi berdasar apa yang saya alami, paket kedua ini memerlukan usaha yang lebih agar dapat mudah dipakai. Dari situs penyimpanan kode atom-clang-format:

Format your C/C++/Obj-C/Javascript files with clang-format from inside atom. Requires clang-format to be installed and on your systems path.

More info on clang-format can be found here: http://clang.llvm.org/docs/ClangFormat.html http://clang.llvm.org/docs/ClangTools.html

Pengaturan untuk clang-format disimpan di dalam file .clang-format (tanda titik menandakan bahwa file tersebut secara default tersembunyi di file manager). Untuk dapat melihat file itu di file manager, beri perintah dengan menekan kombinasi kunci di keyboard Ctrl+H. Di sistem saya file itu terletak di:

/home/rumahku/.atom/packages/clang-format/node_modules/clang-format/.clang-format

Yang cukup membuat repot, sejauh yang saya ketahui sampai saat ini, file tersebut perlu disalin manual ke setiap direktori proyek (project).

pio007Gambar 7.

Solusinya sebenarnya cukup mudah, tetapi perlu dilakukan. Salin (copy) file .clang-format ke home directory, untuk mesin saya ini menjadi

/home/rumahku/.clang-format

Adapun isi dari file .clang-format untuk konfigurasi yang saya kehendaki adalah sebagai berikut:

---
Language: Cpp
BasedOnStyle: LLVM
BreakBeforeBraces: GNU
ColumnLimit: 100

Dengan konfigurasi ini maka setiap file sumber untuk C atau CPP (C++) akan terformat ulang setiap kali diberikan perintah menyimpan kode di file. Pengguna bisa juga memberikan perintah untuk melakukan format secara manual melalui menu atau dengan shortcut: shift-cmd-K. Adapun isi dari konfigurasi bisa disimulasikan secara online di sini; https://clangformat.com/ .

Referensi tentang clang format <<klik untuk membuka>>

 

Pada Gambar 2, terlihat untuk platform yang tidak (belum) didukung oleh PlatformIO, maka hasil kompilasinya berada di direktori yang sama dengan file sumber. Pada mode ini yang dimanfaatkan adalah text editor Atom.  Tetapi untuk platform dan framework yang sudah didukung oleh PlatformIO peletakan hasil kompilasi dan build akan berbeda.

pio008Gambar 8.

Oleh PlatformIO hasil kompilasi akan diletakkan di direktori ./pioenvs . Sekedar sebagai contoh;

/tmp/atmelavr-native-blink-116720-6546-1qphcr7/.pioenvs/native_avr/

Sekalipun proses upload biasanya dapat dilangsungkan secara otomatis dengan bantuan PlatformIO, bisa jadi ada kebutuhan untuk melakukan operasi dengan command line di Terminal;

pio009Gambar 9.

pio010Gambar 10.

Mengenai perbedaan antara file elf dengan bin dapat dibaca di sini.

Untuk plaftorm dan framework yang sudah didukung oleh PlatformIO, proses upload dapat dilakukan oleh PlatformIO. Syaratnya pengguna memberi informasi yang cukup agar perintah pengunggahan tidak salah. Konfigurasi disimpan di file platformio.io yang disimpan di masing-masing root direktori proyek, contohnya:

/home/rumahku/platformioSTM32F103/platformio.ini

Misalnya untuk STM32 (mikrokontroler STM32F103C8T6) yang telah didukung oleh PlatformIO (melalui nucleo_f103rb) isi platformio.ini adalah:

#
# PlatformIO Project Configuration File
#
# Please make sure to read documentation with examples first
# http://docs.platformio.org/en/stable/projectconf.html
#
[env:nucleo_f103rb]
platform = ststm32
framework = mbed
board = nucleo_f103rb
upload_protocol = stlink

pio011Gambar 11.

Pada arsitektur STM32 jika yang dipakai adalah stlink maka perlu ditambahkan keterangan
  upload_protocol = stlink   di file platformio.ini . Diskusi mengenai kesalahan yang terjadi ada di sini dan acuan lengkap konfigurasi dapat dilihat di sini.

Gambar 12. Hasil proses uploading oleh PlatformIO

Satu hal lain yang menarik yang saya temui adalah tentang penggunaan framework mbed pada platform ststm32 (STM32). File sumber harus disimpan dengan ekstensi .cpp, jika disimpan dengan ekstensi .c maka akan manghasilkan kesalahan:

pio013Gambar 13. Kesalahan kompilasi dengan framework mbed.

Penjelasan mengenai kesalahan ini terdapat di sini:

mbed is c++-based framework. You should use *.cpp extension.

Please change file extension from *.c to .cpp.

 

pio014Gambar 14.

 

 

Pemrograman C untuk MSP430 dengan Netbeans

Ada beberapa text editor dan IDE (integrated development environment) yang bisa dipergunakan untuk melakukan pemrograman untuk mikrokontroler keluarga MSP430. Salah satu yang menarik adalah Netbeans. Sampai saat ini yang saya ketahui (AFAIK), yang menarik dari IDE Netbeans bila dibandingkan dengan Eclipse adalah bahwa adanya kemudahan pengaturan satu IDE untuk berbagai toolchain. Pada IDE Eclipse juga ada kemudahan mirip seperti ini, tetapi menurut saya sejauh ini Netbeans masih lebih mudah daripada Eclipse.

Dengan makefile yang sesuai ada beberapa sistem yang dapat diprogram dengan satu IDE Netbeans yang sama. Misalnya Avr, Arduino dan MSP430. Untuk make dan makefile pada sistem MSP430 sudah diungkap pada catatan sebelumnya.

nbeans05Gambar 1.

nbeans04Gambar 2.

nbeans06Gambar 3.

nbeans07Gambar 4.

nbeans08Gambar 5.

nbeans09Gambar 6.

nbeans10Gambar 7.

nbeans11Gambar 8.

nbeans12Gambar 9.