Wednesday, May 1, 2019

Perbedaan antara varaibel global, variabel static dan variable lokal

Mungkin beberapa dari kita hanya mengetahui dua jenis variabel dalam pemrograman. Dalam hal ini pemrograman yang saya maksudkan adalah pemrograman C. Mungkin juga diantara kita, yang suka window shoping ke gitlab orang-orang jago kadang menemukan istilah static yang diikuti dengan nama tipe data kemudian nama variabel. Pada kesempatan ini, saya akan mengetik kembali (menyadur) dari link ini tentang perbedaan antara variabel global dan variabel static. Kemudian akan menambah penjelasan tentang variabel lokal. Dalam penuturan(anggap saja saya sedang berkisa) ini, akan saya tampilkan juga contoh dan penggunaan dari variabel variabel tersebut.

Mari langsung kita mulaikan saja.

Pertama adalah tentang variabel global. Jenis variabel ini sangat poluler bagi programer muda/awal/newbe. Karena sifatnya yang dapat diakses dari mana saja dan kapan saja. Pendeklarasian variabel global diletakkan pada file .c sementara pada file .h adalah extern nya. Kata extern akan menjadi penanda bahwa variabel global tersebut sudah pernah di deklarasikan, dalam hal ini di file .c. Tanpa penambahan extern, variabel global ini tidak dapat digunakan pada file yang berbeda, atau dapat namun dengan status warning setelah compile. Pesan sponsornya adalah

Global Variable Are Evil
Mengapa disebut demikian, gambar dibawah ini akan menjelaskan beberapa hal.

Atau lebih lengkatnya dapat berkunjung ke link ini

Selanjutnya tentang variabel static. Jenis variabel ini dapat ditemukan pada kode kode orang yang pro atau yang menuju pro. Mengapa, karen orang jenis ini sudah mulai merencanakan variabel apa saja yang dapat diakses global dan apa saja yang hanya dapat diakses atau digunakan pada lingkup file / proses tertentu. Mungkin variabel ini dapat dikatakan juga dengan variabel global terbatas. Mengapa disebut terbatas, karena variable ini hanya dapat dilakukan dalam satu file tersebut. Jika kita perlakukan seperti variable global, dengan menambahkan extern di file .h. yang akan terjadi malah compliler akan menulaknya alias memberikan pesan error.

variabel static kurang evil dibanding variabel global.
Terakhir adalah variabel lokal. Variabel ini sering dideklarasi dengan satu huruf dan huruf yang paling sering digunakan adalah i, setelah itu j dan k. Mengapa demikian, karena hampir semua programer diawal awal berkenalan dengan bahasa pemrograman akan menggunakan variabel ini dalam proses perulangan. Karena proses ini perlu variabel sebagai hal yang akan di incriment atau decriment. Maka si i menjadi pilihan untuk digunakan, berhubung pada beberapa buku dan text book juga menggunakan si i. Variabel lokal, hanya dapat digunakan dalam fungsi dimana variabel tersebut di deklaraskan. Tidak menggunakan kata static sebelum tipe data dan extern dengan harapan dapat di akses oleh fungsi yang lain (hehehe kalimat terakhir ini, hanya candaan saja).

Sekian dan terima kasih

Tuesday, February 5, 2019

Tambah Lib pada Atolic TrueStudio - STM32

Contoh project kriptografi ini sebenarnya sudah ada dengan project keil dan iar, namun belum ada untuk project TrueStudio. Sebenarnya ada tools untuk mengkonvert project iar ke project TrueStudio, namun setelah dicoba hasilnya kurang memuaskan dan tambah memusingkan. Sehingga jalur ini dipilih, yaitu buat project baru dan tambahkan file dan setting secara manual. Mari kita mulai.

Alat dan bahan

  1. Tentunya, di komputer kita sudah menginstal aplikasi IDE TrueStudio
  2. Telah memiliki file .Lib yang akan kita gunakan. Lib kripto grafi dapat di download pada link.
  3. Projectnya telah create lebih dulu, berbasis pada controler stm32f4. Sehingga tidak dibahas pada artikel ini.

Proses penambahan kode ke dalam folder src project.

Sebelum menambahkan kode main, saya ingin menunjukkan susunan folder awal dari project yang digunakan. Seperti yang ditunjukkan pada gambar di bawa ini.

Gambar 1. Tab Project Explorer sebelum menambahkan lib.

Artikal ini akan mengacu pada contoh project STM32F4xx_Cryptographic_Templates. Jangan lupa untuk membuka file readme.txt untuk keterangan lebih lanjut.

Kemudian, copas file main.c, stm32f4xx_it.c dan stm32f4xx_it.h ke dalam folder src. Setelah itu coba di build. Hasil dari proses build dapat dilihat pada gambar dibawah ini

Gambar 2. Error karena penambahan kode pada main.c dan beberapa file yang lain.

Terlihat pada gambar ada dua anak panah merah. Anak panah di atas menunjukkan ada error pada file main.c. Sementara anak panah kedua menunjukkan keterangan error tersebut, yaitu tidak ditemukan file crypto.h. Tinggalkan sejenak error ini, kita lanjut dengan penambahan library sesuai dengan judul dari artikel ini.

Proses penambahan library pada project.

Daftar file dan folder yang dibutuhkan.
  • M4_CryptoHW_2_0_6.a
  • folder inc.
File dan folder diatas terdapat di STM32_Cryptographic --> Libraries --> STM32_Cryptographic_Library. Karena pada project yang kita gunakan juga terdapat folder Libraries (lihat gambar pertama). Maka saya menyarankan untuk copas folder STM32_Cryptographic_Library dan letakkan dalam folder Libraries. Setalah di copas, barulah kita menghapus file-file dan folder yang tidak digunakan (selain file dan folder di atas.)

Setting project.

Penambahan file dengan cara copas tidak serta-merta dapat menghilangkan error yang ditemui pada bagian Proses penambahan kode ke dalam folder src project. Pada bagian ini saya akan menunjukkan bagaimana cara setting agar project mengetahui keberadaan file yang ditambahkan sehingga dapat berhasil saat Build.

Gambar3. Penambahan lib dan pathnya.


Masuk kedalam project properties dengan cara klik kanan pada folder project di tab project explorer.

1. Tambah Path include.

  • Pilih Path and Symbol. Pada tab include klik tombol add.
  • Pada Add directory path. klik tombol workspace. Arahkan ke Libraries/STM32_Cryptographic_Library/inc. klik OK.
Gambar 4. Menunjuk lokasi file pada folder inc.

2. Tambah libraries.

  • Pilih Path and Symbol. Pada tab libraries klik tombol add. dan tambahkan
    :M4_CryptoHW_2_0_6.a
    
  • dan klik OK
  • Pada tab Library Path klik tombol add. Dan arahkan pad ke tempat dimana file .a tersebut berada.
    Libraries/STM32_Cryptographic_Library/binary/EWARM
    
  • dan klik OK
Sampai pada tahap ini. Proses setting project telah selesai.
Build dan kita lihat apa yang terjadi. Pada file main.c, error file include sudah tidak ada. Namun error bergeser ke file yang lain. Karena menurut saya contoh project pada artikel ini tidak membutuhkan file tersebut, maka file tersebut langsung saya delete saja. Kemudian coba di Build lagi dan Tada... Build sukses meskipun ada satu warning. Selanjutnya tugas kalian aja yang membereskan satu warning ini... Semoga sukses.

Gambar 5. Project berhasil build.

Sebagai formalitas

Selamat tinggal tahun 2018 yang penuh kejutan. Dan selamat datang tahun 2019 yang penuh dengan misteri.

Berikut ini adalah rangkuman kejutan di tahun 2018... Sebut saja begitu.




A post shared by Ricky Rawung (@ryq_r) on

Thursday, December 20, 2018

The error that appears in the Linux version of Atollic TrueStudio

The first time I used it, I thought that it would be as simple as adding an example of an existing project. but it's not that simple. there are two things that need to be considered even though they have nothing to do with the code directly, such as:

- Use of a slash (/) and backslash (\) symbols. This is found in the include file settings, on the Linux OS using the backlash (\) symbol.

- Use of backlash (\) symbols, at setting -> clinker -> general -> linker script. If it doesn't, it can cause an error when compiling.

Friday, August 31, 2018

HardFault_Handler pada STM32 pada project IDE SW4STM

Pada project yang di buat dengan SW4STM terkadang kita mengalami HardFault_Handler saat akan melakukan interupt. Hal ini terjadi karena file .s nya kurang tepat. masalahnya pada project yang di create oleh SW4STM menggunakan file default bernama startup_stm32.s, ketika dilihat di dalamnya memang alamat interrupt hendlernya kurang lengkap hal ini bisa langsung saja diganti dengan file yang sesuai (contoh : startup_stm32f030.s). file nya dapat di peroleh dari folder STM32F0xx_StdPeriph_Lib_V1.5.0 -->Libraries-->CMSIS-->Device-->ST-->STM32F0xx-->Source-->Templates-->gcc_ride7. atau sesuai dengan IDE yang digunakan (nama folder).

Thursday, March 1, 2018

Time to Market, Abstrakasi, development board, mikrokontroler dan Arduino

Tulisan ini sebenarnya ditujukan bagi orang awam dibidang elektronika atau mereka yang mempelajari embedded system dengan menggunakan board development arduino.
Isu klasik dibidang elektronika dan pengembangan perangkat adalah bagimana memotong atau memperingkas waktu pengembangan perangkat, atau istilah kerennya adalah time to market.
Sejak dulu para profesor dibidang elektronika terus berkarya untuk memperkecil time to market. Salah satu upaya yang dilakukan adalah dengan membuat sebuah development board yang mempermudah developer untuk mengimplementasikan rancangannya.

Jaman pengembangan primitif pun bergeser menjadi jaman pengembangan dengan absraksi yang lebih tinggi yaitu untuk implementasi sebuah rancangan, dapat membuat sebuah rangkaian rutin program dan meletakkannya dalam satu komponen untuk diproses. Komponen pemrosesan rutin program ini bisa diibaratkan dengan prosesor. Sebuah prosesor memiliki komponen utama yaitu Register, ALU dan CU.

Untuk menggunakan prosesor, diperlukan sarana antarmuka agar hasil komputasi dapat ditampilkan, dalam hal ini display. Sarana antarmuka yang dimaksud dapat berupa Pin atau jalur yang terhubung dengan driver dari sebuah display.

Fasilatas antarmuka yang sebelumnya berada diluar prosesor, dipindahkan kedalam paket sebuah prosesor, salah satu alasannya karena teknologi semikonduktor yang semakin kecil sehingga tersedia ruang yang cukup untuk menambahkan fitur antarmuka. Prosesor yang ditambah dengan fitur antar muka disebut kontroler (mikrokontorler).

Baiklah, saya rasa cukup penjelasannya tentang latar belakan, abstraksi dan prosesor. Lanjut dengan Hal utama yang ingin saya serukan yaitu menyamakan bahasa dan istilah.
Cerita tentang development board, saat ini ada development board yang sangat populer dan menjadi tonggak sejara perkembangan perangkat embedded system. Perangkat yang saya maksud adalah ardunio.

Sedikit sejarah tentang arduino, perangkat ini mulai dikembangkan pada tahun 2003. Saat ini istilah atau sebutan arduino akan langsung mengarah pada sebuah development board. Padahal untuk mengembangkan perangkat dengan arduino kita memerlukan sebuah editor dan kompiler program (Arduino IDE) dan bootloader. Sehingga kata arduino dapat mengarah pada tiga makna yaitu, Arduino IDE, board aruino dan bootloader arduino.

Jika ada yang menyebutkan arduino adalah mikrokontroler, maka statment tersebut adalah salah, karena arduino menunjuk pada tiga hal diatas. Untuk menunjukkan hardware arduino ada baiknya menyebut arduino dengan istilah board arduino. Sementara untuk menyebutkan program arduino atau tempat koding, ada baiknya disebut arduino IDE. Dan yang terahir adalah bootloader, isitilah ini kurang digunakan karena ketika IC yang digunakan pada board arduino biasanya sudah dilengkapi dengan bootloarder arduino.

Bagi para pembaca, semoga dapat menggunakan istilah yang sesaui untuk menunjuk sebuah produk.

Terus apa bedanya Arduino dengan esp8266. Nah, statment ini menarik. Sebelumnya perlu dijelaskan bahwa arduino yang disebutkan pada kalimat pertama adalah menunjukkan pada board arduino. Perbedaan antara board arduino dengan esp8266 adalah esp8266 telah memiliki stack khusus (fitur pembeda) untuk komunikasi wifi, sementara board arduino perlu menambahkan shield.


Mungkin cukup sampai disini dulu penjelasannya. terima kasih sudah berkunjung..

Sunday, January 28, 2018

Kondisi yang saling berlomba (Race Condition)

Race Condition

Istilah Race Condtion memang sudah banyak dibahas oleh teman-teman yang suka menulis blog. Banyak juga gaya bahasa dan penulisan tentang topik ini coba disajikan oleh teman-teman tersebut. Secara keilmuan, semua yang ditulis mengenai arti dari istilah race condition adalah benar, yaitu kondisi yang saling berlomba (arti secara harafia).

Pada kesempatan ini saya tertarik membahas hal ini dari sudut pandang kelimuan saya yaitu sistem
tertanam, bahasa kerennya adalah embedded system. Baiklah, mari kita mulai.

Pengantar


Dalam beberapa blog dan literatur yang saya baca, menyebutkan bahwa race condition adalah kondisi dimana dua atau lebih proses mengakses satu memori. Mungkin menurut saya lebih tepatnya adalah kondisi dimana ada dua atau lebih proses yang saling berlomba mengakses satu memori yang sama. Mengapa satu memori ini menjadi target dari perlombaan?. Mari kita dekati pemahaman (istilah) tersebut dari kalimat sebelumnya.

Target perlombaan dalam embedded system adalah resource. Resource di sini bisa diartikan memori, atau batasan yang lainnya seperti antarmuka dengan modem gsm atau tampilan OLED dan lain sebagainya. Sebenarnya resource ini tidak harus diperebutkan jika hanya ada satu proses yang menggunakannya pada satu saat.

Hal yang ingin saya sampaikan adalah jika pada umumnya race condition adalah mengakses memori secara bersamaan, dalam embedded system diperluas lagi, yaitu istilah memori menjadi resource. Sehingga resource ini dapat berarti apa saja.

Pembahasan


Pada Embedded system, dampak race condition muncul ketika lebih dari satu proses yang aktif secara bersamaan. Task atau thread berarti proses dalam bidang RTOS. Sementara ISR juga adalah proses yang langsung dieksekusi jika terjadi interupt, disebut juga interupt handler.

Race condition di jelaskan dengan cukup sederhana oleh Miro Samek dalam video youtube pada link ini. Pada video tersebut di jelaskan tentang satu buah led yang diakses oleh dua proses, yaitu proses pertama bertugas untuk mematikan sementara proses kedua yang adalah interupt bertugas untuk menghidupkan. Kedua proses tersebut saling berkopetisi untuk mengakses led tersebut.

Analogi dari contoh proses led tersebut, jika diaplikasikan pada kendali tabung pendingin, Ketika interupt berfungsi untuk menyalakan tabung, sementara fungsi tersebut di nonaktifkan oleh proses pertama. Hal yang akan terjadi adalah karena tabung yang semakin pantas, maka lama kelamaan akan mengakibatkan ledakan.

Berikut ini adalah beberapa cara untuk menghindari race condition, Pertama adalah melihat lebih seksama melihat resource yang digununakan apakah resource yang akan diakses secara bersamaan masi bisa diakses ke bagian yang lebih kecil. Misalnya resource yang yang dimaksud adalah sebuah register, artinya adalah masi hal yang lebih kecil yang dapat diakses yaitu mengakses secara bit. Sehingga Bit yang digunakan oleh proses yang lain tidak terganggu.

Cara menghindar yang lain adalah dengan mutex. Mutex biasanya dijumpai pada sebuah RTOS atau fremework scheduler. Istilah lain dari mutex adalah semaphore bit. Proses yang terjadi pada mutex yaitu membatasi akses resource jika satu proses sedang menggunakannya atau sedang berlansung. Hal ini akan mencegah race condition karena proses yang sedang menggunakan resource tersebut tidak diganggu saat dia sedang berlangsung.

Penutup


Rice condition akan jarang ditemukan pada awal perangkat diaktifkan. Namun, setelah sistem tersebut berjalan cukup lama maka kemungkinan race condition dapat terjadi. Oleh karena itu sebaiknya mengantisipasi sejak awal dari pada terjadi hal hal yang tidak diinginkan.

Race condition juga tidak dapat terdeteksi oleh compiler. Jadi berhati-hati lah dalam membuat program dan ingat. Sesederhana apa pun design awal sistem kita, akan sangat membatu untuk melakukan proses troubleshoting dan debuging dikemudian hari.

Terima kasih untuk kunjuntannya di postingan pertama tahun ini... Salam