Thursday, February 9, 2012

Install Altera Linux Di Ubuntu

Pertama ubuntu defaultnya dash bukan bash. Maka ./setup dijalankan dengan :

bash ./setup --gui
Kedua, akan ada error sbb :

altera_installer_cmd: symbol lookup error: /usr/lib/i386-linux-gnu/libXi.so.6: undefined symbol: XESetWireToEventCookie

rename dulu file-nya :

sudo mv /usr/lib/i386-linux-gnu/libXi.so.6 /usr/lib/i386-linux-gnu/libXi.so.6.bak

jalankan lagi :

bash ./setup --gui

kalau sudah bisa run altera-nya, balikin lagi :

sudo mv /usr/lib/i386-linux-gnu/libXi.so.6.bak /usr/lib/i386-linux-gnu/libXi.so.6

oh yah installer-nya dalam *.iso, misalnya altera.iso :

sudo mkdir /media/iso

sudo mount altera.iso /media/isoimage/ -t iso9660 -o loop

Passing dan Calling C/C++ Struct di Matlab menggunakan Wrapper MEX-function

Matlab merupakan tools yang sangat powerful untuk melakukan komputasi matematis dan visualisasi grafik, termasuk pada aplikasi Digital Signal Processing (DSP). Dalam aplikasi DSP, kita sering bekerja pada dua domain bahasa, yaitu: C/C++ dan Matlab, karena kedua bahasa tersebut mempunyai kelebihan dan kekurangan masing-masing. C/C++ sangat portable, dieksekusi dengan cepat, dan dapat dijalankan di hampir semua platform, tapi tidak mudah melakukan visualisasi grafik. Sedangkan Matlab dapat dengan mudah melakukan visualisasi grafik, tapi lambat dalam proses eksekusinya, dan sangat tidak portable. Untuk menggabungkan C/C++ dan Matlab ada dua cara: penggabungan dilakukan di C/C++, atau penggabungan dilakukan di Matlab.

Untuk menggabungkan Matlab di C/C++, sudah dijelaskan pada tulisan sebelumnya. Untuk menggabungkan C/C++ di Matlab, digunakan MEX sebagai wrappernya. Tulisan ini menjelaskan penggunaan MEX untuk mewrap fungsi yang menggunakan C/C++ struct sebagai parameternya.

Selengkapnya baca di halaman Download atau ke link berikut.

Wednesday, February 8, 2012

Menjalankan Fungsi Matlab dengan Compiler C

Berikut ini kita akan belajar bagaimana membuat sebuah fungsi matlab (.m) bisa dijalankan di compiler C dengan platform Windows. Dalam hal ini kita menggunakan platform Microsoft Visual Studio. Cara ini akan memudahkan bagi kita apabila sebuah fungsi sudah cukup advance di matlab, dan kita hanya perlu memanfaatkannya (dalam bentuk shared library) tanpa perlu mengconvert code tersebut seluruhnya ke dalam platform C/C++. Kali ini kita akan membuat contoh sederhana sebuah code matlab yang akan dicoba dimanfaatkan dalam platform C (dalam bentuk shared library) kemudian bisa menghasilkan file .exe.

1. Pertama kita membuat fungsi matlab. Sebagai contoh fungsi coffeebreak.m sebagai berikut :

function coffeebreak
% Load the topographical data for the globe
load('topo.mat', 'topo', 'topomap1');

% Create a unit sphere with 50 facets. This sphere is the Earth.
[x,y,z] = sphere(50);

% Establish initial viewing and lighting parameters. Use Phong shading
% and texture mapping to wrap the topo map data around the sphere.

props.FaceColor= 'texture';
props.EdgeColor = 'none';
props.FaceLighting = 'phong';
props.CData = topo;

% Set the viewpoint to look at the Atlantic Ocean.
view(-130, 10);

% Draw the sphere, with the topo data texture mapped to the surface.
s=surface(x,y,z,props);
set(gcf, 'Color', 'white');  % White background
axis square
axis off
axis equal

title('Coffee Break  at Indonesian Chip Engineer.', 'FontSize', 14, 'FontWeight', 'Bold');
end

referensi code : http://blogs.mathworks.com/loren/2010/11/18/deploying-standalone-applications/

2. Kemudian jalankan program coffeebreak.m diatas di platform matlab dengan sintax berikut ini. Ini bertujuan untuk membuat file 'shared library'.
mcc -t -L C -W lib:mylib -T link:lib -h coffeebreak.m libmmfile.mlib

maka pada folder/directory tempat kita menyimpan, akan ada tambahan beberapa file sebagai berikut :
- mccExcludedFiles (text document)
- mylib.c
- mylib.dll
- mylib (export library file)
- mylib.exports
- mylib.h
- mylib (object file library)
- mylib.prj
- mylib_mcc_component_data.c
- readme.txt
3. Buka software Microsoft Visual Studio (MVS) dan membuat code C yang sesuai dengan mylib.dll yang sudah dihasilkan pada poin 2 diatas. Untuk membuat code C, kita membutuhkan software dependency walker untuk membaca fungsi-fungsi apa saja yang ada dalam mylib.dll.
4. Kalau belum memilki dependency walker, silahkan download di internet. Setelah file mylib.dll dibuka di software ini maka akan didapatkan fungsi-fungsi yang bisa kita gunakan sebagai fungsi code C kita. Dan berikut main.c yang bisa kita hasilkan :
#include 
#include < windows>
#include "mylib.h"

int main ()
{
mylibInitialize();       
mlfCoffeeBreak();
mylibTerminate();
/* ketiga sintac diatas diambil dari hasil extraksi mylib.dll dengan menggunakan software dependency walker */
}
5. Pada software Microsoft visual studio, bagian header files, silahkan ambil dari mylib.h yang sudah dihasilkan pada point 2.
6. Pada software Microsoft visual studio , klik pada bagian nama project, kemudian klik kanan. Pilih bagian properties. Pada bagian C/C++pilih bagian ‘general’ dan tambahkan ‘additional include directories’ dengan $MATLABROOT\extern\include\cpp;$MATLAB\extern\include
7. Pada bagian ‘preprocessor’ kita bisa tambahkan _MBCS, MSVC, MSWIND, IBMPC
8. Pada bagian ‘code generation’, pastikan untuk runtime library sudah tersetting : Multi-threaded Debug DLL (/MDd)
9. Pada bagian resource files, masukkan mylib.lib.
10. Pada folder computer kita, pastikan seluruh file pada poin 2 sudah berada satu directory dengan main.c.
11. Balik lagi ke software MVS, kita bisa compile project dengan cara ‘Build’ or ‘Rebuild’.
12. Setelah decompile, nanti pada bagian directory debug di computer kita bisa ditemukan file .exe.
13. Sebelum dijalankan, copy mylib.dll ke folder tempat .exe berada. Dan jalankan code exe-nya !!... maka hasilnya adalah sebagai berikut :


Silahkan mencoba ^_^

(fin / yan)


Referensi :
1. http://www.mathworks.com/support/solutions/en/data/1-18CBI/index.html?solution=1-18CBI
2. http://goffconcepts.com/techarticles/development/cpp/calldll.html