Programowanie Systemów Wbudowanych

advertisement
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
Download