Programowanie Systemów Wbudowanych Programowanie Systemów Wbudowanych KSEM WETI PG May 11, 2015 Programowanie w C - biblioteka mraa (Intel) 1. Przykład “Blinking LED” w Eclipse CDT 2. Biblioteka mraa http://iotdk.intel.com/docs/master/mraa/ 3. Kompilacja projektu na platformę Intel Galileo (OS Debian) Eclipse CDT - IOT 4. Kompilacja biblioteki mraa na platformie Intel Galileo (jest w systemie plików Yocto, ale nie Debiana). Pakiety potrzebne na maszynie docelowej: build-essential git python I źródła: https://github.com/intel-iot-devkit/mraa I kompilacja: cd mraa mkdir build cd build cmake .. make install 5. Dopisanie ścieżki do biblioteki libmraa.so.0 do zmiennej środowiskowej: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/i386linux-gnu/ 6. Uruchomienie programu na Intel Galileo Programowanie Systemów Wbudowanych Moduł C/C++ w skrypcie Python Python/C API http://en.wikibooks.org/wiki/Python_Programming/Extending_with_C I Moduł C dla programów Python składa się z czterech części: I I I I dołączenie pliku nagłówkowego Python.h (zawsze na pierwszym miejscu!) funkcja w języku C tablica mapująca nazwy funkcji Python <-> C funkcja inicjalizująca Programowanie Systemów Wbudowanych Moduł C/C++ w skrypcie Python I Funkcja w języku C I Składnia: static PyObject ∗MyFunction( PyObject ∗self, PyObject ∗args ); I w języku Python nie ma wartości void. W kodzie C, będącym modułem dla Pythona, zamiast void używa się Py_RETURN_NONE. Przykład - funkcja func w module module: static PyObject ∗module_func(PyObject ∗self, PyObject ∗args) { /∗ obliczenia ∗/ Py_RETURN_NONE; } Programowanie Systemów Wbudowanych Moduł C/C++ w skrypcie Python I Tablica mapująca nazwy funkcji I tablica stuktur PyMethodDef struct PyMethodDef { char ∗ml_name; //nazwa widziana przez interpreter Python PyCFunction ml_meth; //funkcja w C int ml_flags; //rodzaj skadni funkcji char ∗ml_doc; }; //opis funkcji I przykład: static PyMethodDef module_methods[] = { { "func", (PyCFunction)module_func, METH_NOARGS, NULL }, { NULL, NULL, 0, NULL } }; Programowanie Systemów Wbudowanych Moduł C/C++ w skrypcie Python I Przykład - fibmodule.c Programowanie Systemów Wbudowanych Moduł C/C++ w skrypcie Python I szkielet kodu C modułu: #include <Python.h> static PyObject ∗module_func(PyObject ∗self, PyObject ∗args) { /∗ obliczenia ∗/ Py_RETURN_NONE; } static PyMethodDef module_methods[] = { { "func", (PyCFunction)module_func, METH_NOARGS, NULL }, { NULL, NULL, 0, NULL } }; PyMODINIT_FUNC initModule() { Py_InitModule3(func, module_methods, "docstring..."); } Programowanie Systemów Wbudowanych Moduł C/C++ w skrypcie Python I Funkcja inicjalizująca (setup.py) from distutils.core import setup, Extension setup(name=’fib’, version=’1.0’, \ ext_modules=[Extension(’fib’, [’fibmodule.c’])]) I budowa modułu i instalacja biblioteki $ python setup.py install I użycie >>> import fib >>> fib.fib(10) 55 Programowanie Systemów Wbudowanych